@vue/devtools 6.0.9 → 6.0.10
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 +2 -2
- package/package.json +1 -1
package/build/backend.js
CHANGED
|
@@ -79,7 +79,7 @@ eval("\n/* eslint-disable @typescript-eslint/ban-types */\n\nObject.defineProper
|
|
|
79
79
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
80
80
|
|
|
81
81
|
"use strict";
|
|
82
|
-
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsHookable = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nclass DevtoolsHookable {\n constructor(ctx, plugin = null) {\n this.handlers = {};\n this.ctx = ctx;\n this.plugin = plugin;\n }\n\n hook(eventType, handler, pluginPermision = null) {\n const handlers = this.handlers[eventType] = this.handlers[eventType] || [];\n\n if (this.plugin) {\n const originalHandler = handler;\n\n handler = (...args) => {\n // Plugin permission\n if (!(0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED) || pluginPermision && !(0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, pluginPermision)) return; // App scope\n\n if (!this.plugin.descriptor.disableAppScope && this.ctx.currentAppRecord.options.app !== this.plugin.descriptor.app) return; // Plugin scope\n\n if (!this.plugin.descriptor.disablePluginScope && args[0].pluginId != null && args[0].pluginId !== this.plugin.descriptor.id) return;\n return originalHandler(...args);\n };\n }\n\n handlers.push({\n handler,\n plugin: this.ctx.currentPlugin\n });\n }\n\n async callHandlers(eventType, payload, ctx) {\n if (this.handlers[eventType]) {\n const handlers = this.handlers[eventType];\n\n for (let i = 0; i < handlers.length; i++) {\n const {\n handler,\n plugin\n } = handlers[i];\n\n try {\n await handler(payload, ctx);\n } catch (e) {\n console.error(`An error occurred in hook ${eventType}${plugin ? ` registered by plugin ${plugin.descriptor.id}` : ''}`);\n console.error(e);\n }\n }\n }\n\n return payload;\n }\n\n transformCall(handler) {\n this.hook(\"transformCall\"\n /* TRANSFORM_CALL */\n , handler);\n }\n\n getAppRecordName(handler) {\n this.hook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , handler);\n }\n\n getAppRootInstance(handler) {\n this.hook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , handler);\n }\n\n registerApplication(handler) {\n this.hook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , handler);\n }\n\n walkComponentTree(handler) {\n this.hook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n visitComponentTree(handler) {\n this.hook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n walkComponentParents(handler) {\n this.hook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n inspectComponent(handler) {\n this.hook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentBounds(handler) {\n this.hook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentName(handler) {\n this.hook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentInstances(handler) {\n this.hook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getElementComponent(handler) {\n this.hook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentRootElements(handler) {\n this.hook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n editComponentState(handler) {\n this.hook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentDevtoolsOptions(handler) {\n this.hook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentRenderCode(handler) {\n this.hook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n inspectTimelineEvent(handler) {\n this.hook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , handler, shared_utils_1.PluginPermission.TIMELINE);\n }\n\n timelineCleared(handler) {\n this.hook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , handler, shared_utils_1.PluginPermission.TIMELINE);\n }\n\n getInspectorTree(handler) {\n this.hook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n getInspectorState(handler) {\n this.hook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n editInspectorState(handler) {\n this.hook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n setPluginSettings(handler) {\n this.hook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , handler);\n }\n\n}\n\nexports.DevtoolsHookable = DevtoolsHookable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TCxDQUFTO0FBQUE7QUFBVCxNQUFxQyxPQUFyQztBQUNEOztBQTdJMEI7O0FBQTdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZ1ZS9kZXZ0b29scy8uLi9zcmMvaG9va3MudHM/MWUzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGV2dG9vbHNIb29rYWJsZSA9IHZvaWQgMDtcbmNvbnN0IHNoYXJlZF91dGlsc18xID0gcmVxdWlyZShcIkB2dWUtZGV2dG9vbHMvc2hhcmVkLXV0aWxzXCIpO1xuY2xhc3MgRGV2dG9vbHNIb29rYWJsZSB7XG4gICAgY29uc3RydWN0b3IoY3R4LCBwbHVnaW4gPSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIH1cbiAgICBob29rKGV2ZW50VHlwZSwgaGFuZGxlciwgcGx1Z2luUGVybWlzaW9uID0gbnVsbCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9ICh0aGlzLmhhbmRsZXJzW2V2ZW50VHlwZV0gPSB0aGlzLmhhbmRsZXJzW2V2ZW50VHlwZV0gfHwgW10pO1xuICAgICAgICBpZiAodGhpcy5wbHVnaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICBoYW5kbGVyID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBQbHVnaW4gcGVybWlzc2lvblxuICAgICAgICAgICAgICAgIGlmICghKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uRU5BQkxFRCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHBsdWdpblBlcm1pc2lvbiAmJiAhKDAsIHNoYXJlZF91dGlsc18xLmhhc1BsdWdpblBlcm1pc3Npb24pKHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQsIHBsdWdpblBlcm1pc2lvbikpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gQXBwIHNjb3BlXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmRpc2FibGVBcHBTY29wZSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5jdXJyZW50QXBwUmVjb3JkLm9wdGlvbnMuYXBwICE9PSB0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmFwcClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIFBsdWdpbiBzY29wZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5kaXNhYmxlUGx1Z2luU2NvcGUgJiZcbiAgICAgICAgICAgICAgICAgICAgYXJnc1swXS5wbHVnaW5JZCAhPSBudWxsICYmIGFyZ3NbMF0ucGx1Z2luSWQgIT09IHRoaXMucGx1Z2luLmRlc2NyaXB0b3IuaWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxIYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVycy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICBwbHVnaW46IHRoaXMuY3R4LmN1cnJlbnRQbHVnaW4sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBwYXlsb2FkLCBjdHgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlcnNbZXZlbnRUeXBlXSkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50VHlwZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoYW5kbGVyLCBwbHVnaW4gfSA9IGhhbmRsZXJzW2ldO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgaW4gaG9vayAke2V2ZW50VHlwZX0ke3BsdWdpbiA/IGAgcmVnaXN0ZXJlZCBieSBwbHVnaW4gJHtwbHVnaW4uZGVzY3JpcHRvci5pZH1gIDogJyd9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DYWxsKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwidHJhbnNmb3JtQ2FsbFwiIC8qIFRSQU5TRk9STV9DQUxMICovLCBoYW5kbGVyKTtcbiAgICB9XG4gICAgZ2V0QXBwUmVjb3JkTmFtZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldEFwcFJlY29yZE5hbWVcIiAvKiBHRVRfQVBQX1JFQ09SRF9OQU1FICovLCBoYW5kbGVyKTtcbiAgICB9XG4gICAgZ2V0QXBwUm9vdEluc3RhbmNlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0QXBwUm9vdEluc3RhbmNlXCIgLyogR0VUX0FQUF9ST09UX0lOU1RBTkNFICovLCBoYW5kbGVyKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJBcHBsaWNhdGlvbihoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcInJlZ2lzdGVyQXBwbGljYXRpb25cIiAvKiBSRUdJU1RFUl9BUFBMSUNBVElPTiAqLywgaGFuZGxlcik7XG4gICAgfVxuICAgIHdhbGtDb21wb25lbnRUcmVlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwid2Fsa0NvbXBvbmVudFRyZWVcIiAvKiBXQUxLX0NPTVBPTkVOVF9UUkVFICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICB2aXNpdENvbXBvbmVudFRyZWUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJ2aXNpdENvbXBvbmVudFRyZWVcIiAvKiBWSVNJVF9DT01QT05FTlRfVFJFRSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgd2Fsa0NvbXBvbmVudFBhcmVudHMoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJ3YWxrQ29tcG9uZW50UGFyZW50c1wiIC8qIFdBTEtfQ09NUE9ORU5UX1BBUkVOVFMgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGluc3BlY3RDb21wb25lbnQoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJpbnNwZWN0Q29tcG9uZW50XCIgLyogSU5TUEVDVF9DT01QT05FTlQgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudEJvdW5kcyhoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldENvbXBvbmVudEJvdW5kc1wiIC8qIEdFVF9DT01QT05FTlRfQk9VTkRTICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnROYW1lKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0Q29tcG9uZW50TmFtZVwiIC8qIEdFVF9DT01QT05FTlRfTkFNRSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50SW5zdGFuY2VzKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0Q29tcG9uZW50SW5zdGFuY2VzXCIgLyogR0VUX0NPTVBPTkVOVF9JTlNUQU5DRVMgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGdldEVsZW1lbnRDb21wb25lbnQoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRFbGVtZW50Q29tcG9uZW50XCIgLyogR0VUX0VMRU1FTlRfQ09NUE9ORU5UICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRSb290RWxlbWVudHMoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRDb21wb25lbnRSb290RWxlbWVudHNcIiAvKiBHRVRfQ09NUE9ORU5UX1JPT1RfRUxFTUVOVFMgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGVkaXRDb21wb25lbnRTdGF0ZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImVkaXRDb21wb25lbnRTdGF0ZVwiIC8qIEVESVRfQ09NUE9ORU5UX1NUQVRFICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnREZXZ0b29sc09wdGlvbnMoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRBcHBEZXZ0b29sc09wdGlvbnNcIiAvKiBHRVRfQ09NUE9ORU5UX0RFVlRPT0xTX09QVElPTlMgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudFJlbmRlckNvZGUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRDb21wb25lbnRSZW5kZXJDb2RlXCIgLyogR0VUX0NPTVBPTkVOVF9SRU5ERVJfQ09ERSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgaW5zcGVjdFRpbWVsaW5lRXZlbnQoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJpbnNwZWN0VGltZWxpbmVFdmVudFwiIC8qIElOU1BFQ1RfVElNRUxJTkVfRVZFTlQgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uVElNRUxJTkUpO1xuICAgIH1cbiAgICB0aW1lbGluZUNsZWFyZWQoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJ0aW1lbGluZUNsZWFyZWRcIiAvKiBUSU1FTElORV9DTEVBUkVEICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLlRJTUVMSU5FKTtcbiAgICB9XG4gICAgZ2V0SW5zcGVjdG9yVHJlZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldEluc3BlY3RvclRyZWVcIiAvKiBHRVRfSU5TUEVDVE9SX1RSRUUgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUik7XG4gICAgfVxuICAgIGdldEluc3BlY3RvclN0YXRlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0SW5zcGVjdG9yU3RhdGVcIiAvKiBHRVRfSU5TUEVDVE9SX1NUQVRFICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpO1xuICAgIH1cbiAgICBlZGl0SW5zcGVjdG9yU3RhdGUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJlZGl0SW5zcGVjdG9yU3RhdGVcIiAvKiBFRElUX0lOU1BFQ1RPUl9TVEFURSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKTtcbiAgICB9XG4gICAgc2V0UGx1Z2luU2V0dGluZ3MoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJzZXRQbHVnaW5TZXR0aW5nc1wiIC8qIFNFVF9QTFVHSU5fU0VUVElOR1MgKi8sIGhhbmRsZXIpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGV2dG9vbHNIb29rYWJsZSA9IERldnRvb2xzSG9va2FibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29618\n");
|
|
82
|
+
eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.DevtoolsHookable = void 0;\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nclass DevtoolsHookable {\n constructor(ctx, plugin = null) {\n this.handlers = {};\n this.ctx = ctx;\n this.plugin = plugin;\n }\n\n hook(eventType, handler, pluginPermision = null) {\n const handlers = this.handlers[eventType] = this.handlers[eventType] || [];\n\n if (this.plugin) {\n const originalHandler = handler;\n\n handler = (...args) => {\n // Plugin permission\n if (!(0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, shared_utils_1.PluginPermission.ENABLED) || pluginPermision && !(0, shared_utils_1.hasPluginPermission)(this.plugin.descriptor.id, pluginPermision)) return; // App scope\n\n if (!this.plugin.descriptor.disableAppScope && this.ctx.currentAppRecord.options.app !== this.plugin.descriptor.app) return; // Plugin scope\n\n if (!this.plugin.descriptor.disablePluginScope && args[0].pluginId != null && args[0].pluginId !== this.plugin.descriptor.id) return;\n return originalHandler(...args);\n };\n }\n\n handlers.push({\n handler,\n plugin: this.ctx.currentPlugin\n });\n }\n\n async callHandlers(eventType, payload, ctx) {\n if (this.handlers[eventType]) {\n const handlers = this.handlers[eventType];\n\n for (let i = 0; i < handlers.length; i++) {\n const {\n handler,\n plugin\n } = handlers[i];\n\n try {\n await handler(payload, ctx);\n } catch (e) {\n console.error(`An error occurred in hook '${eventType}'${plugin ? ` registered by plugin '${plugin.descriptor.id}'` : ''} with payload:`, payload);\n console.error(e);\n }\n }\n }\n\n return payload;\n }\n\n transformCall(handler) {\n this.hook(\"transformCall\"\n /* TRANSFORM_CALL */\n , handler);\n }\n\n getAppRecordName(handler) {\n this.hook(\"getAppRecordName\"\n /* GET_APP_RECORD_NAME */\n , handler);\n }\n\n getAppRootInstance(handler) {\n this.hook(\"getAppRootInstance\"\n /* GET_APP_ROOT_INSTANCE */\n , handler);\n }\n\n registerApplication(handler) {\n this.hook(\"registerApplication\"\n /* REGISTER_APPLICATION */\n , handler);\n }\n\n walkComponentTree(handler) {\n this.hook(\"walkComponentTree\"\n /* WALK_COMPONENT_TREE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n visitComponentTree(handler) {\n this.hook(\"visitComponentTree\"\n /* VISIT_COMPONENT_TREE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n walkComponentParents(handler) {\n this.hook(\"walkComponentParents\"\n /* WALK_COMPONENT_PARENTS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n inspectComponent(handler) {\n this.hook(\"inspectComponent\"\n /* INSPECT_COMPONENT */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentBounds(handler) {\n this.hook(\"getComponentBounds\"\n /* GET_COMPONENT_BOUNDS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentName(handler) {\n this.hook(\"getComponentName\"\n /* GET_COMPONENT_NAME */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentInstances(handler) {\n this.hook(\"getComponentInstances\"\n /* GET_COMPONENT_INSTANCES */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getElementComponent(handler) {\n this.hook(\"getElementComponent\"\n /* GET_ELEMENT_COMPONENT */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentRootElements(handler) {\n this.hook(\"getComponentRootElements\"\n /* GET_COMPONENT_ROOT_ELEMENTS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n editComponentState(handler) {\n this.hook(\"editComponentState\"\n /* EDIT_COMPONENT_STATE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentDevtoolsOptions(handler) {\n this.hook(\"getAppDevtoolsOptions\"\n /* GET_COMPONENT_DEVTOOLS_OPTIONS */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n getComponentRenderCode(handler) {\n this.hook(\"getComponentRenderCode\"\n /* GET_COMPONENT_RENDER_CODE */\n , handler, shared_utils_1.PluginPermission.COMPONENTS);\n }\n\n inspectTimelineEvent(handler) {\n this.hook(\"inspectTimelineEvent\"\n /* INSPECT_TIMELINE_EVENT */\n , handler, shared_utils_1.PluginPermission.TIMELINE);\n }\n\n timelineCleared(handler) {\n this.hook(\"timelineCleared\"\n /* TIMELINE_CLEARED */\n , handler, shared_utils_1.PluginPermission.TIMELINE);\n }\n\n getInspectorTree(handler) {\n this.hook(\"getInspectorTree\"\n /* GET_INSPECTOR_TREE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n getInspectorState(handler) {\n this.hook(\"getInspectorState\"\n /* GET_INSPECTOR_STATE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n editInspectorState(handler) {\n this.hook(\"editInspectorState\"\n /* EDIT_INSPECTOR_STATE */\n , handler, shared_utils_1.PluginPermission.CUSTOM_INSPECTOR);\n }\n\n setPluginSettings(handler) {\n this.hook(\"setPluginSettings\"\n /* SET_PLUGIN_SETTINGS */\n , handler);\n }\n\n}\n\nexports.DevtoolsHookable = DevtoolsHookable;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMxRSxTQUFLLElBQUwsQ0FBUztBQUFBO0FBQVQsTUFBcUMsT0FBckM7QUFDRDs7QUE3STBCOztBQUE3QiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL2hvb2tzLnRzPzFlMzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRldnRvb2xzSG9va2FibGUgPSB2b2lkIDA7XG5jb25zdCBzaGFyZWRfdXRpbHNfMSA9IHJlcXVpcmUoXCJAdnVlLWRldnRvb2xzL3NoYXJlZC11dGlsc1wiKTtcbmNsYXNzIERldnRvb2xzSG9va2FibGUge1xuICAgIGNvbnN0cnVjdG9yKGN0eCwgcGx1Z2luID0gbnVsbCkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG4gICAgaG9vayhldmVudFR5cGUsIGhhbmRsZXIsIHBsdWdpblBlcm1pc2lvbiA9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSAodGhpcy5oYW5kbGVyc1tldmVudFR5cGVdID0gdGhpcy5oYW5kbGVyc1tldmVudFR5cGVdIHx8IFtdKTtcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgaGFuZGxlciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUGx1Z2luIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoISgwLCBzaGFyZWRfdXRpbHNfMS5oYXNQbHVnaW5QZXJtaXNzaW9uKSh0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkVOQUJMRUQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChwbHVnaW5QZXJtaXNpb24gJiYgISgwLCBzaGFyZWRfdXRpbHNfMS5oYXNQbHVnaW5QZXJtaXNzaW9uKSh0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkLCBwbHVnaW5QZXJtaXNpb24pKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIEFwcCBzY29wZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5kaXNhYmxlQXBwU2NvcGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguY3VycmVudEFwcFJlY29yZC5vcHRpb25zLmFwcCAhPT0gdGhpcy5wbHVnaW4uZGVzY3JpcHRvci5hcHApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyBQbHVnaW4gc2NvcGVcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luLmRlc2NyaXB0b3IuZGlzYWJsZVBsdWdpblNjb3BlICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0ucGx1Z2luSWQgIT0gbnVsbCAmJiBhcmdzWzBdLnBsdWdpbklkICE9PSB0aGlzLnBsdWdpbi5kZXNjcmlwdG9yLmlkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSGFuZGxlciguLi5hcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgcGx1Z2luOiB0aGlzLmN0eC5jdXJyZW50UGx1Z2luLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcGF5bG9hZCwgY3R4KSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXJzW2V2ZW50VHlwZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1tldmVudFR5cGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGFuZGxlciwgcGx1Z2luIH0gPSBoYW5kbGVyc1tpXTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIGluIGhvb2sgJyR7ZXZlbnRUeXBlfScke3BsdWdpbiA/IGAgcmVnaXN0ZXJlZCBieSBwbHVnaW4gJyR7cGx1Z2luLmRlc2NyaXB0b3IuaWR9J2AgOiAnJ30gd2l0aCBwYXlsb2FkOmAsIHBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ2FsbChoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcInRyYW5zZm9ybUNhbGxcIiAvKiBUUkFOU0ZPUk1fQ0FMTCAqLywgaGFuZGxlcik7XG4gICAgfVxuICAgIGdldEFwcFJlY29yZE5hbWUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRBcHBSZWNvcmROYW1lXCIgLyogR0VUX0FQUF9SRUNPUkRfTkFNRSAqLywgaGFuZGxlcik7XG4gICAgfVxuICAgIGdldEFwcFJvb3RJbnN0YW5jZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldEFwcFJvb3RJbnN0YW5jZVwiIC8qIEdFVF9BUFBfUk9PVF9JTlNUQU5DRSAqLywgaGFuZGxlcik7XG4gICAgfVxuICAgIHJlZ2lzdGVyQXBwbGljYXRpb24oaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJyZWdpc3RlckFwcGxpY2F0aW9uXCIgLyogUkVHSVNURVJfQVBQTElDQVRJT04gKi8sIGhhbmRsZXIpO1xuICAgIH1cbiAgICB3YWxrQ29tcG9uZW50VHJlZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcIndhbGtDb21wb25lbnRUcmVlXCIgLyogV0FMS19DT01QT05FTlRfVFJFRSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgdmlzaXRDb21wb25lbnRUcmVlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwidmlzaXRDb21wb25lbnRUcmVlXCIgLyogVklTSVRfQ09NUE9ORU5UX1RSRUUgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIHdhbGtDb21wb25lbnRQYXJlbnRzKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwid2Fsa0NvbXBvbmVudFBhcmVudHNcIiAvKiBXQUxLX0NPTVBPTkVOVF9QQVJFTlRTICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBpbnNwZWN0Q29tcG9uZW50KGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiaW5zcGVjdENvbXBvbmVudFwiIC8qIElOU1BFQ1RfQ09NUE9ORU5UICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRCb3VuZHMoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRDb21wb25lbnRCb3VuZHNcIiAvKiBHRVRfQ09NUE9ORU5UX0JPVU5EUyAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50TmFtZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldENvbXBvbmVudE5hbWVcIiAvKiBHRVRfQ09NUE9ORU5UX05BTUUgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGdldENvbXBvbmVudEluc3RhbmNlcyhoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldENvbXBvbmVudEluc3RhbmNlc1wiIC8qIEdFVF9DT01QT05FTlRfSU5TVEFOQ0VTICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50Q29tcG9uZW50KGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0RWxlbWVudENvbXBvbmVudFwiIC8qIEdFVF9FTEVNRU5UX0NPTVBPTkVOVCAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0Q29tcG9uZW50Um9vdEVsZW1lbnRzXCIgLyogR0VUX0NPTVBPTkVOVF9ST09UX0VMRU1FTlRTICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBlZGl0Q29tcG9uZW50U3RhdGUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJlZGl0Q29tcG9uZW50U3RhdGVcIiAvKiBFRElUX0NPTVBPTkVOVF9TVEFURSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DT01QT05FTlRTKTtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50RGV2dG9vbHNPcHRpb25zKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0QXBwRGV2dG9vbHNPcHRpb25zXCIgLyogR0VUX0NPTVBPTkVOVF9ERVZUT09MU19PUFRJT05TICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNPTVBPTkVOVFMpO1xuICAgIH1cbiAgICBnZXRDb21wb25lbnRSZW5kZXJDb2RlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZ2V0Q29tcG9uZW50UmVuZGVyQ29kZVwiIC8qIEdFVF9DT01QT05FTlRfUkVOREVSX0NPREUgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ09NUE9ORU5UUyk7XG4gICAgfVxuICAgIGluc3BlY3RUaW1lbGluZUV2ZW50KGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiaW5zcGVjdFRpbWVsaW5lRXZlbnRcIiAvKiBJTlNQRUNUX1RJTUVMSU5FX0VWRU5UICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLlRJTUVMSU5FKTtcbiAgICB9XG4gICAgdGltZWxpbmVDbGVhcmVkKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwidGltZWxpbmVDbGVhcmVkXCIgLyogVElNRUxJTkVfQ0xFQVJFRCAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5USU1FTElORSk7XG4gICAgfVxuICAgIGdldEluc3BlY3RvclRyZWUoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhvb2soXCJnZXRJbnNwZWN0b3JUcmVlXCIgLyogR0VUX0lOU1BFQ1RPUl9UUkVFICovLCBoYW5kbGVyLCBzaGFyZWRfdXRpbHNfMS5QbHVnaW5QZXJtaXNzaW9uLkNVU1RPTV9JTlNQRUNUT1IpO1xuICAgIH1cbiAgICBnZXRJbnNwZWN0b3JTdGF0ZShoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaG9vayhcImdldEluc3BlY3RvclN0YXRlXCIgLyogR0VUX0lOU1BFQ1RPUl9TVEFURSAqLywgaGFuZGxlciwgc2hhcmVkX3V0aWxzXzEuUGx1Z2luUGVybWlzc2lvbi5DVVNUT01fSU5TUEVDVE9SKTtcbiAgICB9XG4gICAgZWRpdEluc3BlY3RvclN0YXRlKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwiZWRpdEluc3BlY3RvclN0YXRlXCIgLyogRURJVF9JTlNQRUNUT1JfU1RBVEUgKi8sIGhhbmRsZXIsIHNoYXJlZF91dGlsc18xLlBsdWdpblBlcm1pc3Npb24uQ1VTVE9NX0lOU1BFQ1RPUik7XG4gICAgfVxuICAgIHNldFBsdWdpblNldHRpbmdzKGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5ob29rKFwic2V0UGx1Z2luU2V0dGluZ3NcIiAvKiBTRVRfUExVR0lOX1NFVFRJTkdTICovLCBoYW5kbGVyKTtcbiAgICB9XG59XG5leHBvcnRzLkRldnRvb2xzSG9va2FibGUgPSBEZXZ0b29sc0hvb2thYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29618\n");
|
|
83
83
|
|
|
84
84
|
/***/ }),
|
|
85
85
|
|
|
@@ -315,7 +315,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));
|
|
|
315
315
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
316
316
|
|
|
317
317
|
"use strict";
|
|
318
|
-
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n 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.substring(0, payload.nodeId.length - 1).split('/'), ...path];\n }\n\n store._committing = true;\n payload.set(store._vm.$data.$$state, path);\n store._committing = false;\n }\n });\n api.addTimelineLayer({\n id: VUEX_MUTATIONS_ID,\n label: 'Vuex Mutations',\n color: LIME_500\n });\n api.addTimelineLayer({\n id: VUEX_ACTIONS_ID,\n label: 'Vuex Actions',\n color: LIME_500\n });\n hook.on('vuex:mutation', (mutation, state) => {\n api.sendInspectorState(VUEX_INSPECTOR_ID);\n const data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = (0, clone_deep_1.default)(state);\n api.addTimelineEvent({\n layerId: VUEX_MUTATIONS_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data\n }\n });\n });\n\n function legacySingleActionSub(action, state) {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n data\n }\n });\n }\n\n (_a = store.subscribeAction) === null || _a === void 0 ? void 0 : _a.call(store, api.getSettings().legacyActions ? legacySingleActionSub : {\n before: (action, state) => {\n const data = {};\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data\n }\n });\n },\n after: (action, state) => {\n const data = {};\n\n const duration = Date.now() - action._time;\n\n data.duration = {\n _custom: {\n type: 'duration',\n display: `${duration}ms`,\n tooltip: 'Action duration',\n value: duration\n }\n };\n\n if (action.payload) {\n data.payload = action.payload;\n }\n\n data.state = state;\n api.addTimelineEvent({\n layerId: VUEX_ACTIONS_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data\n }\n });\n }\n }, {\n prepend: true\n }); // Inspect getters on mutations\n\n api.on.inspectTimelineEvent(payload => {\n if (payload.layerId === VUEX_MUTATIONS_ID) {\n const getterKeys = Object.keys(store.getters);\n\n if (getterKeys.length) {\n const vm = new Vue({\n data: {\n $$state: payload.data.state\n },\n computed: store._vm.$options.computed\n });\n const originalVm = store._vm;\n store._vm = vm;\n const tree = transformPathsToObjectTree(store.getters);\n payload.data.getters = (0, clone_deep_1.default)(tree);\n store._vm = originalVm;\n vm.$destroy();\n }\n }\n });\n }\n });\n}\n\nexports.setupPlugin = setupPlugin;\n/**\n * Extracted from tailwind palette\n */\n\nconst BLUE_600 = 0x2563eb;\nconst LIME_500 = 0x84cc16;\nconst CYAN_400 = 0x22d3ee;\nconst ORANGE_400 = 0xfb923c;\nconst WHITE = 0xffffff;\nconst DARK = 0x666666;\n\nfunction formatRouteNode(router, route, parentPath, filter) {\n var _a, _b;\n\n const node = {\n id: parentPath + route.path,\n label: route.path,\n children: (_a = route.children) === null || _a === void 0 ? void 0 : _a.map(child => formatRouteNode(router, child, route.path, filter)).filter(Boolean),\n tags: []\n };\n if (filter && !node.id.includes(filter) && !((_b = node.children) === null || _b === void 0 ? void 0 : _b.length)) return null;\n\n if (route.name != null) {\n node.tags.push({\n label: String(route.name),\n textColor: 0,\n backgroundColor: CYAN_400\n });\n }\n\n if (route.alias != null) {\n node.tags.push({\n label: 'alias',\n textColor: 0,\n backgroundColor: ORANGE_400\n });\n }\n\n const currentPath = router.currentRoute.matched.reduce((p, m) => p + m.path, '');\n\n if (node.id === currentPath) {\n node.tags.push({\n label: 'active',\n textColor: WHITE,\n backgroundColor: BLUE_600\n });\n }\n\n if (route.redirect) {\n node.tags.push({\n label: 'redirect: ' + (typeof route.redirect === 'string' ? route.redirect : 'Object'),\n textColor: WHITE,\n backgroundColor: DARK\n });\n }\n\n return node;\n}\n\nfunction formatRouteData(route) {\n const data = [];\n data.push({\n key: 'path',\n value: route.path\n });\n\n if (route.redirect) {\n data.push({\n key: 'redirect',\n value: route.redirect\n });\n }\n\n if (route.alias) {\n data.push({\n key: 'alias',\n value: route.alias\n });\n }\n\n if (route.props) {\n data.push({\n key: 'props',\n value: route.props\n });\n }\n\n if (route.name && route.name != null) {\n data.push({\n key: 'name',\n value: route.name\n });\n }\n\n if (route.component) {\n const component = {}; // if (route.component.__file) {\n // component.file = route.component.__file\n // }\n\n if (route.component.template) {\n component.template = route.component.template;\n }\n\n if (route.component.props) {\n component.props = route.component.props;\n }\n\n if (!(0, shared_utils_1.isEmptyObject)(component)) {\n data.push({\n key: 'component',\n value: component\n });\n }\n }\n\n return data;\n}\n\nfunction getPathId(routeMatcher) {\n let path = routeMatcher.path;\n\n if (routeMatcher.parent) {\n path = getPathId(routeMatcher.parent) + path;\n }\n\n return path;\n}\n\nconst TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: WHITE,\n backgroundColor: DARK\n};\nconst VUEX_ROOT_PATH = '__vdt_root';\nconst VUEX_MODULE_PATH_SEPARATOR = '[vdt]';\nconst VUEX_MODULE_PATH_SEPARATOR_REG = /\\[vdt\\]/g;\n\nfunction formatStoreForInspectorTree(module, moduleName, path) {\n 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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QUF0QjtBQUNEO0FBQ0YsR0F0QkQ7QUF1QkEsU0FBTyxNQUFQO0FBQ0Q7O0FBRUQsU0FBUyxjQUFULENBQXlCLFNBQXpCLEVBQW9DLElBQXBDLEVBQXdDO0FBQ3RDLFFBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFMLENBQVcsMEJBQVgsRUFBdUMsTUFBdkMsQ0FBK0MsQ0FBRCxJQUFPLENBQXJELENBQWQ7QUFDQSxTQUFPLEtBQUssQ0FBQyxNQUFOLENBQ0wsQ0FBQyxNQUFELEVBQVMsVUFBVCxFQUFxQixDQUFyQixLQUEwQjtBQUN4QixVQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxLQUFLLGNBQWYsR0FBZ0MsTUFBaEMsR0FBeUMsVUFBMUMsQ0FBcEI7O0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLFlBQU0sSUFBSSxLQUFKLENBQVUsbUJBQW1CLFVBQVUsZUFBZSxJQUFJLElBQTFELENBQU47QUFDRDs7QUFDRCxXQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTixHQUFlLENBQXJCLEdBQXlCLEtBQXpCLEdBQWlDLEtBQUssQ0FBQyxTQUE5QztBQUNELEdBUEksRUFRTCxJQUFJLEtBQUssY0FBVCxHQUEwQixTQUExQixHQUFzQyxTQUFTLENBQUMsSUFBVixDQUFlLFNBUmhELENBQVA7QUFVRDs7QUFFRCxTQUFTLFFBQVQsQ0FBbUIsRUFBbkIsRUFBZ0M7QUFDOUIsTUFBSTtBQUNGLFdBQU8sRUFBRSxFQUFUO0FBQ0QsR0FGRCxDQUVFLE9BQU8sQ0FBUCxFQUFVO0FBQ1YsV0FBTyxDQUFQO0FBQ0Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0B2dWUvZGV2dG9vbHMvLi4vc3JjL3BsdWdpbi50cz8wY2NhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFBsdWdpbiA9IHZvaWQgMDtcbmNvbnN0IGRldnRvb2xzX2FwaV8xID0gcmVxdWlyZShcIkB2dWUvZGV2dG9vbHMtYXBpXCIpO1xuY29uc3Qgc2hhcmVkX3V0aWxzXzEgPSByZXF1aXJlKFwiQHZ1ZS1kZXZ0b29scy9zaGFyZWQtdXRpbHNcIik7XG5jb25zdCBjbG9uZV9kZWVwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNsb25lLWRlZXBcIikpO1xubGV0IGFjdGlvbklkID0gMDtcbmZ1bmN0aW9uIHNldHVwUGx1Z2luKGFwaSwgYXBwLCBWdWUpIHtcbiAgICBjb25zdCBST1VURVJfSU5TUEVDVE9SX0lEID0gJ3Z1ZTItcm91dGVyLWluc3BlY3Rvcic7XG4gICAgY29uc3QgUk9VVEVSX0NIQU5HRVNfTEFZRVJfSUQgPSAndnVlMi1yb3V0ZXItY2hhbmdlcyc7XG4gICAgY29uc3QgVlVFWF9JTlNQRUNUT1JfSUQgPSAndnVlMi12dWV4LWluc3BlY3Rvcic7XG4gICAgY29uc3QgVlVFWF9NVVRBVElPTlNfSUQgPSAndnVlMi12dWV4LW11dGF0aW9ucyc7XG4gICAgY29uc3QgVlVFWF9BQ1RJT05TX0lEID0gJ3Z1ZTItdnVleC1hY3Rpb25zJztcbiAgICAoMCwgZGV2dG9vbHNfYXBpXzEuc2V0dXBEZXZ0b29sc1BsdWdpbikoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGlkOiAnb3JnLnZ1ZWpzLnZ1ZTItaW50ZXJuYWwnLFxuICAgICAgICBsYWJlbDogJ1Z1ZSAyJyxcbiAgICAgICAgaG9tZXBhZ2U6ICdodHRwczovL3Z1ZWpzLm9yZy8nLFxuICAgICAgICBsb2dvOiAnaHR0cHM6Ly92dWVqcy5vcmcvaW1hZ2VzL2ljb25zL2Zhdmljb24tOTZ4OTYucG5nJyxcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGxlZ2FjeUFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0xlZ2FjeSBBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VuYWJsZSB0aGlzIGZvciBWdWV4IDwgMy4xLjAnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LCBhcGkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGhvb2sgPSBzaGFyZWRfdXRpbHNfMS50YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgICAgLy8gVnVlIFJvdXRlclxuICAgICAgICBpZiAoYXBwLiRyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGFwcC4kcm91dGVyO1xuICAgICAgICAgICAgLy8gSW5zcGVjdG9yXG4gICAgICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgICAgICBpZDogUk9VVEVSX0lOU1BFQ1RPUl9JRCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1JvdXRlcycsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2Jvb2snLFxuICAgICAgICAgICAgICAgIHRyZWVGaWx0ZXJQbGFjZWhvbGRlcjogJ1NlYXJjaCByb3V0ZXMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkub24uZ2V0SW5zcGVjdG9yVHJlZShwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gUk9VVEVSX0lOU1BFQ1RPUl9JRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVyLm9wdGlvbnMucm91dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IHJvdXRlci5vcHRpb25zLnJvdXRlcy5tYXAocm91dGUgPT4gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgcm91dGUsICcnLCBwYXlsb2FkLmZpbHRlcikpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1Z1ZSBEZXZ0b29sc10gTm8gcm91dGVzIGZvdW5kIGluIHJvdXRlcmAsIHJvdXRlci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmluc3BlY3RvcklkID09PSBST1VURVJfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gcm91dGVyLm1hdGNoZXIuZ2V0Um91dGVzKCkuZmluZChyID0+IGdldFBhdGhJZChyKSA9PT0gcGF5bG9hZC5ub2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZm9ybWF0Um91dGVEYXRhKHJvdXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lXG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFJPVVRFUl9DSEFOR0VTX0xBWUVSX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnUm91dGVyIE5hdmlnYXRpb25zJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogMHg0MGE4YzQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvdXRlci5hZnRlckVhY2goKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBST1VURVJfQ0hBTkdFU19MQVlFUl9JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdG8ucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclRyZWUoUk9VVEVSX0lOU1BFQ1RPUl9JRCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWdWV4XG4gICAgICAgIGlmIChhcHAuJHN0b3JlKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZSA9IGFwcC4kc3RvcmU7XG4gICAgICAgICAgICBhcGkuYWRkSW5zcGVjdG9yKHtcbiAgICAgICAgICAgICAgICBpZDogVlVFWF9JTlNQRUNUT1JfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdWdWV4JyxcbiAgICAgICAgICAgICAgICBpY29uOiAnc3RvcmFnZScsXG4gICAgICAgICAgICAgICAgdHJlZUZpbHRlclBsYWNlaG9sZGVyOiAnRmlsdGVyIHN0b3Jlcy4uLicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5vbi5nZXRJbnNwZWN0b3JUcmVlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFZVRVhfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5TdG9yZUZvckluc3BlY3RvclRyZWUobm9kZXMsIHN0b3JlLl9tb2R1bGVzLnJvb3QsIHBheWxvYWQuZmlsdGVyLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJvb3ROb2RlcyA9IG5vZGVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5yb290Tm9kZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0U3RvcmVGb3JJbnNwZWN0b3JUcmVlKHN0b3JlLl9tb2R1bGVzLnJvb3QsICdSb290JywgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLm9uLmdldEluc3BlY3RvclN0YXRlKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaW5zcGVjdG9ySWQgPT09IFZVRVhfSU5TUEVDVE9SX0lEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBwYXlsb2FkLm5vZGVJZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gZ2V0U3RvcmVNb2R1bGUoc3RvcmUuX21vZHVsZXMsIG1vZHVsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdGhlIGdldHRlcnMgcHJvcCB0byBpbml0IGdldHRlcnMgY2FjaGUgKHdoaWNoIGlzIGxhenkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5zdGF0ZSA9IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlLCBtb2R1bGVQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaS5vbi5lZGl0SW5zcGVjdG9yU3RhdGUoKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pbnNwZWN0b3JJZCA9PT0gVlVFWF9JTlNQRUNUT1JfSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBwYXlsb2FkLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLm5vZGVJZCAhPT0gVlVFWF9ST09UX1BBVEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGF5bG9hZC5ub2RlSWQuc3Vic3RyaW5nKDAsIHBheWxvYWQubm9kZUlkLmxlbmd0aCAtIDEpLnNwbGl0KCcvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuX2NvbW1pdHRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnNldChzdG9yZS5fdm0uJGRhdGEuJCRzdGF0ZSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLl9jb21taXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVMYXllcih7XG4gICAgICAgICAgICAgICAgaWQ6IFZVRVhfTVVUQVRJT05TX0lELFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVnVleCBNdXRhdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBMSU1FXzUwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lTGF5ZXIoe1xuICAgICAgICAgICAgICAgIGlkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdWdWV4IEFjdGlvbnMnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBMSU1FXzUwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaG9vay5vbigndnVleDptdXRhdGlvbicsIChtdXRhdGlvbiwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBhcGkuc2VuZEluc3BlY3RvclN0YXRlKFZVRVhfSU5TUEVDVE9SX0lEKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gbXV0YXRpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9ICgwLCBjbG9uZV9kZWVwXzEuZGVmYXVsdCkoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJJZDogVlVFWF9NVVRBVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG11dGF0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBsZWdhY3lTaW5nbGVBY3Rpb25TdWIoYWN0aW9uLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBhcGkuYWRkVGltZWxpbmVFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9hID0gc3RvcmUuc3Vic2NyaWJlQWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdG9yZSwgYXBpLmdldFNldHRpbmdzKCkubGVnYWN5QWN0aW9uc1xuICAgICAgICAgICAgICAgID8gbGVnYWN5U2luZ2xlQWN0aW9uU3ViXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZTogKGFjdGlvbiwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLl9pZCA9IGFjdGlvbklkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uX3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLmFkZFRpbWVsaW5lRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVySWQ6IFZVRVhfQUNUSU9OU19JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBhY3Rpb24uX3RpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogYWN0aW9uLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogKGFjdGlvbiwgc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIGFjdGlvbi5fdGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5hZGRUaW1lbGluZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcklkOiBWVUVYX0FDVElPTlNfSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cElkOiBhY3Rpb24uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sIHsgcHJlcGVuZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIEluc3BlY3QgZ2V0dGVycyBvbiBtdXRhdGlvbnNcbiAgICAgICAgICAgIGFwaS5vbi5pbnNwZWN0VGltZWxpbmVFdmVudChwYXlsb2FkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5sYXllcklkID09PSBWVUVYX01VVEFUSU9OU19JRCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXR0ZXJLZXlzID0gT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXR0ZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm0gPSBuZXcgVnVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkc3RhdGU6IHBheWxvYWQuZGF0YS5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBzdG9yZS5fdm0uJG9wdGlvbnMuY29tcHV0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVm0gPSBzdG9yZS5fdm07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5fdm0gPSB2bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShzdG9yZS5nZXR0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuZGF0YS5nZXR0ZXJzID0gKDAsIGNsb25lX2RlZXBfMS5kZWZhdWx0KSh0cmVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLl92bSA9IG9yaWdpbmFsVm07XG4gICAgICAgICAgICAgICAgICAgICAgICB2bS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMuc2V0dXBQbHVnaW4gPSBzZXR1cFBsdWdpbjtcbi8qKlxuICogRXh0cmFjdGVkIGZyb20gdGFpbHdpbmQgcGFsZXR0ZVxuICovXG5jb25zdCBCTFVFXzYwMCA9IDB4MjU2M2ViO1xuY29uc3QgTElNRV81MDAgPSAweDg0Y2MxNjtcbmNvbnN0IENZQU5fNDAwID0gMHgyMmQzZWU7XG5jb25zdCBPUkFOR0VfNDAwID0gMHhmYjkyM2M7XG5jb25zdCBXSElURSA9IDB4ZmZmZmZmO1xuY29uc3QgREFSSyA9IDB4NjY2NjY2O1xuZnVuY3Rpb24gZm9ybWF0Um91dGVOb2RlKHJvdXRlciwgcm91dGUsIHBhcmVudFBhdGgsIGZpbHRlcikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgaWQ6IHBhcmVudFBhdGggKyByb3V0ZS5wYXRoLFxuICAgICAgICBsYWJlbDogcm91dGUucGF0aCxcbiAgICAgICAgY2hpbGRyZW46IChfYSA9IHJvdXRlLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWFwKGNoaWxkID0+IGZvcm1hdFJvdXRlTm9kZShyb3V0ZXIsIGNoaWxkLCByb3V0ZS5wYXRoLCBmaWx0ZXIpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgIH07XG4gICAgaWYgKGZpbHRlciAmJiAhbm9kZS5pZC5pbmNsdWRlcyhmaWx0ZXIpICYmICEoKF9iID0gbm9kZS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmxlbmd0aCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGlmIChyb3V0ZS5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgbm9kZS50YWdzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IFN0cmluZyhyb3V0ZS5uYW1lKSxcbiAgICAgICAgICAgIHRleHRDb2xvcjogMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ1lBTl80MDAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuYWxpYXMgIT0gbnVsbCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ2FsaWFzJyxcbiAgICAgICAgICAgIHRleHRDb2xvcjogMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogT1JBTkdFXzQwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcm91dGVyLmN1cnJlbnRSb3V0ZS5tYXRjaGVkLnJlZHVjZSgocCwgbSkgPT4gcCArIG0ucGF0aCwgJycpO1xuICAgIGlmIChub2RlLmlkID09PSBjdXJyZW50UGF0aCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ2FjdGl2ZScsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBCTFVFXzYwMCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5yZWRpcmVjdCkge1xuICAgICAgICBub2RlLnRhZ3MucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogJ3JlZGlyZWN0OiAnICtcbiAgICAgICAgICAgICAgICAodHlwZW9mIHJvdXRlLnJlZGlyZWN0ID09PSAnc3RyaW5nJyA/IHJvdXRlLnJlZGlyZWN0IDogJ09iamVjdCcpLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogREFSSyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gZm9ybWF0Um91dGVEYXRhKHJvdXRlKSB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGRhdGEucHVzaCh7IGtleTogJ3BhdGgnLCB2YWx1ZTogcm91dGUucGF0aCB9KTtcbiAgICBpZiAocm91dGUucmVkaXJlY3QpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAncmVkaXJlY3QnLCB2YWx1ZTogcm91dGUucmVkaXJlY3QgfSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5hbGlhcykge1xuICAgICAgICBkYXRhLnB1c2goeyBrZXk6ICdhbGlhcycsIHZhbHVlOiByb3V0ZS5hbGlhcyB9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnByb3BzKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IGtleTogJ3Byb3BzJywgdmFsdWU6IHJvdXRlLnByb3BzIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUubmFtZSAmJiByb3V0ZS5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnbmFtZScsIHZhbHVlOiByb3V0ZS5uYW1lIH0pO1xuICAgIH1cbiAgICBpZiAocm91dGUuY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHt9O1xuICAgICAgICAvLyBpZiAocm91dGUuY29tcG9uZW50Ll9fZmlsZSkge1xuICAgICAgICAvLyAgIGNvbXBvbmVudC5maWxlID0gcm91dGUuY29tcG9uZW50Ll9fZmlsZVxuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChyb3V0ZS5jb21wb25lbnQudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50ZW1wbGF0ZSA9IHJvdXRlLmNvbXBvbmVudC50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuY29tcG9uZW50LnByb3BzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQucHJvcHMgPSByb3V0ZS5jb21wb25lbnQucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgc2hhcmVkX3V0aWxzXzEuaXNFbXB0eU9iamVjdCkoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsga2V5OiAnY29tcG9uZW50JywgdmFsdWU6IGNvbXBvbmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdldFBhdGhJZChyb3V0ZU1hdGNoZXIpIHtcbiAgICBsZXQgcGF0aCA9IHJvdXRlTWF0Y2hlci5wYXRoO1xuICAgIGlmIChyb3V0ZU1hdGNoZXIucGFyZW50KSB7XG4gICAgICAgIHBhdGggPSBnZXRQYXRoSWQocm91dGVNYXRjaGVyLnBhcmVudCkgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbmNvbnN0IFRBR19OQU1FU1BBQ0VEID0ge1xuICAgIGxhYmVsOiAnbmFtZXNwYWNlZCcsXG4gICAgdGV4dENvbG9yOiBXSElURSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IERBUkssXG59O1xuY29uc3QgVlVFWF9ST09UX1BBVEggPSAnX192ZHRfcm9vdCc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUiA9ICdbdmR0XSc7XG5jb25zdCBWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcgPSAvXFxbdmR0XFxdL2c7XG5mdW5jdGlvbiBmb3JtYXRTdG9yZUZvckluc3BlY3RvclRyZWUobW9kdWxlLCBtb2R1bGVOYW1lLCBwYXRoKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwYXRoIHx8IFZVRVhfUk9PVF9QQVRILFxuICAgICAgICAvLyBhbGwgbW9kdWxlcyBlbmQgd2l0aCBhIGAvYCwgd2Ugd2FudCB0aGUgbGFzdCBzZWdtZW50IG9ubHlcbiAgICAgICAgLy8gY2FydC8gLT4gY2FydFxuICAgICAgICAvLyBuZXN0ZWQvY2FydC8gLT4gY2FydFxuICAgICAgICBsYWJlbDogbW9kdWxlTmFtZSxcbiAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cygoX2EgPSBtb2R1bGUuX2NoaWxkcmVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSkubWFwKChrZXkpID0+IGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yVHJlZShtb2R1bGUuX2NoaWxkcmVuW2tleV0sIGtleSwgYCR7cGF0aH0ke2tleX0ke1ZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SfWApKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gZmxhdHRlblN0b3JlRm9ySW5zcGVjdG9yVHJlZShyZXN1bHQsIG1vZHVsZSwgZmlsdGVyLCBwYXRoKSB7XG4gICAgaWYgKHBhdGguaW5jbHVkZXMoZmlsdGVyKSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBpZDogcGF0aCB8fCBWVUVYX1JPT1RfUEFUSCxcbiAgICAgICAgICAgIGxhYmVsOiBwYXRoLmVuZHNXaXRoKFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKSA/IHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSA6IHBhdGggfHwgJ1Jvb3QnLFxuICAgICAgICAgICAgdGFnczogbW9kdWxlLm5hbWVzcGFjZWQgPyBbVEFHX05BTUVTUEFDRURdIDogW10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtb2R1bGUuX2NoaWxkcmVuKS5mb3JFYWNoKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgICBmbGF0dGVuU3RvcmVGb3JJbnNwZWN0b3JUcmVlKHJlc3VsdCwgbW9kdWxlLl9jaGlsZHJlblttb2R1bGVOYW1lXSwgZmlsdGVyLCBwYXRoICsgbW9kdWxlTmFtZSArIFZVRVhfTU9EVUxFX1BBVEhfU0VQQVJBVE9SKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICAgIHJldHVybiBwYXRoICYmIHBhdGggIT09IFZVRVhfUk9PVF9QQVRIID8gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuc2xpY2UoLTIsIC0xKVswXSA6ICdSb290Jztcbn1cbmZ1bmN0aW9uIGZvcm1hdFN0b3JlRm9ySW5zcGVjdG9yU3RhdGUobW9kdWxlLCBnZXR0ZXJzLCBwYXRoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBzdG9yZVN0YXRlID0ge1xuICAgICAgICBzdGF0ZTogT2JqZWN0LmtleXMoKF9hID0gbW9kdWxlLmNvbnRleHQuc3RhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG1vZHVsZS5jb250ZXh0LnN0YXRlW2tleV0sXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IHBhdGhXaXRoU2xhc2hlcyA9IHBhdGgucmVwbGFjZShWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUl9SRUcsICcvJyk7XG4gICAgZ2V0dGVycyA9ICFtb2R1bGUubmFtZXNwYWNlZCB8fCBwYXRoID09PSBWVUVYX1JPT1RfUEFUSCA/IG1vZHVsZS5jb250ZXh0LmdldHRlcnMgOiBnZXR0ZXJzW3BhdGhXaXRoU2xhc2hlc107XG4gICAgbGV0IGdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoZ2V0dGVycyk7XG4gICAgY29uc3Qgc2hvdWxkUGlja0dldHRlcnMgPSAhbW9kdWxlLm5hbWVzcGFjZWQgJiYgcGF0aCAhPT0gVlVFWF9ST09UX1BBVEg7XG4gICAgaWYgKHNob3VsZFBpY2tHZXR0ZXJzKSB7XG4gICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgY29uc3QgZGVmaW5lZEdldHRlcnNLZXlzID0gT2JqZWN0LmtleXMoKF9iID0gbW9kdWxlLl9yYXdNb2R1bGUuZ2V0dGVycykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge30pO1xuICAgICAgICBnZXR0ZXJzS2V5cyA9IGdldHRlcnNLZXlzLmZpbHRlcihrZXkgPT4gZGVmaW5lZEdldHRlcnNLZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgIH1cbiAgICBpZiAoZ2V0dGVyc0tleXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBtb2R1bGVHZXR0ZXJzO1xuICAgICAgICBpZiAoc2hvdWxkUGlja0dldHRlcnMpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcGljayB0aGUgZ2V0dGVycyBkZWZpbmVkIGluIHRoZSBub24tbmFtZXNwYWNlZCBtb2R1bGVcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGdldHRlcnNLZXlzKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlR2V0dGVyc1trZXldID0gY2FuVGhyb3coKCkgPT4gZ2V0dGVyc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZUdldHRlcnMgPSBnZXR0ZXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShtb2R1bGVHZXR0ZXJzKTtcbiAgICAgICAgc3RvcmVTdGF0ZS5nZXR0ZXJzID0gT2JqZWN0LmtleXModHJlZSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleS5lbmRzV2l0aCgnLycpID8gZXh0cmFjdE5hbWVGcm9tUGF0aChrZXkpIDoga2V5LFxuICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGNhblRocm93KCgpID0+IHRyZWVba2V5XSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlU3RhdGU7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoc1RvT2JqZWN0VHJlZShnZXR0ZXJzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0ga2V5LnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBsZWFmS2V5ID0gcGF0aC5wb3AoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3BdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2N1c3RvbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNb2R1bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BdLl9jdXN0b20udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRbbGVhZktleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjYW5UaHJvdygoKSA9PiBnZXR0ZXJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0b3JlTW9kdWxlKG1vZHVsZU1hcCwgcGF0aCkge1xuICAgIGNvbnN0IG5hbWVzID0gcGF0aC5zcGxpdChWVUVYX01PRFVMRV9QQVRIX1NFUEFSQVRPUikuZmlsdGVyKChuKSA9PiBuKTtcbiAgICByZXR1cm4gbmFtZXMucmVkdWNlKChtb2R1bGUsIG1vZHVsZU5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBtb2R1bGVbbW9kdWxlTmFtZSA9PT0gVlVFWF9ST09UX1BBVEggPyAncm9vdCcgOiBtb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiBmb3IgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSA9PT0gbmFtZXMubGVuZ3RoIC0gMSA/IGNoaWxkIDogY2hpbGQuX2NoaWxkcmVuO1xuICAgIH0sIHBhdGggPT09IFZVRVhfUk9PVF9QQVRIID8gbW9kdWxlTWFwIDogbW9kdWxlTWFwLnJvb3QuX2NoaWxkcmVuKTtcbn1cbmZ1bmN0aW9uIGNhblRocm93KGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWdpbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7725\n");
|
|
318
|
+
eval("\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.setupPlugin = void 0;\n\nconst devtools_api_1 = __webpack_require__(72039);\n\nconst shared_utils_1 = __webpack_require__(27146);\n\nconst clone_deep_1 = __importDefault(__webpack_require__(96206));\n\nlet actionId = 0;\n\nfunction setupPlugin(api, app, Vue) {\n const ROUTER_INSPECTOR_ID = 'vue2-router-inspector';\n const ROUTER_CHANGES_LAYER_ID = 'vue2-router-changes';\n const VUEX_INSPECTOR_ID = 'vue2-vuex-inspector';\n const VUEX_MUTATIONS_ID = 'vue2-vuex-mutations';\n const VUEX_ACTIONS_ID = 'vue2-vuex-actions';\n (0, devtools_api_1.setupDevtoolsPlugin)({\n app,\n id: 'org.vuejs.vue2-internal',\n label: 'Vue 2',\n homepage: 'https://vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n settings: {\n legacyActions: {\n label: 'Legacy Actions',\n description: 'Enable this for Vuex < 3.1.0',\n type: 'boolean',\n defaultValue: false\n }\n }\n }, api => {\n var _a;\n\n const hook = shared_utils_1.target.__VUE_DEVTOOLS_GLOBAL_HOOK__; // Vue Router\n\n if (app.$router) {\n const router = app.$router; // Inspector\n\n api.addInspector({\n id: ROUTER_INSPECTOR_ID,\n label: 'Routes',\n icon: 'book',\n treeFilterPlaceholder: 'Search routes'\n });\n api.on.getInspectorTree(payload => {\n if (payload.inspectorId === ROUTER_INSPECTOR_ID) {\n 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");
|
|
319
319
|
|
|
320
320
|
/***/ }),
|
|
321
321
|
|