From 2ed19c2a71d9326ffbe74a7c79a6f279423eb7ca Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 15:04:58 +0800 Subject: [PATCH 01/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20admin?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/LICENSE | 21 + dashboard/README.md | 78 + dashboard/auto-imports.d.ts | 5 + dashboard/components.d.ts | 51 + dashboard/index.html | 125 + dashboard/package-lock.json | 2708 +++++++++++++++++ dashboard/package.json | 37 + dashboard/pnpm-lock.yaml | 1867 ++++++++++++ dashboard/public/favicon.ico | Bin 0 -> 321 bytes dashboard/resources/1.jpg | Bin 0 -> 178483 bytes dashboard/resources/10.jpg | Bin 0 -> 102538 bytes dashboard/resources/11.jpg | Bin 0 -> 101903 bytes dashboard/resources/12.jpg | Bin 0 -> 102149 bytes dashboard/resources/13.jpg | Bin 0 -> 121331 bytes dashboard/resources/14.jpg | Bin 0 -> 150040 bytes dashboard/resources/2.jpg | Bin 0 -> 180485 bytes dashboard/resources/3.jpg | Bin 0 -> 155088 bytes dashboard/resources/4.jpg | Bin 0 -> 117862 bytes dashboard/resources/5.jpg | Bin 0 -> 159810 bytes dashboard/resources/6.jpg | Bin 0 -> 199630 bytes dashboard/resources/7.jpg | Bin 0 -> 185802 bytes dashboard/resources/8.jpg | Bin 0 -> 108528 bytes dashboard/resources/9.jpg | Bin 0 -> 104588 bytes dashboard/src/App.vue | 16 + dashboard/src/api/http.ts | 82 + dashboard/src/api/module/api.ts | 25 + dashboard/src/api/module/user.ts | 13 + dashboard/src/assets/login/a.svg | 10 + dashboard/src/assets/login/f.svg | 10 + dashboard/src/assets/login/q.svg | 53 + dashboard/src/assets/login/w.svg | 11 + dashboard/src/assets/logo.png | Bin 0 -> 9457 bytes dashboard/src/directives/permission.ts | 25 + dashboard/src/layouts/BaseLayout.vue | 322 ++ dashboard/src/layouts/BlankLayout.vue | 3 + .../src/layouts/Global/GlobalBreadcrumb.vue | 25 + dashboard/src/layouts/Global/GlobalColor.vue | 48 + .../src/layouts/Global/GlobalContent.vue | 34 + dashboard/src/layouts/Global/GlobalHeader.vue | 13 + .../src/layouts/Global/GlobalMainMenu.vue | 67 + .../src/layouts/Global/GlobalMainMenuItem.vue | 23 + dashboard/src/layouts/Global/GlobalMenu.vue | 74 + .../src/layouts/Global/GlobalMenuItem.vue | 34 + dashboard/src/layouts/Global/GlobalSetup.vue | 102 + .../src/layouts/Global/GlobalSetupItem.vue | 41 + .../src/layouts/Global/GlobalSetupTheme.vue | 107 + dashboard/src/layouts/Global/GlobalTab.vue | 107 + dashboard/src/layouts/NoSideLayout.vue | 124 + dashboard/src/layouts/composable/useMenu.ts | 129 + dashboard/src/layouts/composable/useTab.ts | 86 + dashboard/src/library/arrayUtil.ts | 14 + dashboard/src/library/treeUtil.ts | 70 + dashboard/src/main.ts | 15 + dashboard/src/mockjs/index.ts | 25 + dashboard/src/mockjs/user.ts | 139 + dashboard/src/router/index.ts | 42 + dashboard/src/router/module/base-routes.ts | 57 + dashboard/src/shims-vue.d.ts | 5 + dashboard/src/store/app.ts | 35 + dashboard/src/store/index.ts | 7 + dashboard/src/store/user.ts | 32 + dashboard/src/styles/admin.css | 136 + dashboard/src/styles/display.css | 70 + dashboard/src/styles/index.css | 8 + dashboard/src/styles/mobile.css | 3 + dashboard/src/styles/reset.css | 8 + dashboard/src/types/metricInfo.ts | 5 + dashboard/src/types/result.ts | 14 + dashboard/src/types/user.ts | 15 + dashboard/src/views/EngineManager/index.vue | 7 + dashboard/src/views/Engines/engine-list.vue | 85 + dashboard/src/views/Login/index.vue | 255 ++ .../views/ReportManager/report-metrics.vue | 0 .../src/views/ReportManager/report-trace.vue | 0 dashboard/tsconfig.json | 15 + dashboard/vite.config.ts | 44 + pom.xml | 1 + smart-flow-admin/pom.xml | 40 + .../smart/flow/admin/StartApplication.java | 17 + .../admin/controller/EnginesController.java | 54 + .../controller/SmartFlowConfiguration.java | 31 + .../src/main/resources/application.properties | 1 + 82 files changed, 7726 insertions(+) create mode 100644 dashboard/LICENSE create mode 100644 dashboard/README.md create mode 100644 dashboard/auto-imports.d.ts create mode 100644 dashboard/components.d.ts create mode 100644 dashboard/index.html create mode 100644 dashboard/package-lock.json create mode 100644 dashboard/package.json create mode 100644 dashboard/pnpm-lock.yaml create mode 100644 dashboard/public/favicon.ico create mode 100644 dashboard/resources/1.jpg create mode 100644 dashboard/resources/10.jpg create mode 100644 dashboard/resources/11.jpg create mode 100644 dashboard/resources/12.jpg create mode 100644 dashboard/resources/13.jpg create mode 100644 dashboard/resources/14.jpg create mode 100644 dashboard/resources/2.jpg create mode 100644 dashboard/resources/3.jpg create mode 100644 dashboard/resources/4.jpg create mode 100644 dashboard/resources/5.jpg create mode 100644 dashboard/resources/6.jpg create mode 100644 dashboard/resources/7.jpg create mode 100644 dashboard/resources/8.jpg create mode 100644 dashboard/resources/9.jpg create mode 100644 dashboard/src/App.vue create mode 100644 dashboard/src/api/http.ts create mode 100644 dashboard/src/api/module/api.ts create mode 100644 dashboard/src/api/module/user.ts create mode 100644 dashboard/src/assets/login/a.svg create mode 100644 dashboard/src/assets/login/f.svg create mode 100644 dashboard/src/assets/login/q.svg create mode 100644 dashboard/src/assets/login/w.svg create mode 100644 dashboard/src/assets/logo.png create mode 100644 dashboard/src/directives/permission.ts create mode 100644 dashboard/src/layouts/BaseLayout.vue create mode 100644 dashboard/src/layouts/BlankLayout.vue create mode 100644 dashboard/src/layouts/Global/GlobalBreadcrumb.vue create mode 100644 dashboard/src/layouts/Global/GlobalColor.vue create mode 100644 dashboard/src/layouts/Global/GlobalContent.vue create mode 100644 dashboard/src/layouts/Global/GlobalHeader.vue create mode 100644 dashboard/src/layouts/Global/GlobalMainMenu.vue create mode 100644 dashboard/src/layouts/Global/GlobalMainMenuItem.vue create mode 100644 dashboard/src/layouts/Global/GlobalMenu.vue create mode 100644 dashboard/src/layouts/Global/GlobalMenuItem.vue create mode 100644 dashboard/src/layouts/Global/GlobalSetup.vue create mode 100644 dashboard/src/layouts/Global/GlobalSetupItem.vue create mode 100644 dashboard/src/layouts/Global/GlobalSetupTheme.vue create mode 100644 dashboard/src/layouts/Global/GlobalTab.vue create mode 100644 dashboard/src/layouts/NoSideLayout.vue create mode 100644 dashboard/src/layouts/composable/useMenu.ts create mode 100644 dashboard/src/layouts/composable/useTab.ts create mode 100644 dashboard/src/library/arrayUtil.ts create mode 100644 dashboard/src/library/treeUtil.ts create mode 100644 dashboard/src/main.ts create mode 100644 dashboard/src/mockjs/index.ts create mode 100644 dashboard/src/mockjs/user.ts create mode 100644 dashboard/src/router/index.ts create mode 100644 dashboard/src/router/module/base-routes.ts create mode 100644 dashboard/src/shims-vue.d.ts create mode 100644 dashboard/src/store/app.ts create mode 100644 dashboard/src/store/index.ts create mode 100644 dashboard/src/store/user.ts create mode 100644 dashboard/src/styles/admin.css create mode 100644 dashboard/src/styles/display.css create mode 100644 dashboard/src/styles/index.css create mode 100644 dashboard/src/styles/mobile.css create mode 100644 dashboard/src/styles/reset.css create mode 100644 dashboard/src/types/metricInfo.ts create mode 100644 dashboard/src/types/result.ts create mode 100644 dashboard/src/types/user.ts create mode 100644 dashboard/src/views/EngineManager/index.vue create mode 100644 dashboard/src/views/Engines/engine-list.vue create mode 100644 dashboard/src/views/Login/index.vue create mode 100644 dashboard/src/views/ReportManager/report-metrics.vue create mode 100644 dashboard/src/views/ReportManager/report-trace.vue create mode 100644 dashboard/tsconfig.json create mode 100644 dashboard/vite.config.ts create mode 100644 smart-flow-admin/pom.xml create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java create mode 100644 smart-flow-admin/src/main/resources/application.properties diff --git a/dashboard/LICENSE b/dashboard/LICENSE new file mode 100644 index 0000000..73dbfb8 --- /dev/null +++ b/dashboard/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 就眠儀式 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/dashboard/README.md b/dashboard/README.md new file mode 100644 index 0000000..0f724b1 --- /dev/null +++ b/dashboard/README.md @@ -0,0 +1,78 @@ +
+
+ +

+ Layui Vue Admin +

+ +

+ 开 箱 即 用 的 layui vue 企 业 级 前 端 模 板 +

+ + [官 网](http://www.layui-vue.com/) | [预 览](http://admin.layui-vue.com/) + +
+ +

+ + Pear Admin Pro Version + + + Vue Version + + + Ant Design Vue Version + + + Node Version + +

+ +
+ +
+ + +### 🌈 项目概述 + +* 基于 Layui Vue 实现的通用前端模板。整合最新技术高效快速开发,前后端分离模式,开箱即用。 +* 核心模块包括:登录、工作空间、表单页面、列表页面、结果页面、异常页面 等功能。 +* 代码量少、学习简单、功能强大、轻量级、易扩展,轻松开发从现在开始! + +### 开始使用 + +``` + +切换环境 + +nvm install 16.0.0 + +nvm use 16.0.0 + +安装依赖 + +npm install -g pnpm + +pnpm install + +启动项目 + +npm run dev + +打包项目 + +npm run build + +``` + +## 预览截图 + +| 预览 | 界面 | +|-----------------------|-----------------------| +| ![](resources/1.jpg) | ![](resources/2.jpg) | +| ![](resources/3.jpg) | ![](resources/4.jpg) | +| ![](resources/5.jpg) | ![](resources/6.jpg) | +| ![](resources/7.jpg) | ![](resources/8.jpg) | +| ![](resources/9.jpg) | ![](resources/10.jpg) | +| ![](resources/11.jpg) | ![](resources/12.jpg) | +| ![](resources/13.jpg) | ![](resources/14.jpg) | \ No newline at end of file diff --git a/dashboard/auto-imports.d.ts b/dashboard/auto-imports.d.ts new file mode 100644 index 0000000..08908ed --- /dev/null +++ b/dashboard/auto-imports.d.ts @@ -0,0 +1,5 @@ +// Generated by 'unplugin-auto-import' +export {} +declare global { + +} diff --git a/dashboard/components.d.ts b/dashboard/components.d.ts new file mode 100644 index 0000000..f7e9d75 --- /dev/null +++ b/dashboard/components.d.ts @@ -0,0 +1,51 @@ +// generated by unplugin-vue-components +// We suggest you to commit this file into source control +// Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + +export {} + +declare module '@vue/runtime-core' { + export interface GlobalComponents { + LayBadge: typeof import('@layui/layui-vue')['LayBadge'] + LayBody: typeof import('@layui/layui-vue')['LayBody'] + LayBreadcrumb: typeof import('@layui/layui-vue')['LayBreadcrumb'] + LayBreadcrumbItem: typeof import('@layui/layui-vue')['LayBreadcrumbItem'] + LayButton: typeof import('@layui/layui-vue')['LayButton'] + LayCard: typeof import('@layui/layui-vue')['LayCard'] + LayCheckbox: typeof import('@layui/layui-vue')['LayCheckbox'] + LayCol: typeof import('@layui/layui-vue')['LayCol'] + LayConfigProvider: typeof import('@layui/layui-vue')['LayConfigProvider'] + LayContainer: typeof import('@layui/layui-vue')['LayContainer'] + LayCountUp: typeof import('@layui/layui-vue')['LayCountUp'] + LayDropdown: typeof import('@layui/layui-vue')['LayDropdown'] + LayDropdownMenu: typeof import('@layui/layui-vue')['LayDropdownMenu'] + LayDropdownMenuItem: typeof import('@layui/layui-vue')['LayDropdownMenuItem'] + LayField: typeof import('@layui/layui-vue')['LayField'] + LayFooter: typeof import('@layui/layui-vue')['LayFooter'] + LayFormItem: typeof import('@layui/layui-vue')['LayFormItem'] + LayFullscreen: typeof import('@layui/layui-vue')['LayFullscreen'] + LayHeader: typeof import('@layui/layui-vue')['LayHeader'] + LayIcon: typeof import('@layui/icons-vue')['LayIcon'] + LayInput: typeof import('@layui/layui-vue')['LayInput'] + LayLayer: typeof import('@layui/layer-vue')['LayLayer'] + LayLayout: typeof import('@layui/layui-vue')['LayLayout'] + LayLine: typeof import('@layui/layui-vue')['LayLine'] + LayLogo: typeof import('@layui/layui-vue')['LayLogo'] + LayMenu: typeof import('@layui/layui-vue')['LayMenu'] + LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem'] + LayProgress: typeof import('@layui/layui-vue')['LayProgress'] + LayRow: typeof import('@layui/layui-vue')['LayRow'] + LayScroll: typeof import('@layui/layui-vue')['LayScroll'] + LaySide: typeof import('@layui/layui-vue')['LaySide'] + LaySpace: typeof import('@layui/layui-vue')['LaySpace'] + LaySubMenu: typeof import('@layui/layui-vue')['LaySubMenu'] + LaySwitch: typeof import('@layui/layui-vue')['LaySwitch'] + LayTab: typeof import('@layui/layui-vue')['LayTab'] + LayTabItem: typeof import('@layui/layui-vue')['LayTabItem'] + LayTable: typeof import('@layui/layui-vue')['LayTable'] + LayTransition: typeof import('@layui/layui-vue')['LayTransition'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} diff --git a/dashboard/index.html b/dashboard/index.html new file mode 100644 index 0000000..280fe46 --- /dev/null +++ b/dashboard/index.html @@ -0,0 +1,125 @@ + + + + + + + smart-flow 管理后台 + + + +
+
+
+
+
+ + + diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json new file mode 100644 index 0000000..39f6aee --- /dev/null +++ b/dashboard/package-lock.json @@ -0,0 +1,2708 @@ +{ + "name": "layui-vue-admin", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@antfu/utils": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.6.2.tgz", + "integrity": "sha512-Qdwda+qE1KOKXuM8Gnn09zIJSA293J5putdHBx4J9sdbHzqp5QY4OmH77KgwJoi0PuY+kbddkVVdkSoZ9ruiug==", + "dev": true + }, + "@antv/adjust": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/@antv/adjust/-/adjust-0.2.5.tgz", + "integrity": "sha512-MfWZOkD9CqXRES6MBGRNe27Q577a72EIwyMnE29wIlPliFvJfWwsrONddpGU7lilMpVKecS3WAzOoip3RfPTRQ==", + "requires": { + "@antv/util": "~2.0.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@antv/attr": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@antv/attr/-/attr-0.3.3.tgz", + "integrity": "sha512-7iSSRhYzZ7pYXZKTL1ECGhTdKVHPQx1Vj7yYVTAiyLMsWsLUAoMf0m6dT6msTs0SdrXHRbjzXavVXxRj/wZZJA==", + "requires": { + "@antv/color-util": "^2.0.1", + "@antv/util": "~2.0.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@antv/color-util": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@antv/color-util/-/color-util-2.0.6.tgz", + "integrity": "sha512-KnPEaAH+XNJMjax9U35W67nzPI+QQ2x27pYlzmSIWrbj4/k8PGrARXfzDTjwoozHJY8qG62Z+Ww6Alhu2FctXQ==", + "requires": { + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "@antv/component": { + "version": "0.8.28", + "resolved": "https://registry.npmmirror.com/@antv/component/-/component-0.8.28.tgz", + "integrity": "sha512-SlmTBl9mWFnUQclylKhTlCnB0bkLI3yH5TlC37hdSIq1sFqG4RD5CmVFcFx5lb6itKe4ZtPl4oboVxjtatkwvw==", + "requires": { + "@antv/color-util": "^2.0.3", + "@antv/dom-util": "~2.0.1", + "@antv/g-base": "^0.5.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.7", + "@antv/scale": "~0.3.1", + "@antv/util": "~2.0.0", + "fecha": "~4.2.0", + "tslib": "^2.0.3" + } + }, + "@antv/coord": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@antv/coord/-/coord-0.3.1.tgz", + "integrity": "sha512-rFE94C8Xzbx4xmZnHh2AnlB3Qm1n5x0VT3OROy257IH6Rm4cuzv1+tZaUBATviwZd99S+rOY9telw/+6C9GbRw==", + "requires": { + "@antv/matrix-util": "^3.1.0-beta.2", + "@antv/util": "~2.0.12", + "tslib": "^2.1.0" + } + }, + "@antv/dom-util": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@antv/dom-util/-/dom-util-2.0.4.tgz", + "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "requires": { + "tslib": "^2.0.3" + } + }, + "@antv/event-emitter": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz", + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + }, + "@antv/g-base": { + "version": "0.5.12", + "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.12.tgz", + "integrity": "sha512-KDM3K1rDnemvTAoPYsRYue+ZX7bR4D0TvOQ5Ib6osGtSpZcstwhA0CuQGI0wNXb/ax7h6/KyzNPVFqESrtWbqw==", + "requires": { + "@antv/event-emitter": "^0.1.1", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.13", + "@types/d3-timer": "^2.0.0", + "d3-ease": "^1.0.5", + "d3-interpolate": "^3.0.1", + "d3-timer": "^1.0.9", + "detect-browser": "^5.1.0", + "tslib": "^2.0.3" + } + }, + "@antv/g-canvas": { + "version": "0.5.13", + "resolved": "https://registry.npmmirror.com/@antv/g-canvas/-/g-canvas-0.5.13.tgz", + "integrity": "sha512-nu6wNeZhYomkEks2aniWlYML0ZGb9t5PGzjiOIp+B4z4HUEUvHOTdIPNfinzl5+4QC7fVZntsQKZK5dBFO5MDQ==", + "requires": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0", + "tslib": "^2.0.3" + } + }, + "@antv/g-math": { + "version": "0.1.9", + "resolved": "https://registry.npmmirror.com/@antv/g-math/-/g-math-0.1.9.tgz", + "integrity": "sha512-KHMSfPfZ5XHM1PZnG42Q2gxXfOitYveNTA7L61lR6mhZ8Y/aExsYmHqaKBsSarU0z+6WLrl9C07PQJZaw0uljQ==", + "requires": { + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0" + } + }, + "@antv/g-svg": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@antv/g-svg/-/g-svg-0.5.7.tgz", + "integrity": "sha512-jUbWoPgr4YNsOat2Y/rGAouNQYGpw4R0cvlN0YafwOyacFFYy2zC8RslNd6KkPhhR3XHNSqJOuCYZj/YmLUwYw==", + "requires": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/util": "~2.0.0", + "detect-browser": "^5.0.0", + "tslib": "^2.0.3" + } + }, + "@antv/g2": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/@antv/g2/-/g2-4.2.8.tgz", + "integrity": "sha512-V2ntdehdCTCjSdkDxC1/kafii/2MZ2dhLd/auMoE6viwIvyy5CKkd7qa9krxJ4IIR5RH9v5uoRV8q2Bzd0OD2Q==", + "requires": { + "@antv/adjust": "^0.2.1", + "@antv/attr": "^0.3.1", + "@antv/color-util": "^2.0.2", + "@antv/component": "^0.8.27", + "@antv/coord": "^0.3.0", + "@antv/dom-util": "^2.0.2", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "~0.5.6", + "@antv/g-canvas": "~0.5.10", + "@antv/g-svg": "~0.5.6", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.15", + "@antv/scale": "^0.3.14", + "@antv/util": "~2.0.5", + "tslib": "^2.0.0" + } + }, + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "@antv/path-util": { + "version": "2.0.15", + "resolved": "https://registry.npmmirror.com/@antv/path-util/-/path-util-2.0.15.tgz", + "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", + "requires": { + "@antv/matrix-util": "^3.0.4", + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.0.4.tgz", + "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.3.0", + "tslib": "^2.0.3" + } + } + } + }, + "@antv/scale": { + "version": "0.3.18", + "resolved": "https://registry.npmmirror.com/@antv/scale/-/scale-0.3.18.tgz", + "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "requires": { + "@antv/util": "~2.0.3", + "fecha": "~4.2.0", + "tslib": "^2.0.0" + } + }, + "@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "requires": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + }, + "dependencies": { + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/parser": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" + }, + "@babel/types": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", + "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@ctrl/tinycolor": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==" + }, + "@emmetio/abbreviation": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz", + "integrity": "sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==", + "dev": true, + "requires": { + "@emmetio/scanner": "^1.0.0" + } + }, + "@emmetio/css-abbreviation": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz", + "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==", + "dev": true, + "requires": { + "@emmetio/scanner": "^1.0.0" + } + }, + "@emmetio/scanner": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz", + "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "dev": true, + "optional": true + }, + "@intlify/core-base": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.1.10.tgz", + "integrity": "sha512-So9CNUavB/IsZ+zBmk2Cv6McQp6vc2wbGi1S0XQmJ8Vz+UFcNn9MFXAe9gY67PreIHrbLsLxDD0cwo1qsxM1Nw==", + "requires": { + "@intlify/devtools-if": "9.1.10", + "@intlify/message-compiler": "9.1.10", + "@intlify/message-resolver": "9.1.10", + "@intlify/runtime": "9.1.10", + "@intlify/shared": "9.1.10", + "@intlify/vue-devtools": "9.1.10" + } + }, + "@intlify/devtools-if": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.1.10.tgz", + "integrity": "sha512-SHaKoYu6sog3+Q8js1y3oXLywuogbH1sKuc7NSYkN3GElvXSBaMoCzW+we0ZSFqj/6c7vTNLg9nQ6rxhKqYwnQ==", + "requires": { + "@intlify/shared": "9.1.10" + } + }, + "@intlify/message-compiler": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.1.10.tgz", + "integrity": "sha512-+JiJpXff/XTb0EadYwdxOyRTB0hXNd4n1HaJ/a4yuV960uRmPXaklJsedW0LNdcptd/hYUZtCkI7Lc9J5C1gxg==", + "requires": { + "@intlify/message-resolver": "9.1.10", + "@intlify/shared": "9.1.10", + "source-map": "0.6.1" + } + }, + "@intlify/message-resolver": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/message-resolver/-/message-resolver-9.1.10.tgz", + "integrity": "sha512-5YixMG/M05m0cn9+gOzd4EZQTFRUu8RGhzxJbR1DWN21x/Z3bJ8QpDYj6hC4FwBj5uKsRfKpJQ3Xqg98KWoA+w==" + }, + "@intlify/runtime": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/runtime/-/runtime-9.1.10.tgz", + "integrity": "sha512-7QsuByNzpe3Gfmhwq6hzgXcMPpxz8Zxb/XFI6s9lQdPLPe5Lgw4U1ovRPZTOs6Y2hwitR3j/HD8BJNGWpJnOFA==", + "requires": { + "@intlify/message-compiler": "9.1.10", + "@intlify/message-resolver": "9.1.10", + "@intlify/shared": "9.1.10" + } + }, + "@intlify/shared": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.1.10.tgz", + "integrity": "sha512-Om54xJeo1Vw+K1+wHYyXngE8cAbrxZHpWjYzMR9wCkqbhGtRV5VLhVc214Ze2YatPrWlS2WSMOWXR8JktX/IgA==" + }, + "@intlify/vue-devtools": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.1.10.tgz", + "integrity": "sha512-5l3qYARVbkWAkagLu1XbDUWRJSL8br1Dj60wgMaKB0+HswVsrR6LloYZTg7ozyvM621V6+zsmwzbQxbVQyrytQ==", + "requires": { + "@intlify/message-resolver": "9.1.10", + "@intlify/runtime": "9.1.10", + "@intlify/shared": "9.1.10" + } + }, + "@layui/icons-vue": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@layui/icons-vue/-/icons-vue-1.0.9.tgz", + "integrity": "sha512-GZ69m1/rG1Rb+VSVYFqLzy4Hzx1unOOvOCMfk3VAZ8bulHdi/Qab7woTwUdMTyQW+ghi9iqlpq30tly9qIUrzQ==" + }, + "@layui/layer-vue": { + "version": "1.4.7", + "resolved": "https://registry.npmmirror.com/@layui/layer-vue/-/layer-vue-1.4.7.tgz", + "integrity": "sha512-AIKvtcDr1PE6VSvf/+pnu2M12AFrzOL5kYOTDmiaPja4YKIacE9GTKg1RGp2tj8uo3e1ugVVELC31z1gLqaSZQ==" + }, + "@layui/layui-vue": { + "version": "1.8.4", + "resolved": "https://registry.npmmirror.com/@layui/layui-vue/-/layui-vue-1.8.4.tgz", + "integrity": "sha512-FEKxwh4JmkxkIPqQvAUn1JNmgUN2a+VucDpBmJYvql4bTViTie9jTvsVrpUSvBzltcaPj5Y28xrN4BRSKZewzw==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@layui/icons-vue": "^1.0.9", + "@layui/layer-vue": "^1.4.7", + "@types/qrcode": "1.5.0", + "@umijs/ssr-darkreader": "^4.9.45", + "@vueuse/core": "^9.2.0", + "async-validator": "^4.1.1", + "cropperjs": "^1.5.12", + "dayjs": "^1.11.0", + "evtd": "^0.2.3", + "jsbarcode": "3.11.5", + "qrcode": "1.5.0", + "vue-i18n": "^9.1.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/d3-timer": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-2.0.1.tgz", + "integrity": "sha512-TF8aoF5cHcLO7W7403blM7L1T+6NF3XMyN3fxyUolq2uOcFeicG/khQg/dGxiCJWoAcmYulYN7LYSRKO54IXaA==" + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "@types/node": { + "version": "18.7.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz", + "integrity": "sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==" + }, + "@types/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==", + "dev": true + }, + "@types/qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==", + "requires": { + "@types/node": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@umijs/ssr-darkreader": { + "version": "4.9.45", + "resolved": "https://registry.npmjs.org/@umijs/ssr-darkreader/-/ssr-darkreader-4.9.45.tgz", + "integrity": "sha512-XlcwzSYQ/SRZpHdwIyMDS4FOGX5kP4U/2g2mykyn/iPQTK4xTiQAyBu6UnnDnn7d5P8s7Atzh1C7H0ETNOypJg==" + }, + "@vitejs/plugin-vue": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", + "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", + "dev": true + }, + "@volar/code-gen": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz", + "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==", + "dev": true, + "requires": { + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8" + } + }, + "@volar/html2pug": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz", + "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0", + "domhandler": "^4.2.2", + "htmlparser2": "^7.1.2", + "pug": "^3.0.2" + } + }, + "@volar/shared": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz", + "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==", + "dev": true, + "requires": { + "upath": "^2.0.1", + "vscode-jsonrpc": "^8.0.0-next.2", + "vscode-uri": "^3.0.2" + } + }, + "@volar/source-map": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz", + "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==", + "dev": true, + "requires": { + "@volar/shared": "0.29.8" + } + }, + "@volar/transforms": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz", + "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==", + "dev": true, + "requires": { + "@volar/shared": "0.29.8", + "vscode-languageserver": "^8.0.0-next.2" + } + }, + "@volar/vue-code-gen": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz", + "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==", + "dev": true, + "requires": { + "@volar/code-gen": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@vue/compiler-core": "^3.2.21", + "@vue/compiler-dom": "^3.2.21", + "@vue/shared": "^3.2.21", + "upath": "^2.0.1" + } + }, + "@vscode/emmet-helper": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz", + "integrity": "sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==", + "dev": true, + "requires": { + "emmet": "^2.3.0", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-nls": "^5.0.0", + "vscode-uri": "^2.1.2" + }, + "dependencies": { + "vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true + } + } + }, + "@vue/compiler-core": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz", + "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", + "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", + "requires": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", + "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", + "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" + }, + "@vue/reactivity": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz", + "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==", + "requires": { + "@vue/shared": "3.2.45" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", + "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz", + "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==", + "requires": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/runtime-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz", + "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==", + "requires": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz", + "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==", + "requires": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/shared": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz", + "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==" + }, + "@vueuse/core": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.4.0.tgz", + "integrity": "sha512-JzgenGj1ZF2BHOen5rsFiAyyI9sXAv7aKhNLlm9b7SwYQeKTcxTWdhudonURCSP3Egl9NQaRBzes2lv/1JUt/Q==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.4.0", + "@vueuse/shared": "9.4.0", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + } + } + }, + "@vueuse/metadata": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.4.0.tgz", + "integrity": "sha512-7GKMdGAsJyQJl35MYOz/RDpP0FxuiZBRDSN79QIPbdqYx4Sd0sVTnIC68KJ6Oln0t0SouvSUMvRHuno216Ud2Q==" + }, + "@vueuse/shared": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.4.0.tgz", + "integrity": "sha512-fTuem51KwMCnqUKkI8B57qAIMcFovtGgsCtAeqxIzH3i6nE9VYge+gVfneNHAAy7lj8twbkNfqQSygOPJTm4tQ==", + "requires": { + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + } + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz", + "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A= sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "requires": { + "is-regex": "^1.0.3" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==" + }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "cropperjs": { + "version": "1.5.12", + "resolved": "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.12.tgz", + "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==" + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "dayjs": { + "version": "1.11.3", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, + "dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "echarts": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz", + "integrity": "sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.1" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "emmet": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.6.tgz", + "integrity": "sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==", + "dev": true, + "requires": { + "@emmetio/abbreviation": "^2.2.3", + "@emmetio/css-abbreviation": "^2.1.4" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "evtd": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.3.tgz", + "integrity": "sha512-tmiT1YUVqFjTY+BSBOAskL83xNx41iUfpvKP6Gcd/xMHjg3mnER98jXGXJyKnxCG19uPc6EhZiUC+MUyvoqCtw==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "optional": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds= sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true + }, + "jsbarcode": { + "version": "3.11.5", + "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.11.5.tgz", + "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==" + }, + "jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "less": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + } + }, + "local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mlly": { + "version": "0.5.16", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-0.5.16.tgz", + "integrity": "sha512-LaJ8yuh4v0zEmge/g3c7jjFlhoCPfQn6RCjXgm9A0Qiuochq4BcuOxVfWmdnCoLTlg2MV+hqhOek+W2OhG0Lwg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "pathe": "^0.3.8", + "pkg-types": "^0.3.5", + "ufo": "^0.8.5" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } + } + }, + "mockjs": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz", + "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "requires": { + "commander": "*" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "pathe": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.3.9.tgz", + "integrity": "sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "pinia": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.21.tgz", + "integrity": "sha512-6ol04PtL29O0Z6JHI47O3JUSoyOJ7Og0rstXrHVMZSP4zAldsQBXJCNF0i/H7m8vp/Hjd/CSmuPl7C5QAwpeWQ==", + "requires": { + "@vue/devtools-api": "^6.2.1", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==" + } + } + }, + "pinia-plugin-persistedstate": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.0.2.tgz", + "integrity": "sha512-84vPyUhPA/8Pr+1mT1ioNb2d8z4tvdgYRqMQf8xyauOVBKjo0ZcRBwPQBV7ZAJG43Kwar43nXG2jU+ZMvAFFRQ==" + }, + "pkg-types": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-0.3.6.tgz", + "integrity": "sha512-uQZutkkh6axl1GxDm5/+8ivVdwuJ5pyDGqJeSiIWIUWIqYiK3p9QKozN/Rv6eVvFoeSWkN1uoYeSDBwwBJBtbg==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^0.5.16", + "pathe": "^0.3.9" + }, + "dependencies": { + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + } + } + }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY= sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "requires": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, + "qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "request-light": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.10.1.tgz", + "integrity": "sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-visualizer": { + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", + "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", + "dev": true, + "requires": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "scule": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/scule/-/scule-0.3.2.tgz", + "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-literal": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-0.4.2.tgz", + "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "dev": true, + "requires": { + "acorn": "^8.8.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", + "dev": true + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "dev": true + }, + "ufo": { + "version": "0.8.6", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-0.8.6.tgz", + "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", + "dev": true + }, + "unimport": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-0.7.0.tgz", + "integrity": "sha512-Cr0whz4toYVid3JHlni/uThwavDVVCk6Zw0Gxnol1c7DprTA+Isr4T+asO6rDGkhkgV7r3vSdSs5Ym8F15JA+w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.2", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "mlly": "^0.5.16", + "pathe": "^0.3.9", + "pkg-types": "^0.3.5", + "scule": "^0.3.2", + "strip-literal": "^0.4.2", + "unplugin": "^0.10.2" + }, + "dependencies": { + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "unplugin": { + "version": "0.10.2", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-0.10.2.tgz", + "integrity": "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.4.5" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + } + } + }, + "unplugin-auto-import": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.4.tgz", + "integrity": "sha512-lh/bRDRYwgnb9Cm5ur8TlTMGxA1GRZvgzCvBIf0vyuVRy7ebWcWefFElpUDpr8vLl+ZRGsPVCOGiYJ8TCR625Q==", + "dev": true, + "requires": { + "@antfu/utils": "^0.6.0", + "@rollup/pluginutils": "^5.0.2", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "unimport": "^0.7.0", + "unplugin": "^0.10.2" + }, + "dependencies": { + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "unplugin-layui-vue-resolver": { + "version": "0.0.13", + "resolved": "https://registry.npmmirror.com/unplugin-layui-vue-resolver/-/unplugin-layui-vue-resolver-0.0.13.tgz", + "integrity": "sha512-x3a0981c8oWiAnin/7uJAqnH3o5zxAZC/3eBsBrHzcv8knf0aiZbWnEsLK9Td8kImBFuGCIv6//cng2R6xtBGA==", + "dev": true + }, + "unplugin-vue-components": { + "version": "0.22.9", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.22.9.tgz", + "integrity": "sha512-qBvooq3EgpjtYicxeccRUGUBBQCCw9rJ0kHPZPOSJd8TBZViSv86vuKLTRDHPyjWtclwOIkVStZJfPdJFhYUMw==", + "dev": true, + "requires": { + "@antfu/utils": "^0.6.0", + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "minimatch": "^5.1.0", + "resolve": "^1.22.1", + "unplugin": "^0.10.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true + }, + "vite": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "requires": { + "esbuild": "^0.16.3", + "fsevents": "~2.3.2", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + } + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "dev": true + }, + "vscode-css-languageservice": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz", + "integrity": "sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==", + "dev": true, + "requires": { + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "vscode-html-languageservice": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz", + "integrity": "sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==", + "dev": true, + "requires": { + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + }, + "dependencies": { + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + } + } + }, + "vscode-jsonrpc": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", + "dev": true + }, + "vscode-languageserver": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz", + "integrity": "sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==", + "dev": true, + "requires": { + "vscode-languageserver-protocol": "3.17.1" + } + }, + "vscode-languageserver-protocol": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", + "dev": true, + "requires": { + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", + "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==", + "dev": true + }, + "vscode-nls": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.1.tgz", + "integrity": "sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==", + "dev": true + }, + "vscode-pug-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz", + "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==", + "dev": true, + "requires": { + "@volar/code-gen": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@volar/transforms": "0.29.8", + "pug-lexer": "^5.0.1", + "pug-parser": "^6.0.0", + "vscode-languageserver": "^8.0.0-next.2" + } + }, + "vscode-typescript-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz", + "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==", + "dev": true, + "requires": { + "@volar/shared": "0.29.8", + "semver": "^7.3.5", + "upath": "^2.0.1", + "vscode-languageserver": "^8.0.0-next.2", + "vscode-languageserver-textdocument": "^1.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vscode-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", + "dev": true + }, + "vscode-vue-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz", + "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==", + "dev": true, + "requires": { + "@volar/code-gen": "0.29.8", + "@volar/html2pug": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@volar/transforms": "0.29.8", + "@volar/vue-code-gen": "0.29.8", + "@vscode/emmet-helper": "^2.8.0", + "@vue/reactivity": "^3.2.21", + "@vue/shared": "^3.2.21", + "request-light": "^0.5.4", + "upath": "^2.0.1", + "vscode-css-languageservice": "^5.1.7", + "vscode-html-languageservice": "^4.1.0", + "vscode-json-languageservice": "^4.1.8", + "vscode-languageserver": "^8.0.0-next.2", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-pug-languageservice": "0.29.8", + "vscode-typescript-languageservice": "0.29.8" + } + }, + "vue": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz", + "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "vue-i18n": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.1.10.tgz", + "integrity": "sha512-jpr7gV5KPk4n+sSPdpZT8Qx3XzTcNDWffRlHV/cT2NUyEf+sEgTTmLvnBAibjOFJ0zsUyZlVTAWH5DDnYep+1g==", + "requires": { + "@intlify/core-base": "9.1.10", + "@intlify/shared": "9.1.10", + "@intlify/vue-devtools": "9.1.10", + "@vue/devtools-api": "^6.0.0-beta.7" + } + }, + "vue-router": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.5.tgz", + "integrity": "sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ==", + "requires": { + "@vue/devtools-api": "^6.1.4" + } + }, + "vue-tsc": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz", + "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==", + "dev": true, + "requires": { + "@volar/shared": "0.29.8", + "vscode-vue-languageservice": "0.29.8" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "zrender": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz", + "integrity": "sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==", + "requires": { + "tslib": "2.3.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + } + } +} diff --git a/dashboard/package.json b/dashboard/package.json new file mode 100644 index 0000000..70c7c2c --- /dev/null +++ b/dashboard/package.json @@ -0,0 +1,37 @@ +{ + "name": "layui-vue-admin", + "version": "1.0.0", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "build:prod": "vue-tsc --noEmit && vite build --mode production", + "serve": "vite preview" + }, + "dependencies": { + "@layui/layui-vue": "1.8.4", + "axios": "^1.2.1", + "@antv/g2": "v4.2.8", + "echarts": "^5.4.1", + "js-base64": "^3.7.2", + "mockjs": "^1.1.0", + "nprogress": "^0.2.0", + "pinia": "^2.0.20", + "pinia-plugin-persistedstate": "^3.0.1", + "vue": "^3.2.45", + "vue-router": "^4.1.3" + }, + "devDependencies": { + "@types/node": "^18.7.8", + "@types/nprogress": "^0.2.0", + "@vitejs/plugin-vue": "^4.0.0", + "@vue/compiler-sfc": "^3.2.45", + "rollup-plugin-visualizer": "^5.8.3", + "less": "^4.1.2", + "typescript": "^4.5.4", + "unplugin-auto-import": "^0.11.2", + "unplugin-layui-vue-resolver": "^0.0.13", + "unplugin-vue-components": "^0.22.7", + "vite": "^4.0.0", + "vue-tsc": "^0.29.8" + } +} diff --git a/dashboard/pnpm-lock.yaml b/dashboard/pnpm-lock.yaml new file mode 100644 index 0000000..a49ca85 --- /dev/null +++ b/dashboard/pnpm-lock.yaml @@ -0,0 +1,1867 @@ +lockfileVersion: 5.3 + +specifiers: + '@layui/layui-vue': 1.7.4 + '@types/node': ^18.7.8 + '@types/nprogress': ^0.2.0 + '@vitejs/plugin-vue': ^2.2.0 + '@vue/compiler-sfc': ^3.2.33 + axios: ^0.27.2 + echarts: ^5.4.0 + js-base64: ^3.7.2 + less: ^4.1.2 + mockjs: ^1.1.0 + nprogress: ^0.2.0 + pinia: ^2.0.20 + pinia-plugin-persistedstate: ^2.1.1 + typescript: ^4.5.4 + unplugin-auto-import: ^0.11.2 + unplugin-layui-vue-resolver: ^0.0.13 + unplugin-vue-components: ^0.22.7 + vite: ^2.8.0 + vue: ^3.2.41 + vue-router: ^4.1.3 + vue-tsc: ^0.29.8 + +dependencies: + '@layui/layui-vue': 1.7.4_vue@3.2.41 + axios: 0.27.2 + echarts: 5.4.0 + js-base64: 3.7.2 + mockjs: 1.1.0 + nprogress: 0.2.0 + pinia: 2.0.20_typescript@4.7.4+vue@3.2.41 + pinia-plugin-persistedstate: 2.1.1_pinia@2.0.20 + vue: 3.2.41 + vue-router: 4.1.3_vue@3.2.41 + +devDependencies: + '@types/node': 18.7.8 + '@types/nprogress': 0.2.0 + '@vitejs/plugin-vue': 2.3.4_vite@2.9.15+vue@3.2.41 + '@vue/compiler-sfc': 3.2.37 + less: 4.1.3 + typescript: 4.7.4 + unplugin-auto-import: 0.11.2 + unplugin-layui-vue-resolver: 0.0.13 + unplugin-vue-components: 0.22.7_vue@3.2.41 + vite: 2.9.15_less@4.1.3 + vue-tsc: 0.29.8_typescript@4.7.4 + +packages: + + /@antfu/utils/0.5.2: + resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} + dev: true + + /@babel/helper-string-parser/7.18.10: + resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.18.6: + resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser/7.18.11: + resolution: {integrity: sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + /@babel/types/7.18.10: + resolution: {integrity: sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.18.10 + '@babel/helper-validator-identifier': 7.18.6 + to-fast-properties: 2.0.0 + dev: true + + /@ctrl/tinycolor/3.4.1: + resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} + engines: {node: '>=10'} + dev: false + + /@emmetio/abbreviation/2.2.3: + resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==} + dependencies: + '@emmetio/scanner': 1.0.0 + dev: true + + /@emmetio/css-abbreviation/2.1.4: + resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==} + dependencies: + '@emmetio/scanner': 1.0.0 + dev: true + + /@emmetio/scanner/1.0.0: + resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} + dev: true + + /@esbuild/linux-loong64/0.14.54: + resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@intlify/core-base/9.2.2: + resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==} + engines: {node: '>= 14'} + dependencies: + '@intlify/devtools-if': 9.2.2 + '@intlify/message-compiler': 9.2.2 + '@intlify/shared': 9.2.2 + '@intlify/vue-devtools': 9.2.2 + dev: false + + /@intlify/devtools-if/9.2.2: + resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==} + engines: {node: '>= 14'} + dependencies: + '@intlify/shared': 9.2.2 + dev: false + + /@intlify/message-compiler/9.2.2: + resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==} + engines: {node: '>= 14'} + dependencies: + '@intlify/shared': 9.2.2 + source-map: 0.6.1 + dev: false + + /@intlify/shared/9.2.2: + resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} + engines: {node: '>= 14'} + dev: false + + /@intlify/vue-devtools/9.2.2: + resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==} + engines: {node: '>= 14'} + dependencies: + '@intlify/core-base': 9.2.2 + '@intlify/shared': 9.2.2 + dev: false + + /@layui/icons-vue/1.0.9: + resolution: {integrity: sha512-GZ69m1/rG1Rb+VSVYFqLzy4Hzx1unOOvOCMfk3VAZ8bulHdi/Qab7woTwUdMTyQW+ghi9iqlpq30tly9qIUrzQ==} + dev: false + + /@layui/layer-vue/1.4.7: + resolution: {integrity: sha512-AIKvtcDr1PE6VSvf/+pnu2M12AFrzOL5kYOTDmiaPja4YKIacE9GTKg1RGp2tj8uo3e1ugVVELC31z1gLqaSZQ==} + dev: false + + /@layui/layui-vue/1.7.4_vue@3.2.41: + resolution: {integrity: sha512-kyDdywSpd1xsHnlb5cRj6FdZ4wqo1Cf/mfyGp1hV/oKoTub7B954aWLt0jXO1yriopSHXtjfvvg6fgsyU6V4Eg==} + dependencies: + '@ctrl/tinycolor': 3.4.1 + '@layui/icons-vue': 1.0.9 + '@layui/layer-vue': 1.4.7 + '@umijs/ssr-darkreader': 4.9.45 + '@vueuse/core': 9.2.0_vue@3.2.41 + async-validator: 4.2.5 + cropperjs: 1.5.12 + dayjs: 1.11.5 + evtd: 0.2.4 + vue-i18n: 9.2.2_vue@3.2.41 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@types/node/18.7.8: + resolution: {integrity: sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag==} + dev: true + + /@types/nprogress/0.2.0: + resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} + dev: true + + /@types/web-bluetooth/0.0.15: + resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==} + dev: false + + /@umijs/ssr-darkreader/4.9.45: + resolution: {integrity: sha512-XlcwzSYQ/SRZpHdwIyMDS4FOGX5kP4U/2g2mykyn/iPQTK4xTiQAyBu6UnnDnn7d5P8s7Atzh1C7H0ETNOypJg==} + dev: false + + /@vitejs/plugin-vue/2.3.4_vite@2.9.15+vue@3.2.41: + resolution: {integrity: sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==} + engines: {node: '>=12.0.0'} + peerDependencies: + vite: ^2.5.10 + vue: ^3.2.25 + dependencies: + vite: 2.9.15_less@4.1.3 + vue: 3.2.41 + dev: true + + /@volar/code-gen/0.29.8: + resolution: {integrity: sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==} + dependencies: + '@volar/shared': 0.29.8 + '@volar/source-map': 0.29.8 + dev: true + + /@volar/html2pug/0.29.8: + resolution: {integrity: sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==} + deprecated: 'WARNING: This project has been renamed to @johnsoncodehk/html2pug. Install using @johnsoncodehk/html2pug instead.' + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + htmlparser2: 7.2.0 + pug: 3.0.2 + dev: true + + /@volar/shared/0.29.8: + resolution: {integrity: sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==} + dependencies: + upath: 2.0.1 + vscode-jsonrpc: 8.0.2 + vscode-uri: 3.0.3 + dev: true + + /@volar/source-map/0.29.8: + resolution: {integrity: sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==} + dependencies: + '@volar/shared': 0.29.8 + dev: true + + /@volar/transforms/0.29.8: + resolution: {integrity: sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==} + dependencies: + '@volar/shared': 0.29.8 + vscode-languageserver: 8.0.2 + dev: true + + /@volar/vue-code-gen/0.29.8: + resolution: {integrity: sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==} + dependencies: + '@volar/code-gen': 0.29.8 + '@volar/shared': 0.29.8 + '@volar/source-map': 0.29.8 + '@vue/compiler-core': 3.2.41 + '@vue/compiler-dom': 3.2.41 + '@vue/shared': 3.2.41 + upath: 2.0.1 + dev: true + + /@vscode/emmet-helper/2.8.4: + resolution: {integrity: sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==} + dependencies: + emmet: 2.3.6 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.5 + vscode-languageserver-types: 3.17.2 + vscode-nls: 5.1.0 + vscode-uri: 2.1.2 + dev: true + + /@vue/compiler-core/3.2.37: + resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + source-map: 0.6.1 + dev: true + + /@vue/compiler-core/3.2.41: + resolution: {integrity: sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/shared': 3.2.41 + estree-walker: 2.0.2 + source-map: 0.6.1 + + /@vue/compiler-dom/3.2.37: + resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==} + dependencies: + '@vue/compiler-core': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@vue/compiler-dom/3.2.41: + resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==} + dependencies: + '@vue/compiler-core': 3.2.41 + '@vue/shared': 3.2.41 + + /@vue/compiler-sfc/3.2.37: + resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/compiler-core': 3.2.37 + '@vue/compiler-dom': 3.2.37 + '@vue/compiler-ssr': 3.2.37 + '@vue/reactivity-transform': 3.2.37 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.4.16 + source-map: 0.6.1 + dev: true + + /@vue/compiler-sfc/3.2.41: + resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/compiler-core': 3.2.41 + '@vue/compiler-dom': 3.2.41 + '@vue/compiler-ssr': 3.2.41 + '@vue/reactivity-transform': 3.2.41 + '@vue/shared': 3.2.41 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.4.16 + source-map: 0.6.1 + dev: false + + /@vue/compiler-ssr/3.2.37: + resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==} + dependencies: + '@vue/compiler-dom': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@vue/compiler-ssr/3.2.41: + resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==} + dependencies: + '@vue/compiler-dom': 3.2.41 + '@vue/shared': 3.2.41 + dev: false + + /@vue/devtools-api/6.2.1: + resolution: {integrity: sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==} + dev: false + + /@vue/reactivity-transform/3.2.37: + resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/compiler-core': 3.2.37 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + magic-string: 0.25.9 + dev: true + + /@vue/reactivity-transform/3.2.41: + resolution: {integrity: sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==} + dependencies: + '@babel/parser': 7.18.11 + '@vue/compiler-core': 3.2.41 + '@vue/shared': 3.2.41 + estree-walker: 2.0.2 + magic-string: 0.25.9 + dev: false + + /@vue/reactivity/3.2.37: + resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} + dependencies: + '@vue/shared': 3.2.37 + dev: true + + /@vue/reactivity/3.2.41: + resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==} + dependencies: + '@vue/shared': 3.2.41 + dev: false + + /@vue/runtime-core/3.2.41: + resolution: {integrity: sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==} + dependencies: + '@vue/reactivity': 3.2.41 + '@vue/shared': 3.2.41 + dev: false + + /@vue/runtime-dom/3.2.41: + resolution: {integrity: sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==} + dependencies: + '@vue/runtime-core': 3.2.41 + '@vue/shared': 3.2.41 + csstype: 2.6.20 + dev: false + + /@vue/server-renderer/3.2.41_vue@3.2.41: + resolution: {integrity: sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==} + peerDependencies: + vue: 3.2.41 + dependencies: + '@vue/compiler-ssr': 3.2.41 + '@vue/shared': 3.2.41 + vue: 3.2.41 + dev: false + + /@vue/shared/3.2.37: + resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} + dev: true + + /@vue/shared/3.2.41: + resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==} + + /@vueuse/core/9.2.0_vue@3.2.41: + resolution: {integrity: sha512-/MZ6qpz6uSyaXrtoeBWQzAKRG3N7CvfVWvQxiM3ei3Xe5ydOjjtVbo7lGl9p8dECV93j7W8s63A8H0kFLpLyxg==} + dependencies: + '@types/web-bluetooth': 0.0.15 + '@vueuse/metadata': 9.2.0 + '@vueuse/shared': 9.2.0_vue@3.2.41 + vue-demi: 0.13.8_vue@3.2.41 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/metadata/9.2.0: + resolution: {integrity: sha512-exN4KE6iquxDCdt72BgEhb3tlOpECtD61AUdXnUqBTIUCl70x1Ar/QXo3bYcvxmdMS2/peQyfeTzBjRTpvL5xw==} + dev: false + + /@vueuse/shared/9.2.0_vue@3.2.41: + resolution: {integrity: sha512-NnRp/noSWuXW0dKhZK5D0YLrDi0nmZ18UeEgwXQq7Ul5TTP93lcNnKjrHtd68j2xFB/l59yPGFlCryL692bnrA==} + dependencies: + vue-demi: 0.13.8_vue@3.2.41 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /assert-never/1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + dev: true + + /async-validator/4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + dev: false + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /axios/0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + dependencies: + follow-redirects: 1.15.1 + form-data: 4.0.0 + transitivePeerDependencies: + - debug + dev: false + + /babel-walk/3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/types': 7.18.10 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.2 + dev: true + + /character-parser/2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + dependencies: + is-regex: 1.1.4 + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander/9.4.0: + resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} + engines: {node: ^12.20.0 || >=14} + dev: false + + /constantinople/4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + dependencies: + '@babel/parser': 7.18.11 + '@babel/types': 7.18.10 + dev: true + + /copy-anything/2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + dependencies: + is-what: 3.14.1 + dev: true + + /cropperjs/1.5.12: + resolution: {integrity: sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==} + dev: false + + /csstype/2.6.20: + resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} + dev: false + + /dayjs/1.11.5: + resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==} + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + dependencies: + ms: 2.1.3 + dev: true + optional: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /doctypes/1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + dev: true + + /dom-serializer/1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + + /echarts/5.4.0: + resolution: {integrity: sha512-uPsO9VRUIKAdFOoH3B0aNg7NRVdN7aM39/OjovjO9MwmWsAkfGyeXJhK+dbRi51iDrQWliXV60/XwLA7kg3z0w==} + dependencies: + tslib: 2.3.0 + zrender: 5.4.0 + dev: false + + /emmet/2.3.6: + resolution: {integrity: sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==} + dependencies: + '@emmetio/abbreviation': 2.2.3 + '@emmetio/css-abbreviation': 2.1.4 + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /entities/3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: true + + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + + /esbuild-android-64/0.14.54: + resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.54: + resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.54: + resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.54: + resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.54: + resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.54: + resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.54: + resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.54: + resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.54: + resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.54: + resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.54: + resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.54: + resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.54: + resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.54: + resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.54: + resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.54: + resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.54: + resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.54: + resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.54: + resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.54: + resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.54: + resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/linux-loong64': 0.14.54 + esbuild-android-64: 0.14.54 + esbuild-android-arm64: 0.14.54 + esbuild-darwin-64: 0.14.54 + esbuild-darwin-arm64: 0.14.54 + esbuild-freebsd-64: 0.14.54 + esbuild-freebsd-arm64: 0.14.54 + esbuild-linux-32: 0.14.54 + esbuild-linux-64: 0.14.54 + esbuild-linux-arm: 0.14.54 + esbuild-linux-arm64: 0.14.54 + esbuild-linux-mips64le: 0.14.54 + esbuild-linux-ppc64le: 0.14.54 + esbuild-linux-riscv64: 0.14.54 + esbuild-linux-s390x: 0.14.54 + esbuild-netbsd-64: 0.14.54 + esbuild-openbsd-64: 0.14.54 + esbuild-sunos-64: 0.14.54 + esbuild-windows-32: 0.14.54 + esbuild-windows-64: 0.14.54 + esbuild-windows-arm64: 0.14.54 + dev: true + + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /evtd/0.2.4: + resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==} + dev: false + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /follow-redirects/1.15.1: + resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /get-intrinsic/1.1.2: + resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + requiresBuild: true + dev: true + optional: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /htmlparser2/7.2.0: + resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 3.0.1 + dev: true + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + optional: true + + /image-size/0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /is-expression/4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-promise/2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-what/3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + dev: true + + /js-base64/3.7.2: + resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} + dev: false + + /js-stringify/1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + dev: true + + /jsonc-parser/2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + dev: true + + /jsonc-parser/3.1.0: + resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} + dev: true + + /jsonc-parser/3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /jstransformer/1.0.0: + resolution: {integrity: sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=} + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + dev: true + + /less/4.1.3: + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.4.0 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.10 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.1.0 + source-map: 0.6.1 + dev: true + + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + + /magic-string/0.26.2: + resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string/0.26.5: + resolution: {integrity: sha512-yXUIYOOQnEHKHOftp5shMWpB9ImfgfDJpapa38j/qMtTj5QHWucvxP4lUtuRmHT9vAzvtpHkWKXW9xBwimXeNg==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + optional: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /minimatch/5.1.0: + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /mlly/0.5.16: + resolution: {integrity: sha512-LaJ8yuh4v0zEmge/g3c7jjFlhoCPfQn6RCjXgm9A0Qiuochq4BcuOxVfWmdnCoLTlg2MV+hqhOek+W2OhG0Lwg==} + dependencies: + acorn: 8.8.0 + pathe: 0.3.8 + pkg-types: 0.3.5 + ufo: 0.8.5 + dev: true + + /mockjs/1.1.0: + resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==} + hasBin: true + dependencies: + commander: 9.4.0 + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + optional: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /needle/3.1.0: + resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + debug: 3.2.7 + iconv-lite: 0.6.3 + sax: 1.2.4 + dev: true + optional: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /nprogress/0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /parse-node-version/1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /pathe/0.3.8: + resolution: {integrity: sha512-c71n61F1skhj/jzZe+fWE9XDoTYjWbUwIKVwFftZ5IOgiX44BVkTkD+/803YDgR50tqeO4eXWxLyVHBLWQAD1g==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + optional: true + + /pinia-plugin-persistedstate/2.1.1_pinia@2.0.20: + resolution: {integrity: sha512-HUgsU5IRtM75eAQiIqzT3p1oPEuYH1/B2ipTMU++yE+FV0LkHaBswdKXs0RMWYCmugO8s62oxLTh/N1dLNp+5A==} + peerDependencies: + pinia: ^2.0.0 + peerDependenciesMeta: + pinia: + optional: true + dependencies: + pinia: 2.0.20_typescript@4.7.4+vue@3.2.41 + dev: false + + /pinia/2.0.20_typescript@4.7.4+vue@3.2.41: + resolution: {integrity: sha512-fdHHumXW/0U5HhxmY1emo3I4z85p8NJPdbtFQSlmJXFe3ktuF0pYNVgVtk2q+j2zCtTufY763xzaEMx0t6T59g==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + dependencies: + '@vue/devtools-api': 6.2.1 + typescript: 4.7.4 + vue: 3.2.41 + vue-demi: 0.13.8_vue@3.2.41 + dev: false + + /pkg-types/0.3.5: + resolution: {integrity: sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 0.5.16 + pathe: 0.3.8 + dev: true + + /postcss/8.4.16: + resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /promise/7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: true + + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + optional: true + + /pug-attrs/3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + dev: true + + /pug-code-gen/3.0.2: + resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.0.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + dev: true + + /pug-error/2.0.0: + resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + dev: true + + /pug-filters/4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.0.0 + pug-walk: 2.0.0 + resolve: 1.22.1 + dev: true + + /pug-lexer/5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.0.0 + dev: true + + /pug-linker/4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + dependencies: + pug-error: 2.0.0 + pug-walk: 2.0.0 + dev: true + + /pug-load/3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + dev: true + + /pug-parser/6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + dependencies: + pug-error: 2.0.0 + token-stream: 1.0.0 + dev: true + + /pug-runtime/3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + dev: true + + /pug-strip-comments/2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + dependencies: + pug-error: 2.0.0 + dev: true + + /pug-walk/2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + dev: true + + /pug/3.0.2: + resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} + dependencies: + pug-code-gen: 3.0.2 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /request-light/0.5.8: + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup/2.77.3: + resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + optional: true + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + optional: true + + /scule/0.3.2: + resolution: {integrity: sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + optional: true + + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + + /strip-literal/0.4.2: + resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} + dependencies: + acorn: 8.8.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /token-stream/1.0.0: + resolution: {integrity: sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=} + dev: true + + /tslib/2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + dev: false + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /typescript/4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /ufo/0.8.5: + resolution: {integrity: sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==} + dev: true + + /unimport/0.6.8: + resolution: {integrity: sha512-MWkaPYvN0j+6jfEuiVFhfmy+aOtgAP11CozSbu/I3Cx+8ybjXIueB7GVlKofHabtjzSlPeAvWKJSFjHWsG2JaA==} + dependencies: + '@rollup/pluginutils': 4.2.1 + escape-string-regexp: 5.0.0 + fast-glob: 3.2.12 + local-pkg: 0.4.2 + magic-string: 0.26.5 + mlly: 0.5.16 + pathe: 0.3.8 + scule: 0.3.2 + strip-literal: 0.4.2 + unplugin: 0.9.6 + dev: true + + /unplugin-auto-import/0.11.2: + resolution: {integrity: sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==} + engines: {node: '>=14'} + peerDependencies: + '@vueuse/core': '*' + peerDependenciesMeta: + '@vueuse/core': + optional: true + dependencies: + '@antfu/utils': 0.5.2 + '@rollup/pluginutils': 4.2.1 + local-pkg: 0.4.2 + magic-string: 0.26.2 + unimport: 0.6.8 + unplugin: 0.9.6 + dev: true + + /unplugin-layui-vue-resolver/0.0.13: + resolution: {integrity: sha512-x3a0981c8oWiAnin/7uJAqnH3o5zxAZC/3eBsBrHzcv8knf0aiZbWnEsLK9Td8kImBFuGCIv6//cng2R6xtBGA==} + dev: true + + /unplugin-vue-components/0.22.7_vue@3.2.41: + resolution: {integrity: sha512-MJEAKJF9bRykTRvJ4WXF0FNMAyt1PX3iwpu2NN+li35sAKjQv6sC1col5aZDLiwDZDo2AGwxNkzLJFKaun9qHw==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + dependencies: + '@antfu/utils': 0.5.2 + '@rollup/pluginutils': 4.2.1 + chokidar: 3.5.3 + debug: 4.3.4 + fast-glob: 3.2.12 + local-pkg: 0.4.2 + magic-string: 0.26.5 + minimatch: 5.1.0 + resolve: 1.22.1 + unplugin: 0.9.6 + vue: 3.2.41 + transitivePeerDependencies: + - supports-color + dev: true + + /unplugin/0.9.6: + resolution: {integrity: sha512-YYLtfoNiie/lxswy1GOsKXgnLJTE27la/PeCGznSItk+8METYZErO+zzV9KQ/hXhPwzIJsfJ4s0m1Rl7ZCWZ4Q==} + dependencies: + acorn: 8.8.0 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.5 + dev: true + + /upath/2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + dev: true + + /vite/2.9.15_less@4.1.3: + resolution: {integrity: sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==} + engines: {node: '>=12.2.0'} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + dependencies: + esbuild: 0.14.54 + less: 4.1.3 + postcss: 8.4.16 + resolve: 1.22.1 + rollup: 2.77.3 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /void-elements/3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: true + + /vscode-css-languageservice/5.4.2: + resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==} + dependencies: + vscode-languageserver-textdocument: 1.0.5 + vscode-languageserver-types: 3.17.2 + vscode-nls: 5.1.0 + vscode-uri: 3.0.3 + dev: true + + /vscode-html-languageservice/4.2.5: + resolution: {integrity: sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==} + dependencies: + vscode-languageserver-textdocument: 1.0.5 + vscode-languageserver-types: 3.17.2 + vscode-nls: 5.1.0 + vscode-uri: 3.0.3 + dev: true + + /vscode-json-languageservice/4.2.1: + resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} + dependencies: + jsonc-parser: 3.1.0 + vscode-languageserver-textdocument: 1.0.5 + vscode-languageserver-types: 3.17.2 + vscode-nls: 5.1.0 + vscode-uri: 3.0.3 + dev: true + + /vscode-jsonrpc/8.0.2: + resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} + engines: {node: '>=14.0.0'} + dev: true + + /vscode-languageserver-protocol/3.17.2: + resolution: {integrity: sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==} + dependencies: + vscode-jsonrpc: 8.0.2 + vscode-languageserver-types: 3.17.2 + dev: true + + /vscode-languageserver-textdocument/1.0.5: + resolution: {integrity: sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==} + dev: true + + /vscode-languageserver-types/3.17.2: + resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} + dev: true + + /vscode-languageserver/8.0.2: + resolution: {integrity: sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.17.2 + dev: true + + /vscode-nls/5.1.0: + resolution: {integrity: sha512-37Ha44QrLFwR2IfSSYdOArzUvOyoWbOYTwQC+wS0NfqKjhW7s0WQ1lMy5oJXgSZy9sAiZS5ifELhbpXodeMR8w==} + dev: true + + /vscode-pug-languageservice/0.29.8: + resolution: {integrity: sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==} + deprecated: 'WARNING: This project has been renamed to @volar/pug-language-service. Install using @volar/pug-language-service instead.' + dependencies: + '@volar/code-gen': 0.29.8 + '@volar/shared': 0.29.8 + '@volar/source-map': 0.29.8 + '@volar/transforms': 0.29.8 + pug-lexer: 5.0.1 + pug-parser: 6.0.0 + vscode-languageserver: 8.0.2 + dev: true + + /vscode-typescript-languageservice/0.29.8: + resolution: {integrity: sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==} + deprecated: 'WARNING: This project has been renamed to @volar/typescript-language-service. Install using @volar/typescript-language-service instead.' + dependencies: + '@volar/shared': 0.29.8 + semver: 7.3.7 + upath: 2.0.1 + vscode-languageserver: 8.0.2 + vscode-languageserver-textdocument: 1.0.5 + dev: true + + /vscode-uri/2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + dev: true + + /vscode-uri/3.0.3: + resolution: {integrity: sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==} + dev: true + + /vscode-vue-languageservice/0.29.8: + resolution: {integrity: sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==} + deprecated: 'WARNING: This project has been renamed to @volar/vue-language-service. Install using @volar/vue-language-service instead.' + dependencies: + '@volar/code-gen': 0.29.8 + '@volar/html2pug': 0.29.8 + '@volar/shared': 0.29.8 + '@volar/source-map': 0.29.8 + '@volar/transforms': 0.29.8 + '@volar/vue-code-gen': 0.29.8 + '@vscode/emmet-helper': 2.8.4 + '@vue/reactivity': 3.2.37 + '@vue/shared': 3.2.41 + request-light: 0.5.8 + upath: 2.0.1 + vscode-css-languageservice: 5.4.2 + vscode-html-languageservice: 4.2.5 + vscode-json-languageservice: 4.2.1 + vscode-languageserver: 8.0.2 + vscode-languageserver-textdocument: 1.0.5 + vscode-pug-languageservice: 0.29.8 + vscode-typescript-languageservice: 0.29.8 + dev: true + + /vue-demi/0.13.8_vue@3.2.41: + resolution: {integrity: sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.2.41 + dev: false + + /vue-i18n/9.2.2_vue@3.2.41: + resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==} + engines: {node: '>= 14'} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@intlify/core-base': 9.2.2 + '@intlify/shared': 9.2.2 + '@intlify/vue-devtools': 9.2.2 + '@vue/devtools-api': 6.2.1 + vue: 3.2.41 + dev: false + + /vue-router/4.1.3_vue@3.2.41: + resolution: {integrity: sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.2.1 + vue: 3.2.41 + dev: false + + /vue-tsc/0.29.8_typescript@4.7.4: + resolution: {integrity: sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/shared': 0.29.8 + typescript: 4.7.4 + vscode-vue-languageservice: 0.29.8 + dev: true + + /vue/3.2.41: + resolution: {integrity: sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==} + dependencies: + '@vue/compiler-dom': 3.2.41 + '@vue/compiler-sfc': 3.2.41 + '@vue/runtime-dom': 3.2.41 + '@vue/server-renderer': 3.2.41_vue@3.2.41 + '@vue/shared': 3.2.41 + dev: false + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules/0.4.5: + resolution: {integrity: sha512-8bWq0Iluiv9lVf9YaqWQ9+liNgXSHICm+rg544yRgGYaR8yXZTVBaHZkINZSB2yZSWo4b0F6MIxqJezVfOEAlg==} + dev: true + + /with/7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/parser': 7.18.11 + '@babel/types': 7.18.10 + assert-never: 1.2.1 + babel-walk: 3.0.0-canary-5 + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /zrender/5.4.0: + resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==} + dependencies: + tslib: 2.3.0 + dev: false diff --git a/dashboard/public/favicon.ico b/dashboard/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ab127bec62f1d3560c43ea8474d83c682f85901c GIT binary patch literal 321 zcmZQzU<5(|0R|u`!Jy5^z#zuJz|a}s=g!L|#RX*YdV0770coHL1_2H>ASwU(eBrc)!lo&}H+&FZ=xp-_-}F-~YdB=gj|S-`EsN zGaR}l+N!~p5iZuWSY(al3#XE=5^OUn*#BP7SnXtZM8WRg{*~SD>xKP0!Y3HEF)Hu` zt(iaLN4&oF-~DlJx9a~+dGbGv@8193ro)C;l1v*!Y%Z`>{9$K^FF(8B71xiMK)*0} My85}Sb4q9e0KLR}RR910 literal 0 HcmV?d00001 diff --git a/dashboard/resources/1.jpg b/dashboard/resources/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca36fc13eb9b083c441152d00676a7c62380a471 GIT binary patch literal 178483 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 z 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∓ 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 E2Mr>pAOHXW literal 0 HcmV?d00001 diff --git a/dashboard/resources/10.jpg b/dashboard/resources/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d774cf2d6d60b309390374f98adae53063f53566 GIT binary patch literal 102538 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 VPXH!4M}Gfz(b_MG#N(U|{T~7JD`fxx literal 0 HcmV?d00001 diff --git a/dashboard/resources/11.jpg b/dashboard/resources/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f55da9d0f5568c71f9ac59bcd0b204d6db8e0368 GIT binary patch literal 101903 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

luF9`Six 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

tU2eEa#v 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

5$ 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�Vi@h;v=)sVXgAhP1Tnob5(a*20hxo^i#R_J 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%0Dl>mE7uML(VDM;4fzHQ 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

ss3jL_3s7ufi4HVw%iKY+2NY-zc@n?AG# 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 B*!2Ja literal 0 HcmV?d00001 diff --git a/dashboard/resources/5.jpg b/dashboard/resources/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ab42fd0662a66a182a104a15e5c47031333c23c GIT binary patch literal 159810 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 z zah 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 PPlx>f#39Ez{rJBCJn62O literal 0 HcmV?d00001 diff --git a/dashboard/resources/6.jpg b/dashboard/resources/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a85f96a955cac7254bf0685c72e3cd27b392aa50 GIT binary patch literal 199630 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

n+u3gjGD{mqIO)*3oiTX_}0mU8!j)G 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 b$XkGjhz0gzdG))?s~=0yi)A?EeDwbTu|cmt literal 0 HcmV?d00001 diff --git a/dashboard/resources/7.jpg b/dashboard/resources/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..461a3a394bf6fedfbdf1deda57b148844f2929f4 GIT binary patch literal 185802 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

qO~&iqA3maA8At4G9Syi$eR)^+ajLv!A+DeM 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�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 W)T@aH9ITHyF2{Z5>$4k--SHpXD;OUD literal 0 HcmV?d00001 diff --git a/dashboard/resources/8.jpg b/dashboard/resources/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3026d7e11deac1aa750527d79013b3e6cc7bff65 GIT binary patch literal 108528 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 + + + \ No newline at end of file diff --git a/dashboard/src/api/http.ts b/dashboard/src/api/http.ts new file mode 100644 index 0000000..4ba502f --- /dev/null +++ b/dashboard/src/api/http.ts @@ -0,0 +1,82 @@ +import axios, {AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse} from 'axios'; +import {useUserStore} from "../store/user"; +import {layer} from '@layui/layui-vue'; +import router from '../router' + +type TAxiosOption = { + timeout: number; + baseURL: string; +} + +const config: TAxiosOption = { + timeout: 5000, + baseURL: "http://localhost:8076/api" +} + +class Http { + service; + constructor(config: TAxiosOption) { + this.service = axios.create(config) + + /* 请求拦截 */ + this.service.interceptors.request.use((config: AxiosRequestConfig) => { + const userInfoStore = useUserStore(); + if (userInfoStore.token) { + (config.headers as AxiosRequestHeaders).token = userInfoStore.token as string + } else { + if(router.currentRoute.value.path!=='/login') { + router.push('/login'); + } + } + return config + }, error => { + return Promise.reject(error); + }) + + /* 响应拦截 */ + this.service.interceptors.response.use((response: AxiosResponse) => { + switch (response.data.code) { + case 200: + return response.data; + case 500: + layer.notifiy({ + title:"Error", + content:response.data.message, + icon:2 + }) + return response.data; + case 99998: + layer.confirm( + '会话超时, 请重新登录', + { icon : 2, yes: function(){ + router.push('/login'); + layer.closeAll() + }}); + return response.data; + default: + break; + } + }, error => { + return Promise.reject(error) + }) + } + + /* GET 方法 */ + get(url: string, params?: object, _object = {}): Promise { + return this.service.get(url, { params, ..._object }) + } + /* POST 方法 */ + post(url: string, params?: object, _object = {}): Promise { + return this.service.post(url, params, _object) + } + /* PUT 方法 */ + put(url: string, params?: object, _object = {}): Promise { + return this.service.put(url, params, _object) + } + /* DELETE 方法 */ + delete(url: string, params?: any, _object = {}): Promise { + return this.service.delete(url, { params, ..._object }) + } +} + +export default new Http(config) \ No newline at end of file diff --git a/dashboard/src/api/module/api.ts b/dashboard/src/api/module/api.ts new file mode 100644 index 0000000..e1722f3 --- /dev/null +++ b/dashboard/src/api/module/api.ts @@ -0,0 +1,25 @@ +import Http from '../http'; + +export const dashboard_overview = function () { + return Http.post('/dashboard/overview') +} + +export const dashboard_nodes = function () { + return Http.post('/dashboard/nodes') +} + +export const dashboard_metrics = function () { + return Http.post('/dashboard/metrics') +} + +export const engines = function () { + return Http.post('/engines/list') +} + +export const subscriptions_subscription = function () { + return Http.post('/subscriptions/subscription') +} + +export const subscriptions_topics = function () { + return Http.post('/subscriptions/topics') +} diff --git a/dashboard/src/api/module/user.ts b/dashboard/src/api/module/user.ts new file mode 100644 index 0000000..59f1040 --- /dev/null +++ b/dashboard/src/api/module/user.ts @@ -0,0 +1,13 @@ +import Http from '../http'; + +export const login = function(loginForm: any) { + return Http.post('/user/login', loginForm) +} + +export const menu = function() { + return Http.get('/user/menu') +} + +export const permission = function() { + return Http.get('/user/permission') +} \ No newline at end of file diff --git a/dashboard/src/assets/login/a.svg b/dashboard/src/assets/login/a.svg new file mode 100644 index 0000000..f47dce9 --- /dev/null +++ b/dashboard/src/assets/login/a.svg @@ -0,0 +1,10 @@ + + + LDAP + + + + + + + \ No newline at end of file diff --git a/dashboard/src/assets/login/f.svg b/dashboard/src/assets/login/f.svg new file mode 100644 index 0000000..30dc884 --- /dev/null +++ b/dashboard/src/assets/login/f.svg @@ -0,0 +1,10 @@ + + + 飞书 + + + + + + + \ No newline at end of file diff --git a/dashboard/src/assets/login/q.svg b/dashboard/src/assets/login/q.svg new file mode 100644 index 0000000..e929c28 --- /dev/null +++ b/dashboard/src/assets/login/q.svg @@ -0,0 +1,53 @@ + + + 企业微信 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dashboard/src/assets/login/w.svg b/dashboard/src/assets/login/w.svg new file mode 100644 index 0000000..8fadba7 --- /dev/null +++ b/dashboard/src/assets/login/w.svg @@ -0,0 +1,11 @@ + + + 微信 + + + + + + + + \ No newline at end of file diff --git a/dashboard/src/assets/logo.png b/dashboard/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5b32cd0afdd85106e040840984f823438abc51bc GIT binary patch literal 9457 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%0D$th*v%iIz!U=Nrw$_chn7;R`EG)C@6M z(8T2kW0%C7VW-M$UU%G8Xrx-f*D0Q`V2anxUv%j&=%npQ7L?(r^RutintH!;dj2U& zJ6FH1^?QVgon4D{52DXEp3#$brM>^6_I*Y@11G~Uy=JN?D0C|Xu0693DKl}UKRY>& zT_kNC=$LivN?Q$3Q3$+sffmfk(Ji8;4WQOj>n}4hQ`OaEZ@8zbYW}nr-F1j)y{BB@ zZfA|QDlUNHm2+aq{O>hjM;3M>ZJHjOfa$Zd;#J+`bfnYSH8YJAOVswt!o`3DOJR%b zcdZ0!o@9(18c>v#Kf`(4!63gp5C?$cQ)^@!JPKth%QK83)%r+UEhVZoAE=J;ZUC|wUVzDboTzAK1NU>7olV}0I-K!+_} zkMStl=|9@$ { + const { value } = binding; + const userInfoStore = useUserStore(); + const permissions = userInfoStore.permissions; + if (value && value instanceof Array && value.length > 0) { + const hasPermission = permissions.some((permission) => { + return value.includes(permission); + }) + if (!hasPermission) { + el.parentNode && el.parentNode.removeChild(el); + } + } +} \ No newline at end of file diff --git a/dashboard/src/layouts/BaseLayout.vue b/dashboard/src/layouts/BaseLayout.vue new file mode 100644 index 0000000..7adebb0 --- /dev/null +++ b/dashboard/src/layouts/BaseLayout.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/dashboard/src/layouts/BlankLayout.vue b/dashboard/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..e3bc8ac --- /dev/null +++ b/dashboard/src/layouts/BlankLayout.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalBreadcrumb.vue b/dashboard/src/layouts/Global/GlobalBreadcrumb.vue new file mode 100644 index 0000000..2a28784 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalBreadcrumb.vue @@ -0,0 +1,25 @@ + + + + + + diff --git a/dashboard/src/layouts/Global/GlobalColor.vue b/dashboard/src/layouts/Global/GlobalColor.vue new file mode 100644 index 0000000..32581a1 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalColor.vue @@ -0,0 +1,48 @@ + + + + + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalContent.vue b/dashboard/src/layouts/Global/GlobalContent.vue new file mode 100644 index 0000000..98be571 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalContent.vue @@ -0,0 +1,34 @@ + + + + + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalHeader.vue b/dashboard/src/layouts/Global/GlobalHeader.vue new file mode 100644 index 0000000..9fcefa3 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalHeader.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalMainMenu.vue b/dashboard/src/layouts/Global/GlobalMainMenu.vue new file mode 100644 index 0000000..1565a79 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalMainMenu.vue @@ -0,0 +1,67 @@ + + + + + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalMainMenuItem.vue b/dashboard/src/layouts/Global/GlobalMainMenuItem.vue new file mode 100644 index 0000000..9b74116 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalMainMenuItem.vue @@ -0,0 +1,23 @@ + + + diff --git a/dashboard/src/layouts/Global/GlobalMenu.vue b/dashboard/src/layouts/Global/GlobalMenu.vue new file mode 100644 index 0000000..79dd8e4 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalMenu.vue @@ -0,0 +1,74 @@ + + + + + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalMenuItem.vue b/dashboard/src/layouts/Global/GlobalMenuItem.vue new file mode 100644 index 0000000..61f05e7 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalMenuItem.vue @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/dashboard/src/layouts/Global/GlobalSetup.vue b/dashboard/src/layouts/Global/GlobalSetup.vue new file mode 100644 index 0000000..d93469b --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalSetup.vue @@ -0,0 +1,102 @@ + + + + + + + diff --git a/dashboard/src/layouts/Global/GlobalSetupItem.vue b/dashboard/src/layouts/Global/GlobalSetupItem.vue new file mode 100644 index 0000000..0b033ae --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalSetupItem.vue @@ -0,0 +1,41 @@ + + + + + + + diff --git a/dashboard/src/layouts/Global/GlobalSetupTheme.vue b/dashboard/src/layouts/Global/GlobalSetupTheme.vue new file mode 100644 index 0000000..68527d0 --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalSetupTheme.vue @@ -0,0 +1,107 @@ + + + + + + + diff --git a/dashboard/src/layouts/Global/GlobalTab.vue b/dashboard/src/layouts/Global/GlobalTab.vue new file mode 100644 index 0000000..fb955ab --- /dev/null +++ b/dashboard/src/layouts/Global/GlobalTab.vue @@ -0,0 +1,107 @@ + + + + + + + diff --git a/dashboard/src/layouts/NoSideLayout.vue b/dashboard/src/layouts/NoSideLayout.vue new file mode 100644 index 0000000..f29f319 --- /dev/null +++ b/dashboard/src/layouts/NoSideLayout.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/dashboard/src/layouts/composable/useMenu.ts b/dashboard/src/layouts/composable/useMenu.ts new file mode 100644 index 0000000..483d81f --- /dev/null +++ b/dashboard/src/layouts/composable/useMenu.ts @@ -0,0 +1,129 @@ +import {layer} from "@layui/layui-vue"; +import {computed, ComputedRef, ref, watch} from "vue"; +import {useRoute, useRouter} from "vue-router"; +import {diff} from "../../library/arrayUtil"; +import {getNode, getParents} from "../../library/treeUtil"; +import {useAppStore} from "../../store/app"; +import {useUserStore} from "../../store/user"; + +export function useMenu() { + + const route = useRoute(); + const router = useRouter(); + const userStore = useUserStore(); + const appStore = useAppStore(); + const selectedKey = ref(route.path); + const openKeys = ref([]); + const isAccordion = computed(() => appStore.accordion); + const isSubfield = computed(() => appStore.subfield); + const mainSelectedKey = ref("/workspace"); + + const menus = computed(() => { + if(isSubfield.value) { + const node = getNode(userStore.menus, mainSelectedKey.value); + if(node) { + return node.children; + } else { + return []; + } + } else { + return userStore.menus; + } + }); + + const mainMenus: ComputedRef = computed(() => { + if(isSubfield.value) { + return userStore.menus; + } else { + return []; + } + }); + + watch( + route, + () => { + selectedKey.value = route.path; + const andParents = getParents(menus.value, route.path); + if (andParents && andParents.length > 0) { + let andParentKeys = andParents.map((item: any) => item.id); + if (isAccordion.value) { + openKeys.value = andParentKeys; + } else { + openKeys.value = [...andParentKeys, ...openKeys.value]; + } + } + }, + { immediate: true } + ); + + watch(selectedKey, () => { + router.push(selectedKey.value); + }); + + function changeSelectedKey(key: string) { + var node = getNode(userStore.menus, key); + + if (node.type && node.type == "modal") { + layer.open({ + type: "iframe", + content: node.id, + area: ["80%", "80%"], + maxmin: true, + }); + return; + } + + if (node.type && node.type == "blank") { + window.open(node.id, "_blank"); + return; + } + + selectedKey.value = key; + } + + function changeOpenKeys(keys: string[]) { + const addArr = diff(openKeys.value, keys); + if (keys.length > openKeys.value.length && isAccordion.value) { + var arr = getParents(menus.value, addArr[0]); + openKeys.value = arr.map((item: any) => { + return item.id; + }); + } else { + openKeys.value = keys; + } + } + + function changeMainSelectedKey(key: string) { + + var node = getNode(userStore.menus, key); + + if (node.type && node.type == "modal") { + layer.open({ + type: "iframe", + content: node.id, + area: ["80%", "80%"], + maxmin: true, + }); + return; + } + + if (node.type && node.type == "blank") { + window.open(node.id, "_blank"); + return; + } + + mainSelectedKey.value = key; + } + + return { + selectedKey, + openKeys, + changeOpenKeys, + changeSelectedKey, + isAccordion, + menus, + mainMenus, + mainSelectedKey, + changeMainSelectedKey + }; +} diff --git a/dashboard/src/layouts/composable/useTab.ts b/dashboard/src/layouts/composable/useTab.ts new file mode 100644 index 0000000..7f87adb --- /dev/null +++ b/dashboard/src/layouts/composable/useTab.ts @@ -0,0 +1,86 @@ +import {computed, Ref, ref, watch} from "vue"; +import {useRoute, useRouter} from "vue-router"; +import {useAppStore} from "../../store/app"; + +export function useTab() { + + const route = useRoute(); + const router = useRouter(); + const routes = router.getRoutes() + const currentPath = computed(() => route.path); + const appStore = useAppStore(); + + const tabs: Ref = ref([]); + const tabsCache: string[] = [] + + if (routes) { + routes.forEach(route => { + if (route.meta && route.meta.affix) { + tabs.value.push({ + ...route.meta, + id: route.path, + name: route?.name + }) + tabsCache.push(route.path) + } + }) + } + + if (route.path && !tabsCache.includes(route.path)) { + const path = routes.find(item => item.path === route.path) + path && tabs.value.push({ + ...path.meta, + id: route.path, + name: route?.name, + }) + } + + const to = (id: string) => { + router.push(id); + }; + + const close = (id: string) => { + tabs.value = tabs.value.filter((ele: any) => ele.id != id); + }; + + const closeAll = () => { + tabs.value = tabs.value.filter((ele: any) => ele.closable == false); + to(tabs.value[0].id); + }; + + const closeCurrent = () => { + tabs.value = tabs.value.filter((ele: any) => ele.id != currentPath.value); + to(tabs.value[0].id); + } + + const closeOther = () => { + tabs.value = tabs.value.filter( + (ele: any) => ele.closable == false || ele.id == currentPath.value + ); + }; + + watch(route, () => { + let bool = false; + tabs.value.forEach((tab: any) => { + if (tab.id === route.path) { + bool = true; + } + }); + if (!bool) { + tabs.value.push({ id: route.fullPath, title: route.meta.title, name: route?.name }); + } + appStore.$patch((state)=> { + state.keepAliveList = tabs.value.map((item: any) => item?.name).filter((item: any)=> item) + }) + }); + + return { + to, + close, + closeAll, + closeOther, + closeCurrent, + tabs, + currentPath, + }; +} diff --git a/dashboard/src/library/arrayUtil.ts b/dashboard/src/library/arrayUtil.ts new file mode 100644 index 0000000..a22fb42 --- /dev/null +++ b/dashboard/src/library/arrayUtil.ts @@ -0,0 +1,14 @@ +/** + * 获取数据差异 + * + * @param arr1 数组 + * @param arr2 数组 + */ +const diff = function (arr1: any[], arr2: any[]) { + arr1 = Array.from(new Set(arr1)); + arr2 = Array.from(new Set(arr2)); + var mergeArr = arr1.concat(arr2); + return mergeArr.filter((x) => !(arr1.includes(x) && arr2.includes(x))); +} + +export { diff } \ No newline at end of file diff --git a/dashboard/src/library/treeUtil.ts b/dashboard/src/library/treeUtil.ts new file mode 100644 index 0000000..fdebf76 --- /dev/null +++ b/dashboard/src/library/treeUtil.ts @@ -0,0 +1,70 @@ +const getDepth = function () {}; + +/** + * 获取当前节点 + * + * @param list 集合 + * @param id 节点编号 + */ +export const getNode = function(list: any[], id: string): any { + for (let i in list) { + let item = list[i]; + if (item.id === id) { + return item; + } else { + if (item.children) { + let value = getNode(item.children, id); + if (value) { + return value; + } + } + } + } +} + +/** + * 获取所有父节点 ( 包含当前节点 ) + * + * @param list 集合 + * @param id 节点编号 + */ +export const getParents = function(list:any[], id: string) : any{ + for (let i in list) { + if (list[i].id === id) { + return [list[i]] + } + if (list[i].children) { + let node = getParents(list[i].children, id) + if (node !== undefined) { + return node.concat(list[i]) + } + } + } +} + +export const treeToList = function (arr: any[]){ + let res: any[] = [] + let fn = (source: any[])=>{ + source.forEach(el=>{ + res.push(el) + el.children && el.children.length>0 ? fn(el.children) : ""; + }); + }; + fn(arr); + return res; +} + +export const listToTree = function(arr:any[]) { + arr.forEach(e => { + arr.forEach(y => { + if (y.parentId == e.id) { + if (!e.children) { + e.children = [] + } + e.children.push(y) + } + }) + }) + arr = arr.filter(ele => ele.parentId === null) + return arr +} \ No newline at end of file diff --git a/dashboard/src/main.ts b/dashboard/src/main.ts new file mode 100644 index 0000000..7c98cff --- /dev/null +++ b/dashboard/src/main.ts @@ -0,0 +1,15 @@ +import {createApp} from 'vue' +import Router from './router' +import Store from './store' +import App from './App.vue' +import {permission} from "./directives/permission"; +import './mockjs' + +const app = createApp(App) + +app.use(Store); +app.use(Router); + +app.directive("permission",permission); + +app.mount('#app'); diff --git a/dashboard/src/mockjs/index.ts b/dashboard/src/mockjs/index.ts new file mode 100644 index 0000000..7ee4648 --- /dev/null +++ b/dashboard/src/mockjs/index.ts @@ -0,0 +1,25 @@ +// @ts-ignore +import Mock from 'mockjs'; +import user from './user'; + +Mock.mock(/\/user\/login/,'post',(req: any,res: any) =>{ + return user.getLogin(req,res) +}); + +Mock.mock(/\/user\/info/,'post',(req: any,res: any) =>{ + return user.getInfo(req,res) +}); + +Mock.mock(/\/user\/menu/,'get',(req: any,res: any) =>{ + return user.getMenu(req,res) +}); + +Mock.mock(/\/user\/permission/,'get',(req: any,res: any) =>{ + return user.getPermission(req,res) +}); + +Mock.mock(/\/file\/upload/,'post',(req: any,res: any) =>{ + return user.getUpload(req,res) +}); + +export default Mock; \ No newline at end of file diff --git a/dashboard/src/mockjs/user.ts b/dashboard/src/mockjs/user.ts new file mode 100644 index 0000000..a0770eb --- /dev/null +++ b/dashboard/src/mockjs/user.ts @@ -0,0 +1,139 @@ +import {Result} from "../types/result"; +import {User} from "../types/user"; + +let user: User = { + 'userId': '1992', + 'username': 'admin', +} + +const menus = [ + { + id: "/engines", + icon: "layui-icon-senior", + title: "引擎列表", + children:[ + { + id: "/engines/engines-list", + title: "配置列表" + } + ] + }, + { + id: "/report-manager", + icon: "layui-icon-note", + title: "上报管理", + children:[ + { + id: "/report-manager/metrics", + title: "执行耗时" + }, + { + id: "/report-manager/trace", + title: "执行链路" + }, + ] + }, + + { + id: "/engine-manager", + icon: "layui-icon-senior", + title: "引擎管理", + children:[ + { + id: "/engine-manager/engines-list", + title: "引擎列表" + } + ] + }, + + { + id: "https://www.yuque.com/weifu-fsmes/smart-flow", + icon: "layui-icon-help", + title: "帮助", + type: "blank" + } +] + +const getInfo = (req: any, res: any)=> { + let item = JSON.parse(req.body); + let token = item ? item.token : null; + let result:Result = { + code: 200, + msg: "操作成功", + data: user, + success: true + } + if(item || token){ + result.code = 99998; + result.msg = "请重新登录"; + result.success = false; + } + return result; +} + +const getPermission = (req: any, res: any)=> { + let item = JSON.parse(req.body); + let token = item ? item.token : null; + let result:Result = { + code: 200, + msg: "操作成功", + data: ['sys:user:add','sys:user:edit','sys:user:delete','sys:user:import','sys:user:export'], + success: true + } + if(item || token){ + result.code = 99998; + result.msg = "请重新登录"; + result.success = false; + } + return result; +} + +const getMenu = (req: any, res: any)=> { + let item = JSON.parse(req.body); + let token = item ? item.token : null; + let result:Result = { + code: 200, + msg: "操作成功", + data: menus, + success: true + } + if(item || token){ + result.code = 99998; + result.msg = "请重新登录"; + result.success = false; + } + return result; +} + +const getLogin = (req: any, res: any)=> { + let item = JSON.parse(req.body); + let account = item.account; + let password = item.password; + if(account === 'admin' && password === '123456'){ + return { + 'code': 200, + 'msg':'登陆成功', + 'data':{ + 'userId':'35002', + 'token':'eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOiJhZG1pbiIsInVzZXJOYW1lIjoiYWRtaW4iLCJvcmdDb2RlIjoiMzUwMDAiLCJkZXB0Q29kZSI6IjM1MDAwIiwiYXVkIjoiYWRtaW4iLCJpc3MiOiJhZG1pbiIsImV4cCI6MTU5MzUzNTU5OH0.0pJAojRtT5lx6PS2gH_Q9BmBxeNlgBL37ABX22HyDlebbr66cCjVYZ0v0zbLO_9241FX9-FZpCkEqE98MQOyWw', + } + } + }else{ + return { + 'code': 500, + 'msg':'登陆失败,账号密码不正确' + } + } +} + +const getUpload = (req: any, res: any)=> { + return { + 'code': 200, + 'msg':'上传成功', + 'success': true + } +} + +export default{ + getInfo, getMenu, getLogin, getPermission, getUpload +} \ No newline at end of file diff --git a/dashboard/src/router/index.ts b/dashboard/src/router/index.ts new file mode 100644 index 0000000..eb6d726 --- /dev/null +++ b/dashboard/src/router/index.ts @@ -0,0 +1,42 @@ +import {createRouter, createWebHashHistory, NavigationGuardNext, RouteLocationNormalized} from 'vue-router' +import routes from './module/base-routes' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import {useUserStore} from "../store/user"; + +NProgress.configure({ showSpinner: false }) + +const router = createRouter({ + history: createWebHashHistory(), + routes +}) + +/** + * Router 前置拦截 + * + * 1.验证 token 存在, 并且有效, 否则 -> login.vue + * 2.验证 permission 存在, 否则 -> 403.vue + * 3.验证 router 是否存在, 否则 -> 404.vue + * + * @param to 目标 + * @param from 来至 + */ +router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { + NProgress.start(); + + const userStore = useUserStore(); + + if(to.meta.requireAuth) { + next(); + } else if(to.matched.length == 0) { + next({path: '/error/404'}) + } else { + next(); + } +}) + +router.afterEach(() => { + NProgress.done(); +}) + +export default router \ No newline at end of file diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts new file mode 100644 index 0000000..e91d367 --- /dev/null +++ b/dashboard/src/router/module/base-routes.ts @@ -0,0 +1,57 @@ +import BaseLayout from '../../layouts/BaseLayout.vue'; +import Login from '../../views/login/index.vue'; + + +export default [ + { + path: '/', + redirect: '/engines' + }, + { + path: '/login', + component: Login, + meta: {title: '登录页面'}, + }, + { + path: '/engines', + component: BaseLayout, + redirect: "/engines/engines-list", + children:[ + { + path: '/engines/engines-list', + component: () => import('../../views/Engines/engine-list.vue'), + meta: {title: '配置列表', requireAuth: true}, + }, + ] + }, + { + path: '/report-manager', + component: BaseLayout, + redirect: "/report-manager/metrics", + children: [ + { + path: '/report-manager/metrics', + component: () => import('../../views/ReportManager/report-metrics.vue'), + meta: {title: '执行数据', requireAuth: true}, + }, + { + path: '/report-manager/trace', + component: () => import('../../views/ReportManager/report-trace.vue'), + meta: {title: '执行链路', requireAuth: true}, + }, + ] + + }, + { + path: '/engine-manager', + component: BaseLayout, + redirect: "/engine-manager/engines-list", + children:[ + { + path: '/engine-manager/engines-list', + component: () => import('../../views/EngineManager/index.vue'), + meta: {title: '引擎列表', requireAuth: true}, + }, + ] + }, +] diff --git a/dashboard/src/shims-vue.d.ts b/dashboard/src/shims-vue.d.ts new file mode 100644 index 0000000..f892769 --- /dev/null +++ b/dashboard/src/shims-vue.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import {DefineComponent} from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/dashboard/src/store/app.ts b/dashboard/src/store/app.ts new file mode 100644 index 0000000..e51f0e4 --- /dev/null +++ b/dashboard/src/store/app.ts @@ -0,0 +1,35 @@ +import {defineStore} from 'pinia' + +export const useAppStore = defineStore({ + id: 'app', + state: () => { + return { + tab: true, + logo: true, + level: true, + inverted: false, + routerAlive: true, + collapse: false, + subfield: false, + subfieldPosition: "side", + theme: 'light', + breadcrumb: true, + sideWidth: "220px", + sideTheme: 'dark', + greyMode: false, + accordion: true, + keepAliveList: [], + themeVariable: { + "--global-checked-color": "#5fb878", + "--global-primary-color": "#009688", + "--global-normal-color": "#1e9fff", + "--global-danger-color": "#ff5722", + "--global-warm-color": "#ffb800", + }, + } + }, + persist: { + storage: localStorage, + paths: ['tab', 'theme', 'logo', 'level', 'inverted', 'breadcrumb', 'sideTheme', 'greyMode', 'accordion' ,'keepAliveList', 'themeVariable','subfield'], + } +}) \ No newline at end of file diff --git a/dashboard/src/store/index.ts b/dashboard/src/store/index.ts new file mode 100644 index 0000000..60b9638 --- /dev/null +++ b/dashboard/src/store/index.ts @@ -0,0 +1,7 @@ +import {createPinia} from 'pinia' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +const store = createPinia(); +store.use(piniaPluginPersistedstate); + +export default store; \ No newline at end of file diff --git a/dashboard/src/store/user.ts b/dashboard/src/store/user.ts new file mode 100644 index 0000000..e6eefab --- /dev/null +++ b/dashboard/src/store/user.ts @@ -0,0 +1,32 @@ +import {defineStore} from 'pinia' +import {menu, permission} from "../api/module/user"; + +export const useUserStore = defineStore({ + id: 'user', + state: () => { + return { + token: '', + userInfo: {}, + permissions: [], + menus: [], + } + }, + actions: { + async loadMenus(){ + const { data, code } = await menu(); + if(code == 200) { + this.menus = data; + } + }, + async loadPermissions(){ + const { data, code } = await permission(); + if(code == 200) { + this.permissions = data; + } + } + }, + persist: { + storage: localStorage, + paths: ['token', 'userInfo', 'permissions', 'menus' ], + } +}) \ No newline at end of file diff --git a/dashboard/src/styles/admin.css b/dashboard/src/styles/admin.css new file mode 100644 index 0000000..45fdce1 --- /dev/null +++ b/dashboard/src/styles/admin.css @@ -0,0 +1,136 @@ +.layui-logo { + width: 100%; + font-size: 20px; + height: 50px; + line-height: 50px; + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} +.layui-body { + overflow-x: hidden; + /*background-color: whitesmoke;*/ +} + +.layui-body > .global-tab > .layui-tab { + margin: 0px; +} + +.layui-body > .global-tab >.layui-tab > .layui-tab-content { + padding: 0px; +} +.layui-body > .global-tab >.layui-tab > .layui-tab-head { + z-index: 999; + display: block; + width: 100%; + background-color: white; +} +.layui-body > .global-tab > .layui-tab > .layui-tab-head > .layui-tab-title { + border-bottom: none; + border-left: none; +} +.layui-body > .global-tab > .layui-tab > .layui-tab-head > .layui-tab-title > li { + color: dimgray; + font-size: 14px; + line-height: 40px; + border-right: 1px solid whitesmoke; + border-bottom: none; +} +.layui-body > .global-tab > .layui-tab > .layui-tab-head > .layui-tab-title > li.layui-this::after { + border: none; +} + +.layui-header { + box-shadow: 0 1px 4px rgba(0, 21, 41, .08); +} + +.layui-header .layui-nav.layui-nav-center { + padding: 0px; +} + +.layui-header .layui-nav.layui-nav-center .layui-this { + background-color: whitesmoke; +} + +.layui-header .layui-nav.layui-nav-center .layui-this:after { + display: none; +} + +.layui-header .layui-nav.layui-nav-center .layui-nav-item a{ + margin: 0px 15px; +} + +.layui-header .layui-nav.layui-nav-center .layui-nav-item a *{ + color: #666; +} + +.layui-layout.has-tab .layui-header { + box-shadow: none; +} + +.layui-header, +.layui-header .layui-nav, +.layui-header .layui-nav .layui-nav-item { + height: 50px; + line-height: 50px; + background: transparent; + z-index: 9999; +} +.layui-header .layui-nav { + padding: 0 15px; +} +.layui-header .layui-nav .layui-nav-item > a { + padding: 0 20px; +} +.layui-header .layui-nav.layui-layout-left { + left: 0 !important ; + position: relative !important; +} +.layui-header .layui-nav * { + font-size: 14px; + color: #393d49; +} +.layui-side { + z-index: 10000; + background: rgb(34, 36, 37, 98%); + box-shadow: 2px 0 8px 0 rgb(29 35 41 / 5%); +} +.layui-side.light { + background-color: white!important; +} +.layui-side.light .layui-logo { + border-bottom: 1px solid whitesmoke; +} +.layui-side .layui-nav { + width: 100%; + background-color: transparent; +} +.layui-layout.collapse .layui-logo { + width: 60px; +} + +@media screen and (max-width: 767px) { + .layui-layout.collapse .layui-side { + width: 0 !important; + } +} + +@media screen and (min-width: 768px) { + .layui-layout.collapse .layui-side { + width: 60px !important; + } +} + +.layui-layout.collapse .layui-body { + left: 60px; +} +.layui-layout.collapse .layui-header .layui-layout-left { + left: 60px; +} +.layui-layout .layui-logo, +.layui-layout .layui-side, +.layui-layout .layui-body, +.layui-layout .layui-header .layui-layout-left { + transition: all 0.3s; +} +.layui-layout { + height: 100%; +} \ No newline at end of file diff --git a/dashboard/src/styles/display.css b/dashboard/src/styles/display.css new file mode 100644 index 0000000..1d4bba9 --- /dev/null +++ b/dashboard/src/styles/display.css @@ -0,0 +1,70 @@ +@media screen and (max-width: 767px) { + .hidden-xs-only { + display: none !important; + } +} + +@media screen and (max-width: 991px) { + .hidden-sm-and-down { + display: none !important; + } + + @media screen and (min-width: 768px) { + .hidden-sm-only { + display: none !important; + } + } +} + +.hidden-sm-and-up { + opacity: 0.1; + z-index: 9999; +} + +@media screen and (min-width: 768px) { + .hidden-sm-and-up { + display: none !important; + } +} + +@media screen and (max-width: 1199px) { + .hidden-md-and-down { + display: none !important; + } + + @media screen and (min-width: 992px) { + .hidden-md-only { + display: none !important; + } + } +} + +@media screen and (min-width: 992px) { + .hidden-md-and-up { + display: none !important; + } +} + +@media screen and (max-width: 1919px) { + .hidden-lg-and-down { + display: none !important; + } + + @media screen and (min-width: 1200px) { + .hidden-lg-only { + display: none !important; + } + } +} + +@media screen and (min-width: 1200px) { + .hidden-lg-and-up { + display: none !important; + } +} + +@media screen and (min-width: 1920px) { + .hidden-xl-only { + display: none !important; + } +} diff --git a/dashboard/src/styles/index.css b/dashboard/src/styles/index.css new file mode 100644 index 0000000..32e8a09 --- /dev/null +++ b/dashboard/src/styles/index.css @@ -0,0 +1,8 @@ +@import url(./admin.css); +@import url(./display.css); +@import url(./mobile.css); +@import url(./reset.css); + +.global-css { + font-family: 'Courier New', Courier, monospace; +} \ No newline at end of file diff --git a/dashboard/src/styles/mobile.css b/dashboard/src/styles/mobile.css new file mode 100644 index 0000000..d814e51 --- /dev/null +++ b/dashboard/src/styles/mobile.css @@ -0,0 +1,3 @@ +@media screen and (max-width:768px) { + +} \ No newline at end of file diff --git a/dashboard/src/styles/reset.css b/dashboard/src/styles/reset.css new file mode 100644 index 0000000..cd35fd3 --- /dev/null +++ b/dashboard/src/styles/reset.css @@ -0,0 +1,8 @@ +.layui-tab-bar { + height: 40px; +} + +#nprogress .bar { + z-index: 9999999; + background-color: var(--global-primary-color); +} \ No newline at end of file diff --git a/dashboard/src/types/metricInfo.ts b/dashboard/src/types/metricInfo.ts new file mode 100644 index 0000000..66bd6e6 --- /dev/null +++ b/dashboard/src/types/metricInfo.ts @@ -0,0 +1,5 @@ +export interface MetricInfo { + connectCount: number + topicCount: number + subscriberCount:number +} \ No newline at end of file diff --git a/dashboard/src/types/result.ts b/dashboard/src/types/result.ts new file mode 100644 index 0000000..ee599eb --- /dev/null +++ b/dashboard/src/types/result.ts @@ -0,0 +1,14 @@ +/** + * 结果集 + * + * @property code 状态码 + * @property success 是否成功 + * @property msg 提示信息 + * @property data 携带数据 + */ +export interface Result { + code: number; + success: boolean; + msg: string; + data?: any; +} \ No newline at end of file diff --git a/dashboard/src/types/user.ts b/dashboard/src/types/user.ts new file mode 100644 index 0000000..5db7d73 --- /dev/null +++ b/dashboard/src/types/user.ts @@ -0,0 +1,15 @@ + +/** + * 用户信息 + * + * @property userId 编号 + * @property username 用户名 + * @property email 邮箱 + * @property avatar 头像 + * @property nickname 昵称 + * @property remark 备注 + */ +export interface User { + userId: string; + username: string; +} \ No newline at end of file diff --git a/dashboard/src/views/EngineManager/index.vue b/dashboard/src/views/EngineManager/index.vue new file mode 100644 index 0000000..f4c1bac --- /dev/null +++ b/dashboard/src/views/EngineManager/index.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/dashboard/src/views/Engines/engine-list.vue b/dashboard/src/views/Engines/engine-list.vue new file mode 100644 index 0000000..8054792 --- /dev/null +++ b/dashboard/src/views/Engines/engine-list.vue @@ -0,0 +1,85 @@ + + + \ No newline at end of file diff --git a/dashboard/src/views/Login/index.vue b/dashboard/src/views/Login/index.vue new file mode 100644 index 0000000..f537570 --- /dev/null +++ b/dashboard/src/views/Login/index.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/dashboard/src/views/ReportManager/report-metrics.vue b/dashboard/src/views/ReportManager/report-metrics.vue new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/src/views/ReportManager/report-trace.vue b/dashboard/src/views/ReportManager/report-trace.vue new file mode 100644 index 0000000..e69de29 diff --git a/dashboard/tsconfig.json b/dashboard/tsconfig.json new file mode 100644 index 0000000..e754e65 --- /dev/null +++ b/dashboard/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "types": ["vite/client"] + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/dashboard/vite.config.ts b/dashboard/vite.config.ts new file mode 100644 index 0000000..f590b8d --- /dev/null +++ b/dashboard/vite.config.ts @@ -0,0 +1,44 @@ +import {defineConfig} from "vite"; +import vue from "@vitejs/plugin-vue"; +import AutoImport from "unplugin-auto-import/vite"; +import Components from "unplugin-vue-components/vite"; +import {LayuiVueResolver} from "unplugin-layui-vue-resolver"; +import {visualizer} from "rollup-plugin-visualizer"; + +const excludeComponents = ['LightIcon','DarkIcon'] + +export default defineConfig({ + base:'./', + server:{ + proxy:{ + '/api': { + target: 'http://localhost:18083/api/', + changeOrigin: true, + rewrite: path => path.replace(/^\/api/, '') + } + } + }, + plugins: [ + AutoImport({ + resolvers: [ + LayuiVueResolver(), + ], + }), + Components({ + resolvers: [ + LayuiVueResolver({ + resolveIcons: true, + exclude: excludeComponents + }), + ], + }), + visualizer({ + emitFile: true, + filename: "visualizer.html", + gzipSize: true, + brotliSize: true, + open: true, + }), + vue(), + ], +}); \ No newline at end of file diff --git a/pom.xml b/pom.xml index a73fe4f..977ba7b 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ smart-flow-script-condition smart-flow-springboot-starter smart-flow-helper + smart-flow-admin https://gitee.com/smartboot/smart-flow diff --git a/smart-flow-admin/pom.xml b/smart-flow-admin/pom.xml new file mode 100644 index 0000000..99ec7ed --- /dev/null +++ b/smart-flow-admin/pom.xml @@ -0,0 +1,40 @@ + + + + smart-flow-parent + org.smartboot.flow + 1.0.5-SNAPSHOT + + 4.0.0 + + smart-flow-admin + + + 8 + 8 + + + + + org.springframework.boot + spring-boot-starter + 2.7.5 + + + + org.springframework.boot + spring-boot-starter-web + 2.7.5 + compile + + + + org.smartboot.flow + smart-flow-manager + 1.0.5-SNAPSHOT + + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java new file mode 100644 index 0000000..efb4b1a --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java @@ -0,0 +1,17 @@ +package org.smartboot.smart.flow.admin; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author qinluo + * @date 2023-01-29 11:59:47 + * @since 1.0.0 + */ +@SpringBootApplication(scanBasePackages = {"org.smartboot.smart.flow.admin"}) +public class StartApplication { + + public static void main(String[] args) { + SpringApplication.run(StartApplication.class, args); + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java new file mode 100644 index 0000000..4e86d1f --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -0,0 +1,54 @@ +package org.smartboot.smart.flow.admin.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; + +/** + * @author qinluo + * @date 2023-01-30 12:01:42 + * @since 1.0.0 + */ +@RestController +@RequestMapping("/api/engines") +public class EnginesController { + + @RequestMapping("/list") + public Object list(@RequestParam(value = "engineName", required = false) String name) { + return new ArrayList<>(); + } + + @RequestMapping("/history") + public Object history(@RequestParam(value = "engineId") Long id) { + return new ArrayList<>(); + } + + @RequestMapping("/detail") + public Object detail(@RequestParam(value = "engineId") Long id) { + return new ArrayList<>(); + } + + @RequestMapping("/history_detail") + public Object historyDetail(@RequestParam(value = "historyId") Long id) { + return new ArrayList<>(); + } + + @RequestMapping("/offline") + public Object offline(@RequestParam(value = "engineId") Long id) { + return new ArrayList<>(); + } + + @RequestMapping("/online") + public Object online(@RequestParam(value = "engineId") Long id) { + return new ArrayList<>(); + } + + @RequestMapping("/validate") + public Object validate(@RequestParam(value = "content") String content) { + return new ArrayList<>(); + } + + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java new file mode 100644 index 0000000..19b6560 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java @@ -0,0 +1,31 @@ +package org.smartboot.smart.flow.admin.controller; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * @author qinluo + * @date 2023-01-30 12:52:31 + * @since 1.0.0 + */ +@Configuration +public class SmartFlowConfiguration { + + @Bean + public FilterRegistrationBean getCorsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedOrigin("*"); + corsConfiguration.addAllowedHeader("*"); + corsConfiguration.addAllowedMethod("*"); + corsConfiguration.setAllowCredentials(false); + source.registerCorsConfiguration("/api/**", corsConfiguration); + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(new CorsFilter(source)); + filterRegistrationBean.setOrder(0); + return filterRegistrationBean; + } +} diff --git a/smart-flow-admin/src/main/resources/application.properties b/smart-flow-admin/src/main/resources/application.properties new file mode 100644 index 0000000..1a6a2b0 --- /dev/null +++ b/smart-flow-admin/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8076 \ No newline at end of file -- Gitee From a2ae214d27411c83f3741450022faa62b0b21d29 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 19:06:16 +0800 Subject: [PATCH 02/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/api/module/api.ts | 4 + dashboard/src/router/module/base-routes.ts | 4 + .../src/views/Engines/engine-history.vue | 80 ++++++++++++++++ dashboard/src/views/Engines/engine-list.vue | 34 +++++-- .../views/ReportManager/report-metrics.vue | 7 ++ .../src/views/ReportManager/report-trace.vue | 7 ++ smart-flow-admin/pom.xml | 39 ++++++-- .../smartboot/smart/flow/admin/Result.java | 77 +++++++++++++++ .../smart/flow/admin/StartApplication.java | 2 + .../configuration/DatabaseInitializer.java | 62 ++++++++++++ .../DatasourceConfiguration.java | 49 ++++++++++ .../admin/controller/EnginesController.java | 96 ++++++++++++++++--- .../admin/mapper/EngineHistoryMapper.java | 42 ++++++++ .../smart/flow/admin/mapper/EngineMapper.java | 64 +++++++++++++ .../smart/flow/admin/model/EngineConfig.java | 83 ++++++++++++++++ .../smart/flow/admin/model/EngineHistory.java | 83 ++++++++++++++++ .../flow/admin/model/EngineSnapshot.java | 74 ++++++++++++++ .../src/main/resources/logback-spring.xml | 14 +++ .../resources/mapper/EngineHistoryMapper.xml | 32 +++++++ .../main/resources/mapper/EngineMapper.xml | 54 +++++++++++ .../src/main/resources/schema.sql | 58 +++++++++++ .../src/main/resources/init.sql | 10 +- 22 files changed, 941 insertions(+), 34 deletions(-) create mode 100644 dashboard/src/views/Engines/engine-history.vue create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMapper.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineConfig.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineHistory.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java create mode 100644 smart-flow-admin/src/main/resources/logback-spring.xml create mode 100644 smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml create mode 100644 smart-flow-admin/src/main/resources/mapper/EngineMapper.xml create mode 100644 smart-flow-admin/src/main/resources/schema.sql diff --git a/dashboard/src/api/module/api.ts b/dashboard/src/api/module/api.ts index e1722f3..2e48c45 100644 --- a/dashboard/src/api/module/api.ts +++ b/dashboard/src/api/module/api.ts @@ -16,6 +16,10 @@ export const engines = function () { return Http.post('/engines/list') } +export const engine_history = function (engineId: any) { + return Http.post('/engines/history?engineId=' + engineId); +} + export const subscriptions_subscription = function () { return Http.post('/subscriptions/subscription') } diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index e91d367..66ebaf6 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -7,6 +7,10 @@ export default [ path: '/', redirect: '/engines' }, + { + path: '/engines/engines-history', + component: () => import('../../views/Engines/engine-history.vue'), + }, { path: '/login', component: Login, diff --git a/dashboard/src/views/Engines/engine-history.vue b/dashboard/src/views/Engines/engine-history.vue new file mode 100644 index 0000000..74a16f3 --- /dev/null +++ b/dashboard/src/views/Engines/engine-history.vue @@ -0,0 +1,80 @@ + + + \ No newline at end of file diff --git a/dashboard/src/views/Engines/engine-list.vue b/dashboard/src/views/Engines/engine-list.vue index 8054792..af1801c 100644 --- a/dashboard/src/views/Engines/engine-list.vue +++ b/dashboard/src/views/Engines/engine-list.vue @@ -11,15 +11,31 @@ + @@ -35,7 +51,7 @@ export default { const columns2 = [ { title:"引擎ID", - width:"120px", + width:"30px", key:"id", },{ title:"引擎名称", @@ -43,25 +59,27 @@ export default { key:"engineName" },{ title:"版本", - width: "80px", + width: "20px", key:"version", },{ title:"状态", - width: "180px", - key:"status" + width: "50px", + key:"status", + customSlot: "status" },{ title:"创建时间", width: "80px", key:"created" },{ title:"最后修改时间", - width: "120px", + width: "80px", key:"updated" }, { title:"操作", width: "120px", - key:"options" + key:"options", + customSlot: "options" } ] diff --git a/dashboard/src/views/ReportManager/report-metrics.vue b/dashboard/src/views/ReportManager/report-metrics.vue index e69de29..f4c1bac 100644 --- a/dashboard/src/views/ReportManager/report-metrics.vue +++ b/dashboard/src/views/ReportManager/report-metrics.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/dashboard/src/views/ReportManager/report-trace.vue b/dashboard/src/views/ReportManager/report-trace.vue index e69de29..f4c1bac 100644 --- a/dashboard/src/views/ReportManager/report-trace.vue +++ b/dashboard/src/views/ReportManager/report-trace.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/smart-flow-admin/pom.xml b/smart-flow-admin/pom.xml index 99ec7ed..82ceaac 100644 --- a/smart-flow-admin/pom.xml +++ b/smart-flow-admin/pom.xml @@ -17,12 +17,6 @@ - - org.springframework.boot - spring-boot-starter - 2.7.5 - - org.springframework.boot spring-boot-starter-web @@ -35,6 +29,39 @@ smart-flow-manager 1.0.5-SNAPSHOT + + + + com.h2database + h2 + 1.4.200 + + + + org.mybatis + mybatis + 3.4.1 + + + + org.mybatis + mybatis-spring + 1.3.0 + + + + org.springframework + spring-jdbc + 5.3.23 + + + + + ch.qos.logback + logback-classic + 1.1.8 + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java new file mode 100644 index 0000000..24a1598 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java @@ -0,0 +1,77 @@ +package org.smartboot.smart.flow.admin; + +import java.io.Serializable; +import java.util.Objects; + +/** + * @author qinluo + * @date 2023-01-30 17:23:14 + * @since 1.0.0 + */ +public class Result implements Serializable { + private static final long serialVersionUID = 8602038114418123662L; + + public static final int SUCCESS_CODE = 200; + + private String message = ""; + private int code = SUCCESS_CODE; + private T data; + private long total; + + public Result(int code) { + this.code(code); + } + + public T getData() { + return this.data; + } + + public boolean isSuccess() { + return code == SUCCESS_CODE; + } + + public long getTotal() { + return this.total; + } + + public Result total(long totalCount) { + this.total = totalCount; + return this; + } + + public Result data(T model) { + this.data = model; + return this; + } + + + public String getMessage() { + return this.message; + } + + public Result message(String message) { + this.message = message; + return this; + } + + public int getCode() { + return this.code; + } + + public Result code(int code) { + this.code = code; + return this; + } + + public static Result ok(T data) { + Result resultData = new Result<>(SUCCESS_CODE); + return resultData.data(data); + } + + public static Result fail(int code, String msg) { + Result resultData = new Result<>(500); + return resultData.code(code).message(msg); + } + + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java index efb4b1a..b595e46 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/StartApplication.java @@ -1,5 +1,6 @@ package org.smartboot.smart.flow.admin; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,6 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @since 1.0.0 */ @SpringBootApplication(scanBasePackages = {"org.smartboot.smart.flow.admin"}) +@MapperScan("org.smartboot.smart.flow.admin.mapper") public class StartApplication { public static void main(String[] args) { diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java new file mode 100644 index 0000000..35279d4 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java @@ -0,0 +1,62 @@ +package org.smartboot.smart.flow.admin.configuration; + +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.sql.Connection; +import java.sql.Statement; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Component +public class DatabaseInitializer implements InitializingBean { + + private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseInitializer.class); + + @Autowired + private SqlSessionFactory sqlSessionFactory; + + @Override + public void afterPropertiesSet() throws Exception { + InputStream schemaStream = this.getClass().getClassLoader().getResourceAsStream("schema.sql"); + if (schemaStream == null) { + LOGGER.warn("can not find schema file [schema.sql] in class path"); + return; + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + int len; + + while ((len = schemaStream.read(buffer)) != -1) { + bos.write(buffer, 0, len); + } + + String sql = bos.toString("UTF-8"); + if (sql == null || sql.trim().length() == 0) { + LOGGER.warn("schema file [schema.sql] content is empty"); + return; + } + + SqlSession sqlSession = sqlSessionFactory.openSession(); + Connection connection = sqlSession.getConnection(); + + Statement statement = connection.createStatement(); + int execute = statement.executeUpdate(sql); + + LOGGER.warn("init schema sql result {}", execute); + + connection.commit(); + connection.close(); + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java new file mode 100644 index 0000000..dc5c402 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java @@ -0,0 +1,49 @@ +package org.smartboot.smart.flow.admin.configuration; + +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.type.JdbcType; +import org.h2.jdbcx.JdbcDataSource; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import javax.sql.DataSource; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Configuration +public class DatasourceConfiguration { + + @Primary + @Bean("h2Datasource") + @ConditionalOnMissingBean(DataSource.class) + public DataSource h2Datasource() { + DataSourceProperties dataSourceProperties = new DataSourceProperties(); + dataSourceProperties.setType(JdbcDataSource.class); + dataSourceProperties.setUrl("jdbc:h2:mem:smart-flow;DB_CLOSE_DELAY=-1"); + dataSourceProperties.setUsername("root"); + dataSourceProperties.setPassword("admin123456"); + return dataSourceProperties.initializeDataSourceBuilder().build(); + } + + @Bean + public SqlSessionFactory getSqlSessionFactory(DataSource dataSource) throws Exception { + + SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); + sqlSessionFactory.setDataSource(dataSource); + org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); + configuration.setDefaultScriptingLanguage(XMLLanguageDriver.class); + sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml")); + configuration.setJdbcTypeForNull(JdbcType.NULL); + sqlSessionFactory.setConfiguration(configuration); + return sqlSessionFactory.getObject(); + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java index 4e86d1f..fa8caf3 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -1,10 +1,28 @@ package org.smartboot.smart.flow.admin.controller; +import com.alibaba.fastjson.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.parser.DefaultParser; +import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.flow.helper.mock.FakeObjectCreator; +import org.smartboot.smart.flow.admin.Result; +import org.smartboot.smart.flow.admin.mapper.EngineHistoryMapper; +import org.smartboot.smart.flow.admin.mapper.EngineMapper; +import org.smartboot.smart.flow.admin.model.EngineConfig; +import org.smartboot.smart.flow.admin.model.EngineHistory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; /** * @author qinluo @@ -13,41 +31,89 @@ import java.util.ArrayList; */ @RestController @RequestMapping("/api/engines") +@ResponseBody public class EnginesController { + private static final Logger LOGGER = LoggerFactory.getLogger(EnginesController.class); + + @Autowired + private EngineMapper engineMapper; + + @Autowired + private EngineHistoryMapper engineHistoryMapper; + + @RequestMapping("/save") + public Object save(@RequestBody EngineConfig config) { + EngineConfig exist = engineMapper.getByName(config.getEngineName()); + int affectRows = engineMapper.insertOrUpdate(config); + if (affectRows == 0) { + return false; + } + + if (exist == null || !Objects.equals(exist.getEngineName(), config.getEngineName()) + || !Objects.equals(exist.getContent(), config.getContent())) { + EngineHistory history = new EngineHistory(); + history.setEngineName(config.getEngineName()); + history.setContent(config.getContent()); + history.setVersion(config.getVersion()); + history.setEngineId(AuxiliaryUtils.or(config.getId(), exist != null ? exist.getId() : 0)); + engineHistoryMapper.insert(history); + } + + return 1; + } + @RequestMapping("/list") - public Object list(@RequestParam(value = "engineName", required = false) String name) { - return new ArrayList<>(); + public String list(@RequestParam(value = "engineName", required = false) String name) { + return JSON.toJSONString(Result.ok(engineMapper.queryConfig(name))); } @RequestMapping("/history") - public Object history(@RequestParam(value = "engineId") Long id) { - return new ArrayList<>(); + public String history(@RequestParam(value = "engineId") Long id) { + return JSON.toJSONString(Result.ok(engineHistoryMapper.queryHistory(id))); } @RequestMapping("/detail") - public Object detail(@RequestParam(value = "engineId") Long id) { - return new ArrayList<>(); + public String detail(@RequestParam(value = "engineId") Long id) { + return JSON.toJSONString(Result.ok(engineMapper.detail(id))); } @RequestMapping("/history_detail") - public Object historyDetail(@RequestParam(value = "historyId") Long id) { - return new ArrayList<>(); + public String historyDetail(@RequestParam(value = "historyId") Long id) { + return JSON.toJSONString(Result.ok(engineHistoryMapper.detail(id))); } @RequestMapping("/offline") - public Object offline(@RequestParam(value = "engineId") Long id) { - return new ArrayList<>(); + public String offline(@RequestParam(value = "engineId") Long id) { + return JSON.toJSONString(Result.ok(engineMapper.offline(id))); } @RequestMapping("/online") - public Object online(@RequestParam(value = "engineId") Long id) { - return new ArrayList<>(); + public String online(@RequestParam(value = "engineId") Long id) { + return JSON.toJSONString(Result.ok(engineMapper.online(id))); } @RequestMapping("/validate") - public Object validate(@RequestParam(value = "content") String content) { - return new ArrayList<>(); + public String validate(@RequestParam(value = "content") String content) { + if (content == null || content.trim().length() == 0) { + return JSON.toJSONString(Result.fail(500, "内容为空")); + } + + DefaultParser parser = new DefaultParser(); + parser.setObjectCreator(new FakeObjectCreator()); + + try { + parser.parse(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))); + List engineNames = parser.getEngineNames(); + AssertUtil.isTrue(engineNames.size() == 1, "只允许存在一个engine"); + parser.getEngine(engineNames.get(0)).validate(); + } catch (Exception e) { + LOGGER.warn("invalid content, content = {}\n", content, e); + return JSON.toJSONString(Result.fail(500, e.getMessage())); + } + + return JSON.toJSONString(Result.ok(true)); + } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java new file mode 100644 index 0000000..d1464e2 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java @@ -0,0 +1,42 @@ +package org.smartboot.smart.flow.admin.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.model.EngineConfig; +import org.smartboot.smart.flow.admin.model.EngineHistory; + +import java.util.List; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Mapper +public interface EngineHistoryMapper { + + /** + * 查询引擎历史配置 + * + * @param id 引擎id + * @return 引擎配置列表 + */ + List queryHistory(@Param("engineId") Long id); + + /** + * 查询详情 + * + * @param id id + * @return 详情 + */ + EngineHistory detail(@Param("id") Long id); + + /** + * 插入一条配置 + * + * @param config 配置 + * @return 1/0 + */ + int insert(@Param("config") EngineHistory config); + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMapper.java new file mode 100644 index 0000000..f68f54a --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMapper.java @@ -0,0 +1,64 @@ +package org.smartboot.smart.flow.admin.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.model.EngineConfig; + +import java.util.List; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Mapper +public interface EngineMapper { + + /** + * 查询引擎配置 + * + * @param name 引擎名称 + * @return 引擎配置列表 + */ + List queryConfig(@Param("name") String name); + + /** + * 插入或者更新一条配置 + * + * @param config 配置 + * @return 1/0 + */ + int insertOrUpdate(@Param("config") EngineConfig config); + + /** + * 通过名称查询engine + * + * @param name 名称 + * @return engine + */ + EngineConfig getByName(@Param("name") String name); + + /** + * 修改引擎状态为下线 + * + * @param id 引擎id + * @return 1/0 + */ + int offline(@Param("id") Long id); + + /** + * 修改引擎状态为上线 + * + * @param id 引擎id + * @return 1/0 + */ + int online(@Param("id") Long id); + + /** + * 查询详情 + * + * @param id id + * @return 详情 + */ + EngineConfig detail(@Param("id") Long id); +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineConfig.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineConfig.java new file mode 100644 index 0000000..ea08de7 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineConfig.java @@ -0,0 +1,83 @@ +package org.smartboot.smart.flow.admin.model; + +import com.alibaba.fastjson2.annotation.JSONField; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +public class EngineConfig implements Serializable { + private static final long serialVersionUID = 5630916400064848439L; + + private Long id; + private String engineName; + private String content; + private int version; + private int status; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date created; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date updated; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineHistory.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineHistory.java new file mode 100644 index 0000000..5f5fdb8 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineHistory.java @@ -0,0 +1,83 @@ +package org.smartboot.smart.flow.admin.model; + +import com.alibaba.fastjson2.annotation.JSONField; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +public class EngineHistory implements Serializable { + private static final long serialVersionUID = 5630916400064848439L; + + private Long id; + private String engineName; + private String content; + private int version; + private Long engineId; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date created; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date updated; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public Long getEngineId() { + return engineId; + } + + public void setEngineId(Long engineId) { + this.engineId = engineId; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java new file mode 100644 index 0000000..eb0df5c --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java @@ -0,0 +1,74 @@ +package org.smartboot.smart.flow.admin.model; + +import com.alibaba.fastjson2.annotation.JSONField; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +public class EngineSnapshot implements Serializable { + private static final long serialVersionUID = 5630916400064848439L; + + private Long id; + private String engineName; + private String content; + private String md5; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date created; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date updated; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } +} diff --git a/smart-flow-admin/src/main/resources/logback-spring.xml b/smart-flow-admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..a2d5583 --- /dev/null +++ b/smart-flow-admin/src/main/resources/logback-spring.xml @@ -0,0 +1,14 @@ + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{0} [%file:%line] - %msg%n + + + + + + + + + diff --git a/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml new file mode 100644 index 0000000..aa8f157 --- /dev/null +++ b/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + insert into engine_table_history(engine_id, engine_name, content, version, created, updated) + values(#{config.engineId}, #{config.engineName}, #{config.content}, #{config.version}, now(), now()) + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/mapper/EngineMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineMapper.xml new file mode 100644 index 0000000..09c361e --- /dev/null +++ b/smart-flow-admin/src/main/resources/mapper/EngineMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + insert into engine_table(engine_name, content, created, updated) + values(#{config.engineName}, #{config.content}, now(), now()) + ON DUPLICATE KEY UPDATE + engine_name = #{config.engineName}, + content = #{config.content}, + version = #{config.version} + + + + + + + + + + + update engine_table set status = 1, updated = now() where id = #{id} + + + + update engine_table set status = 0, updated = now() where id = #{id} + + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/schema.sql b/smart-flow-admin/src/main/resources/schema.sql new file mode 100644 index 0000000..a699481 --- /dev/null +++ b/smart-flow-admin/src/main/resources/schema.sql @@ -0,0 +1,58 @@ +SET MODE MySQL; + +-- 引擎表 +CREATE TABLE IF NOT EXISTS `engine_table` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `engine_name` varchar(256) NOT NULL COMMENT '引擎名称,唯一', + `content` text COMMENT '引擎配置内容,必须是xml形式', + `version` int NOT NULL DEFAULT '1' COMMENT '版本', + `status` int NOT NULL DEFAULT '0' COMMENT '状态 0-正常 1-删除', + `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_engine_name` (`engine_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎配置表'; + +-- 引擎历史表 +CREATE TABLE IF NOT EXISTS `engine_table_history`( + `id` bigint NOT NULL AUTO_INCREMENT, + `engine_id` bigint NOT NULL COMMENT '引擎id', + `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `content` text COMMENT '引擎配置内容,必须是xml形式', + `version` int NOT NULL DEFAULT '1' COMMENT '版本', + `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎历史记录表'; + +-- 引擎结构快照 +CREATE TABLE IF NOT EXISTS `engine_table_snapshot`( + `id` bigint NOT NULL AUTO_INCREMENT, + `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `content` text COMMENT '引擎配置内容,必须是xml形式', + `md5` varchar(256) COMMENT 'content md5加密字符串', + `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_md5` (`md5`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎快照表'; + +-- 执行耗时 +CREATE TABLE IF NOT EXISTS `engine_table_metrics`( + `id` bigint NOT NULL AUTO_INCREMENT, + `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `content` text COMMENT 'json格式', + `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎执行数据表'; + +-- 执行trace +CREATE TABLE IF NOT EXISTS `engine_table_trace`( + `id` bigint NOT NULL AUTO_INCREMENT, + `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `content` text COMMENT 'json格式', + `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎执行链路表'; \ No newline at end of file diff --git a/smart-flow-manager/src/main/resources/init.sql b/smart-flow-manager/src/main/resources/init.sql index 1609f51..ec70a15 100644 --- a/smart-flow-manager/src/main/resources/init.sql +++ b/smart-flow-manager/src/main/resources/init.sql @@ -1,5 +1,5 @@ -- 引擎表 -CREATE TABLE `engine_table` ( +CREATE TABLE `engine_table` IF NOT EXISTS( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称,唯一', `content` text COMMENT '引擎配置内容,必须是xml形式', @@ -12,7 +12,7 @@ CREATE TABLE `engine_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='引擎配置表'; -- 引擎历史表 -CREATE TABLE `engine_table_history` ( +CREATE TABLE `engine_table_history` IF NOT EXISTS( `id` bigint NOT NULL AUTO_INCREMENT, `engine_id` bigint NOT NULL COMMENT '引擎id', `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', @@ -24,7 +24,7 @@ CREATE TABLE `engine_table_history` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='引擎历史记录表' -- 引擎结构快照 -CREATE TABLE `engine_table_snapshot` ( +CREATE TABLE `engine_table_snapshot` IF NOT EXISTS( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', `content` text COMMENT '引擎配置内容,必须是xml形式', @@ -36,7 +36,7 @@ CREATE TABLE `engine_table_snapshot` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='引擎快照表' -- 执行耗时 -CREATE TABLE `engine_table_metrics` ( +CREATE TABLE `engine_table_metrics` IF NOT EXISTS( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', `content` text COMMENT 'json格式', @@ -46,7 +46,7 @@ CREATE TABLE `engine_table_metrics` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='引擎执行数据表' -- 执行trace -CREATE TABLE `engine_table_trace` ( +CREATE TABLE `engine_table_trace` IF NOT EXISTS( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', `content` text COMMENT 'json格式', -- Gitee From e93e7826f550afde9d16f61a1aed0f7a15891381 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 19:50:02 +0800 Subject: [PATCH 03/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smartboot/smart/flow/admin/Result.java | 11 ++++---- .../admin/controller/EnginesController.java | 25 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java index 24a1598..ee9b6a0 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/Result.java @@ -1,7 +1,8 @@ package org.smartboot.smart.flow.admin; +import com.alibaba.fastjson.JSON; + import java.io.Serializable; -import java.util.Objects; /** * @author qinluo @@ -63,14 +64,14 @@ public class Result implements Serializable { return this; } - public static Result ok(T data) { + public static String ok(T data) { Result resultData = new Result<>(SUCCESS_CODE); - return resultData.data(data); + return JSON.toJSONString(resultData.data(data)); } - public static Result fail(int code, String msg) { + public static String fail(int code, String msg) { Result resultData = new Result<>(500); - return resultData.code(code).message(msg); + return JSON.toJSONString(resultData.code(code).message(msg)); } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java index fa8caf3..9835888 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -1,6 +1,5 @@ package org.smartboot.smart.flow.admin.controller; -import com.alibaba.fastjson.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.parser.DefaultParser; @@ -43,11 +42,11 @@ public class EnginesController { private EngineHistoryMapper engineHistoryMapper; @RequestMapping("/save") - public Object save(@RequestBody EngineConfig config) { + public String save(@RequestBody EngineConfig config) { EngineConfig exist = engineMapper.getByName(config.getEngineName()); int affectRows = engineMapper.insertOrUpdate(config); if (affectRows == 0) { - return false; + return Result.fail(500, "保存失败"); } if (exist == null || !Objects.equals(exist.getEngineName(), config.getEngineName()) @@ -60,43 +59,43 @@ public class EnginesController { engineHistoryMapper.insert(history); } - return 1; + return Result.ok(true); } @RequestMapping("/list") public String list(@RequestParam(value = "engineName", required = false) String name) { - return JSON.toJSONString(Result.ok(engineMapper.queryConfig(name))); + return Result.ok(engineMapper.queryConfig(name)); } @RequestMapping("/history") public String history(@RequestParam(value = "engineId") Long id) { - return JSON.toJSONString(Result.ok(engineHistoryMapper.queryHistory(id))); + return Result.ok(engineHistoryMapper.queryHistory(id)); } @RequestMapping("/detail") public String detail(@RequestParam(value = "engineId") Long id) { - return JSON.toJSONString(Result.ok(engineMapper.detail(id))); + return Result.ok(engineMapper.detail(id)); } @RequestMapping("/history_detail") public String historyDetail(@RequestParam(value = "historyId") Long id) { - return JSON.toJSONString(Result.ok(engineHistoryMapper.detail(id))); + return Result.ok(engineHistoryMapper.detail(id)); } @RequestMapping("/offline") public String offline(@RequestParam(value = "engineId") Long id) { - return JSON.toJSONString(Result.ok(engineMapper.offline(id))); + return Result.ok(engineMapper.offline(id)); } @RequestMapping("/online") public String online(@RequestParam(value = "engineId") Long id) { - return JSON.toJSONString(Result.ok(engineMapper.online(id))); + return Result.ok(engineMapper.online(id)); } @RequestMapping("/validate") public String validate(@RequestParam(value = "content") String content) { if (content == null || content.trim().length() == 0) { - return JSON.toJSONString(Result.fail(500, "内容为空")); + return Result.fail(500, "内容为空"); } DefaultParser parser = new DefaultParser(); @@ -109,10 +108,10 @@ public class EnginesController { parser.getEngine(engineNames.get(0)).validate(); } catch (Exception e) { LOGGER.warn("invalid content, content = {}\n", content, e); - return JSON.toJSONString(Result.fail(500, e.getMessage())); + return Result.fail(500, e.getMessage()); } - return JSON.toJSONString(Result.ok(true)); + return Result.ok(true); } -- Gitee From c341cc5dae7be292598bd8f5b8cff52537fa602b Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 19:54:31 +0800 Subject: [PATCH 04/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20h2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/admin/configuration/DatabaseInitializer.java | 7 +++++++ .../flow/admin/configuration/DatasourceConfiguration.java | 7 +++++++ smart-flow-admin/src/main/resources/schema.sql | 2 -- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java index 35279d4..db8022e 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatabaseInitializer.java @@ -26,6 +26,9 @@ public class DatabaseInitializer implements InitializingBean { @Autowired private SqlSessionFactory sqlSessionFactory; + @Autowired + private DatasourceConfiguration configuration; + @Override public void afterPropertiesSet() throws Exception { InputStream schemaStream = this.getClass().getClassLoader().getResourceAsStream("schema.sql"); @@ -48,6 +51,10 @@ public class DatabaseInitializer implements InitializingBean { return; } + if (configuration.isH2Database()) { + sql = "SET MODE MySQL;\n" + sql; + } + SqlSession sqlSession = sqlSessionFactory.openSession(); Connection connection = sqlSession.getConnection(); diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java index dc5c402..ece800a 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/DatasourceConfiguration.java @@ -22,10 +22,17 @@ import javax.sql.DataSource; @Configuration public class DatasourceConfiguration { + private boolean isH2; + + public boolean isH2Database() { + return isH2; + } + @Primary @Bean("h2Datasource") @ConditionalOnMissingBean(DataSource.class) public DataSource h2Datasource() { + isH2 = true; DataSourceProperties dataSourceProperties = new DataSourceProperties(); dataSourceProperties.setType(JdbcDataSource.class); dataSourceProperties.setUrl("jdbc:h2:mem:smart-flow;DB_CLOSE_DELAY=-1"); diff --git a/smart-flow-admin/src/main/resources/schema.sql b/smart-flow-admin/src/main/resources/schema.sql index a699481..7e2b472 100644 --- a/smart-flow-admin/src/main/resources/schema.sql +++ b/smart-flow-admin/src/main/resources/schema.sql @@ -1,5 +1,3 @@ -SET MODE MySQL; - -- 引擎表 CREATE TABLE IF NOT EXISTS `engine_table` ( `id` bigint NOT NULL AUTO_INCREMENT, -- Gitee From 346b28de9216d2f159be4d1704f70c58ea79cc87 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 20:31:46 +0800 Subject: [PATCH 05/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B7=BB=E5=8A=A0=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/views/Engines/engine-list.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/dashboard/src/views/Engines/engine-list.vue b/dashboard/src/views/Engines/engine-list.vue index af1801c..21e5fe6 100644 --- a/dashboard/src/views/Engines/engine-list.vue +++ b/dashboard/src/views/Engines/engine-list.vue @@ -6,6 +6,7 @@ 搜索 + 新增 -- Gitee From ea7f46e8dfae29baf16b159d93467496c6eebe00 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 30 Jan 2023 20:51:13 +0800 Subject: [PATCH 06/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/router/module/base-routes.ts | 10 ++++++++-- dashboard/src/views/Engines/engine-history.vue | 9 --------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index 66ebaf6..fd6e4ee 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -8,8 +8,14 @@ export default [ redirect: '/engines' }, { - path: '/engines/engines-history', - component: () => import('../../views/Engines/engine-history.vue'), + component: BaseLayout, + children: [ + { + path: "/engines/engines-history", + component: () => import('../../views/Engines/engine-history.vue'), + meta: {title: '历史列表', requireAuth: true}, + } + ] }, { path: '/login', diff --git a/dashboard/src/views/Engines/engine-history.vue b/dashboard/src/views/Engines/engine-history.vue index 74a16f3..137e986 100644 --- a/dashboard/src/views/Engines/engine-history.vue +++ b/dashboard/src/views/Engines/engine-history.vue @@ -1,13 +1,4 @@ @@ -44,61 +44,72 @@ \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java index aad5a77..9bf3280 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -68,12 +68,12 @@ public class EnginesController { } @RequestMapping("/history") - public String history(@RequestParam(value = "engineId") Long id) { + public String history(@RequestParam(value = "id") Long id) { return Result.ok(engineHistoryMapper.queryHistory(id)); } @RequestMapping("/detail") - public String detail(@RequestParam(value = "engineId") Long id) { + public String detail(@RequestParam(value = "id") Long id) { return Result.ok(engineMapper.detail(id)); } @@ -83,12 +83,12 @@ public class EnginesController { } @RequestMapping("/offline") - public String offline(@RequestParam(value = "engineId") Long id) { + public String offline(@RequestParam(value = "id") Long id) { return Result.ok(engineMapper.offline(id)); } @RequestMapping("/online") - public String online(@RequestParam(value = "engineId") Long id) { + public String online(@RequestParam(value = "id") Long id) { return Result.ok(engineMapper.online(id)); } -- Gitee From fc94365a65885b7215486700cdf4b2ac30b16fdc Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Tue, 31 Jan 2023 16:27:53 +0800 Subject: [PATCH 10/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20plantuml=20?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/api/module/api.ts | 4 ++ dashboard/src/router/module/base-routes.ts | 7 ++- dashboard/src/views/Engines/engine-edit.vue | 56 ++++++++++++++---- dashboard/src/views/Engines/engine-list.vue | 8 ++- smart-flow-admin/pom.xml | 10 ++++ .../admin/controller/EnginesController.java | 49 +++++++++++++++ .../resources/lib/plantuml-nodot.1.2023.1.jar | Bin 0 -> 10671064 bytes 7 files changed, 119 insertions(+), 15 deletions(-) create mode 100644 smart-flow-admin/src/main/resources/lib/plantuml-nodot.1.2023.1.jar diff --git a/dashboard/src/api/module/api.ts b/dashboard/src/api/module/api.ts index aa2a5a3..7e3918b 100644 --- a/dashboard/src/api/module/api.ts +++ b/dashboard/src/api/module/api.ts @@ -32,6 +32,10 @@ export const engine_validate = function (content: any) { return Http.post('/engines/validate', {content: content}); } +export const engine_plant_uml_view = function (content: any) { + return Http.post('/engines/plant_uml_view', {content: content}); +} + export const engine_online = function (engineId: any) { return Http.post('/engines/online?id=' + engineId); } diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index fd6e4ee..e309b83 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -13,7 +13,12 @@ export default [ { path: "/engines/engines-history", component: () => import('../../views/Engines/engine-history.vue'), - meta: {title: '历史列表', requireAuth: true}, + meta: {title: '历史记录', requireAuth: true}, + }, + { + path: "/engines/engines-edit", + component: () => import('../../views/Engines/engine-edit.vue'), + meta: {title: '查看编辑', requireAuth: true}, } ] }, diff --git a/dashboard/src/views/Engines/engine-edit.vue b/dashboard/src/views/Engines/engine-edit.vue index 63624b6..66cb056 100644 --- a/dashboard/src/views/Engines/engine-edit.vue +++ b/dashboard/src/views/Engines/engine-edit.vue @@ -1,20 +1,33 @@ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 732f5a5..5aa33cc 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.smartboot.flow smart-flow-parent - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 pom smart-flow diff --git a/smart-flow-admin/pom.xml b/smart-flow-admin/pom.xml index 3bfa200..a893f26 100644 --- a/smart-flow-admin/pom.xml +++ b/smart-flow-admin/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.5-SNAPSHOT + 1.0.7-SNAPSHOT 4.0.0 @@ -27,7 +27,7 @@ org.smartboot.flow smart-flow-manager - 1.0.5-SNAPSHOT + 1.0.7-SNAPSHOT diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java index c98895e..262f038 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -67,11 +67,12 @@ public class EnginesController { if (exist == null || !Objects.equals(exist.getEngineName(), config.getEngineName()) || !Objects.equals(exist.getContent(), config.getContent())) { + EngineConfig now = engineMapper.getByName(config.getEngineName()); EngineHistory history = new EngineHistory(); history.setEngineName(config.getEngineName()); history.setContent(config.getContent()); - history.setVersion(config.getVersion()); - history.setEngineId(AuxiliaryUtils.or(config.getId(), exist != null ? exist.getId() : 0)); + history.setVersion(now.getVersion()); + history.setEngineId(now.getId()); engineHistoryMapper.insert(history); } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java new file mode 100644 index 0000000..326b4d3 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java @@ -0,0 +1,55 @@ +package org.smartboot.smart.flow.admin.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.smart.flow.admin.Result; +import org.smartboot.smart.flow.admin.mapper.EngineSnapshotMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author qinluo + * @date 2023-01-30 12:01:42 + * @since 1.0.0 + */ +@RestController +@RequestMapping("/api/report") +@ResponseBody +public class ReportController { + + private static final Logger LOGGER = LoggerFactory.getLogger(ReportController.class); + + @Autowired + private EngineSnapshotMapper snapshotMapper; + + @RequestMapping("/query") + public String query(@RequestParam("engineMd5") String engineMd5) { + if (AuxiliaryUtils.isBlank(engineMd5)) { + return Result.fail(500, "not blank"); + } + + List existEngines = new ArrayList<>(); + + String[] split = engineMd5.split(","); + for (String s : split) { + String[] engineWithMd5 = s.split("-"); + if (engineWithMd5.length != 2) { + continue; + } + + // 引擎对应的内容md5已经存在,则不需要进行上报内容,仅上报md5即可。 + if (snapshotMapper.detail(engineWithMd5[0], engineWithMd5[1]) != null) { + existEngines.add(engineWithMd5[0]); + } + } + + return Result.ok(existEngines); + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineSnapshotMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineSnapshotMapper.java new file mode 100644 index 0000000..ecd4ab7 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineSnapshotMapper.java @@ -0,0 +1,32 @@ +package org.smartboot.smart.flow.admin.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.model.EngineSnapshot; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Mapper +public interface EngineSnapshotMapper { + + /** + * 查询详情 + * + * @param name 引擎名称 + * @param md5 引擎内容md5 + * @return 详情 + */ + EngineSnapshot detail(@Param("engine") String name, @Param("md5") String md5); + + /** + * 插入一条快照 + * + * @param snapshot 快照记录 + * @return 1/0 + */ + int insert(@Param("snapshot") EngineSnapshot snapshot); + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java index eb0df5c..92d47fe 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java @@ -8,7 +8,7 @@ import java.util.Date; /** * @author qinluo * @date 2023-01-30 - * @since 1.0.0 + * @since 1.0.7 */ public class EngineSnapshot implements Serializable { private static final long serialVersionUID = 5630916400064848439L; diff --git a/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml index aa8f157..d7b0242 100644 --- a/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml +++ b/smart-flow-admin/src/main/resources/mapper/EngineHistoryMapper.xml @@ -16,6 +16,7 @@ select id, engine_name, engine_id, version, created, updated from engine_table_history where engine_id = #{engineId} + order by id desc; + select * + from engine_table_snapshot + where engine_name = #{engine} and md5 = #{md5} + + + + insert into engine_table_snapshot(engine_name, content, md5, created, updated) + values(#{snapshot.engineName}, #{snapshot.content}, #{snapshot.md5}, now(), now()) + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/schema.sql b/smart-flow-admin/src/main/resources/schema.sql index 7e2b472..6410fdc 100644 --- a/smart-flow-admin/src/main/resources/schema.sql +++ b/smart-flow-admin/src/main/resources/schema.sql @@ -32,14 +32,18 @@ CREATE TABLE IF NOT EXISTS `engine_table_snapshot`( `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), - UNIQUE KEY `uk_md5` (`md5`) + UNIQUE KEY `uk_name_md5` (`engine_name`, `md5`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎快照表'; -- 执行耗时 CREATE TABLE IF NOT EXISTS `engine_table_metrics`( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `md5` varchar(256) COMMENT 'content md5加密字符串', + `address` varchar(64) COMMENT 'IP地址', + `host` varchar(128) COMMENT '主机名', `content` text COMMENT 'json格式', + `report_time` timestamp COMMENT '上报时间', `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) @@ -49,7 +53,11 @@ CREATE TABLE IF NOT EXISTS `engine_table_metrics`( CREATE TABLE IF NOT EXISTS `engine_table_trace`( `id` bigint NOT NULL AUTO_INCREMENT, `engine_name` varchar(256) NOT NULL COMMENT '引擎名称', + `address` varchar(64) COMMENT 'IP地址', + `host` varchar(128) COMMENT '主机名', + `md5` varchar(256) COMMENT 'content md5加密字符串', `content` text COMMENT 'json格式', + `report_time` timestamp COMMENT '上报时间', `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) diff --git a/smart-flow-core/pom.xml b/smart-flow-core/pom.xml index bdbaf34..4472a23 100644 --- a/smart-flow-core/pom.xml +++ b/smart-flow-core/pom.xml @@ -5,7 +5,7 @@ org.smartboot.flow smart-flow-parent - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java index 42be7b2..b51d4b7 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java @@ -5,7 +5,6 @@ import org.smartboot.flow.core.exception.DefaultExceptionHandler; import org.smartboot.flow.core.exception.ExceptionHandler; import org.smartboot.flow.core.invoker.Invoker; import org.smartboot.flow.core.manager.DefaultEngineManager; -import org.smartboot.flow.core.metrics.MetricExecutionListener; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -172,8 +171,6 @@ public class FlowEngine implements Describable, Validator, Measurable { AssertUtil.notNull(pipeline, "engine[ " + name + " ]pipeline must not be null"); pipeline.validate(); validateCalled = true; - // Register metrics listener. - ExecutionListenerRegistry.register(MetricExecutionListener.getInstance()); DefaultEngineManager.getDefaultManager().register(this); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java index 2f15888..32817db 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java @@ -8,7 +8,7 @@ package org.smartboot.flow.core.metrics; public class DefaultMetricsCreator implements MetricsCreator { @Override - public Metrics create() { + public Metrics create(Object key) { return new Metrics(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java index 61c8ee6..1bd37b1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java @@ -1,13 +1,5 @@ package org.smartboot.flow.core.metrics; -import org.smartboot.flow.core.metrics.counter.Counter; -import org.smartboot.flow.core.metrics.counter.MaxCounter; -import org.smartboot.flow.core.util.AssertUtil; - -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * @author qinluo * @date 2022/11/23 21:35 @@ -15,33 +7,7 @@ import java.util.concurrent.ConcurrentHashMap; */ public class Metrics { - private final Map COUNTERS = new ConcurrentHashMap<>(); - - public void addMetric(String name, long value) { - this.addMetric(MetricKind.ACCUMULATE, name, value); - } - - public void addMetric(MetricKind kind, String name, long value) { - AssertUtil.notNull(name, "metric name must not be null"); - AssertUtil.notNull(kind, "metric kind must not be null"); - - Counter counter = COUNTERS.computeIfAbsent(name, k -> createCounter(kind)); - counter.increment(value); - } - - public Map getMetrics() { - return Collections.unmodifiableMap(COUNTERS); - } - - private Counter createCounter(MetricKind kind) { - if (kind == MetricKind.MAX) { - return new MaxCounter(); - } - - return new Counter(); - } - public void reset() { - COUNTERS.forEach((k, v) -> v.reset()); + // Reset all data. } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java index 231b2a4..56b6a25 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java @@ -10,7 +10,9 @@ public interface MetricsCreator { /** * 创建一个metrics实例 * + * @param key related-object. + * * @return metrics */ - Metrics create(); + Metrics create(Object key); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java index 3ad8d56..afe995e 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java @@ -27,7 +27,7 @@ public class MetricsManager { AssertUtil.notNull(key, "key must not be null!"); Metrics metrics = MANAGED.get(key); if (metrics == null) { - metrics = metricsCreator.create(); + metrics = metricsCreator.create(key); MANAGED.put(key, metrics); } diff --git a/smart-flow-helper/pom.xml b/smart-flow-helper/pom.xml index f85faf0..2475e32 100644 --- a/smart-flow-helper/pom.xml +++ b/smart-flow-helper/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 @@ -20,7 +20,7 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7-SNAPSHOT diff --git a/smart-flow-manager/pom.xml b/smart-flow-manager/pom.xml index d20e9a4..8f66d1a 100644 --- a/smart-flow-manager/pom.xml +++ b/smart-flow-manager/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 @@ -20,13 +20,13 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7-SNAPSHOT org.smartboot.flow smart-flow-helper - 1.0.6 + 1.0.7-SNAPSHOT diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java new file mode 100644 index 0000000..8e361f5 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java @@ -0,0 +1,17 @@ +package org.smartboot.flow.manager; + +/** + * Flat engine manager. + * + * @author qinluo + * @date 2023/1/30 22:43 + * @since 1.0.7 + */ +public class FlatManager { + + private static final FlatManager INSTANCE = new FlatManager(); + + public static FlatManager get() { + return INSTANCE; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java similarity index 97% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java index 79a9c75..d436481 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.manager.report; +package org.smartboot.flow.manager; import java.net.InetAddress; import java.net.NetworkInterface; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java new file mode 100644 index 0000000..a701315 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java @@ -0,0 +1,29 @@ +package org.smartboot.flow.manager; + +/** + * @author qinluo + * @date 2023/1/30 22:43 + * @since 1.0.7 + */ +public interface ManagerAction { + + /** + * 快照查询,决定是否需要上报引擎结构 + */ + String SNAPSHOT_QUERY = "/api/report/query"; + + /** + * 上报统计数据 + */ + String REPORT_METRICS = "/api/report/metrics"; + + /** + * 上报执行链路数据 + */ + String REPORT_TRACE = "/api/report/trace"; + + /** + * 拉取待执行的commands. + */ + String MANAGER_COMMAND = "/api/manager/commands"; +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java index 7b3b5cb..d043c0a 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java @@ -10,7 +10,7 @@ import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.manager.ManagerConstants; import org.smartboot.flow.manager.NamedThreadFactory; import org.smartboot.flow.manager.reload.Reloader; -import org.smartboot.flow.manager.report.HostUtils; +import org.smartboot.flow.manager.HostUtils; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java similarity index 89% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java index c8be0c2..f456d14 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics.counter; +package org.smartboot.flow.manager.metric; import java.util.concurrent.atomic.LongAdder; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java new file mode 100644 index 0000000..d8ca163 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java @@ -0,0 +1,46 @@ +package org.smartboot.flow.manager.metric; + +import org.smartboot.flow.core.metrics.Metrics; +import org.smartboot.flow.core.util.AssertUtil; + +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author qinluo + * @date 2022/11/23 21:35 + * @since 1.0.7 + */ +public class DefaultMetrics extends Metrics { + + private final Map COUNTERS = new ConcurrentHashMap<>(); + + public void addMetric(String name, long value) { + this.addMetric(MetricKind.ACCUMULATE, name, value); + } + + public void addMetric(MetricKind kind, String name, long value) { + AssertUtil.notNull(name, "metric name must not be null"); + AssertUtil.notNull(kind, "metric kind must not be null"); + + Counter counter = COUNTERS.computeIfAbsent(name, k -> createCounter(kind)); + counter.increment(value); + } + + public Map getMetrics() { + return Collections.unmodifiableMap(COUNTERS); + } + + private Counter createCounter(MetricKind kind) { + if (kind == MetricKind.MAX) { + return new MaxCounter(); + } + + return new Counter(); + } + + public void reset() { + COUNTERS.forEach((k, v) -> v.reset()); + } +} diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java similarity index 92% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java index 2166e19..193a93a 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics.counter; +package org.smartboot.flow.manager.metric; import java.util.concurrent.atomic.AtomicLong; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java similarity index 82% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java index 8eb1fd5..34e697c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java @@ -1,10 +1,11 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.ExecutionListener; import org.smartboot.flow.core.ExecutionListenerSupport; import org.smartboot.flow.core.Key; import org.smartboot.flow.core.Measurable; +import org.smartboot.flow.core.metrics.Metrics; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -30,7 +31,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { Measurable measurable = (Measurable) object; Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + if (metrics.getClass() != DefaultMetrics.class) { return; } @@ -40,7 +41,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { context.putExt(Key.of(this), escaped); } - metrics.addMetric(NamedMetrics.EXECUTE, 1); + ((DefaultMetrics)metrics).addMetric(NamedMetrics.EXECUTE, 1); escaped.put(object, System.currentTimeMillis()); } @@ -51,8 +52,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -66,6 +67,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; if (context.getFatal() != null) { metrics.addMetric(NamedMetrics.FAIL, 1); } @@ -81,8 +83,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -91,6 +93,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; metrics.addMetric(NamedMetrics.ROLLBACK, 1); escaped.put(object, System.currentTimeMillis()); } @@ -102,8 +105,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -117,6 +120,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; long now = System.currentTimeMillis(); metrics.addMetric(NamedMetrics.ROLLBACK_TOTAL_ESCAPE, (now - start)); metrics.addMetric(MetricKind.MAX, NamedMetrics.ROLLBACK_MAX_ESCAPE, (now - start)); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java similarity index 80% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java index 921b016..94665ab 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; /** * @author qinluo diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java similarity index 89% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java index 7a81a92..4b55f87 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; /** * @author qinluo diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java index 8de4864..f375af3 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java @@ -1,6 +1,6 @@ package org.smartboot.flow.manager.report; -import org.smartboot.flow.core.manager.EngineModel; +import com.alibaba.fastjson.JSONObject; import java.io.Serializable; @@ -15,7 +15,10 @@ public class HttpReportModel implements Serializable { private long timestamp; private String address; private String host; - private EngineModel data; + private String engineName; + private String md5; + private String content; + private JSONObject json; public long getTimestamp() { return timestamp; @@ -41,11 +44,35 @@ public class HttpReportModel implements Serializable { this.host = host; } - public EngineModel getData() { - return data; + public String getEngineName() { + return engineName; } - public void setData(EngineModel data) { - this.data = data; + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public JSONObject getJson() { + return json; + } + + public void setJson(JSONObject json) { + this.json = json; } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java index d59d9b0..20e9906 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java @@ -6,6 +6,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.manager.EngineModel; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.manager.HostUtils; +import org.smartboot.flow.manager.ManagerAction; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; @@ -23,35 +25,42 @@ public class HttpReporter extends AbstractReporter { private static final Logger LOGGER = LoggerFactory.getLogger(HttpReporter.class); - private String url; + /** + * 服务端地址 + */ + private String serverAddress; + + /** + * 超时时间 + */ private long timeout; - private URL parsedUrl; + private String host; + private int port; + private Map headers; @Override public void start() { + URL parsedUrl; try { - this.parsedUrl = new URL(url); + parsedUrl = new URL(serverAddress); } catch (Exception e) { - throw new IllegalStateException("invalid url " + url, e); + throw new IllegalStateException("invalid url " + serverAddress, e); } + this.host = parsedUrl.getHost(); + this.port = parsedUrl.getPort(); super.start(); } @Override public void doExport(EngineModel model) { - AssertUtil.notNull(parsedUrl, "url is invalid."); + AssertUtil.notNull(host, "address is invalid."); - String path = parsedUrl.getPath(); - if (parsedUrl.getQuery() != null) { - path = path + "?" + parsedUrl.getQuery(); - } - - HttpClient httpClient = new HttpClient(parsedUrl.getHost(), parsedUrl.getPort()); + HttpClient httpClient = new HttpClient(host, port); httpClient.timeout((int)timeout); httpClient.connect(); - HttpPost post = httpClient.post(path); + HttpPost post = httpClient.post(ManagerAction.REPORT_METRICS); if (headers != null) { headers.forEach(post::addHeader); @@ -61,7 +70,13 @@ public class HttpReporter extends AbstractReporter { reportModel.setAddress(HostUtils.getHostIp()); reportModel.setHost(HostUtils.getHostName()); reportModel.setTimestamp(System.currentTimeMillis()); - reportModel.setData(model); + reportModel.setEngineName(model.getIdentifier()); + + // TODO 获取上报的数据 + //reportModel.setJson(model); + //reportModel.setMd5(model); + // TODO 获取engine的内容以及md5字符串 + //reportModel.setContent(model); String json = JSON.toJSONString(reportModel, SerializerFeature.WriteEnumUsingToString); byte[] bytes = json.getBytes(StandardCharsets.UTF_8); @@ -90,12 +105,12 @@ public class HttpReporter extends AbstractReporter { this.headers = headers; } - public String getUrl() { - return url; + public String getServerAddress() { + return serverAddress; } - public void setUrl(String url) { - this.url = url; + public void setServerAddress(String serverAddress) { + this.serverAddress = serverAddress; } public long getTimeout() { diff --git a/smart-flow-script-condition/pom.xml b/smart-flow-script-condition/pom.xml index 84f5b3c..9ecf383 100644 --- a/smart-flow-script-condition/pom.xml +++ b/smart-flow-script-condition/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 pom @@ -27,7 +27,7 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7-SNAPSHOT diff --git a/smart-flow-script-condition/smart-flow-script-groovy/pom.xml b/smart-flow-script-condition/smart-flow-script-groovy/pom.xml index 7107f2b..3f7c507 100644 --- a/smart-flow-script-condition/smart-flow-script-groovy/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-groovy/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 diff --git a/smart-flow-script-condition/smart-flow-script-ognl/pom.xml b/smart-flow-script-condition/smart-flow-script-ognl/pom.xml index 5dceee8..242680d 100644 --- a/smart-flow-script-condition/smart-flow-script-ognl/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-ognl/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 diff --git a/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml b/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml index 1f74cee..c439e69 100644 --- a/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 diff --git a/smart-flow-spring-extension/pom.xml b/smart-flow-spring-extension/pom.xml index de904ff..dedff1e 100644 --- a/smart-flow-spring-extension/pom.xml +++ b/smart-flow-spring-extension/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 @@ -22,7 +22,7 @@ org.smartboot.flow smart-flow-manager - 1.0.6 + 1.0.7-SNAPSHOT diff --git a/smart-flow-springboot-starter/pom.xml b/smart-flow-springboot-starter/pom.xml index b5d3e24..baff330 100644 --- a/smart-flow-springboot-starter/pom.xml +++ b/smart-flow-springboot-starter/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7-SNAPSHOT 4.0.0 @@ -25,7 +25,7 @@ org.smartboot.flow smart-flow-spring-extension - 1.0.6 + 1.0.7-SNAPSHOT diff --git a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java index 6029143..4bc582c 100644 --- a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java +++ b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java @@ -36,7 +36,7 @@ public class FlowHttpReportConfiguration { public HttpReporter getHttpReporter() { HttpReporter reporter = new HttpReporter(); reporter.setTimeout(this.timeout); - reporter.setUrl(this.url); + reporter.setServerAddress(this.url); reporter.setIdle(this.idle); return reporter; } -- Gitee From 8c0c3d4f57fb639b4fdd3ec90d59768d85b94608 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Wed, 8 Feb 2023 00:50:58 +0800 Subject: [PATCH 17/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=90=8E=E5=8F=B0=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/core/DefaultIdentifierManager.java | 8 +- .../org/smartboot/flow/core/FlowEngine.java | 11 +- .../flow/core/IdentifierManager.java | 2 +- .../org/smartboot/flow/core/Pipeline.java | 8 + .../flow/core/common/ComponentType.java | 2 +- .../flow/core/component/AdapterComponent.java | 6 + .../flow/core/component/ChooseComponent.java | 9 ++ .../flow/core/component/IfComponent.java | 9 ++ .../core/component/PipelineComponent.java | 8 +- .../flow/core/manager/ComponentModel.java | 110 ++------------ .../core/manager/DefaultEngineManager.java | 1 - .../flow/core/manager/EngineModel.java | 35 +++-- .../core/manager/IdentifierAllocator.java | 20 +++ .../flow/core/manager/PipelineModel.java | 15 +- .../core/manager/RegisterEngineVisitor.java | 9 +- .../manager/RegisteredComponentVisitor.java | 50 +++---- .../manager/RegisteredPipelineVisitor.java | 14 +- .../core/metrics/DefaultMetricsCreator.java | 2 + .../flow/core/metrics/MetricsManager.java | 2 +- .../flow/core/parser/ParserContext.java | 4 +- .../flow/core/util/AuxiliaryUtils.java | 11 +- .../flow/helper/view/PlantumlComponent.java | 4 +- .../flow/helper/view/XmlComponentVisitor.java | 18 ++- .../smartboot/flow/manager/FlatEngine.java | 71 +++++++++ .../smartboot/flow/manager/FlatManager.java | 46 +++++- .../smartboot/flow/manager/ManagerAction.java | 29 ---- .../flow/manager/ManagerConstants.java | 25 +++- .../flow/manager/UpdateContentTask.java | 85 +++++++++++ .../flow/manager/reload/XmlParseReloader.java | 5 - .../flow/manager/report/HttpReportModel.java | 8 +- .../flow/manager/report/HttpReporter.java | 64 +++++++- .../{ => trace}/ManagerExecutionListener.java | 13 +- .../flow/manager/{ => trace}/ManagerKeys.java | 2 +- .../manager/{ => trace}/TraceIdGenerator.java | 2 +- .../flow/manager/trace/TraceReporter.java | 139 ++++++++++++++++++ .../extension/BeanDefinitionVisitor.java | 1 + .../extension/SpringIdentifierManager.java | 6 +- 37 files changed, 613 insertions(+), 241 deletions(-) create mode 100644 smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java delete mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java rename smart-flow-manager/src/main/java/org/smartboot/flow/manager/{ => trace}/ManagerExecutionListener.java (66%) rename smart-flow-manager/src/main/java/org/smartboot/flow/manager/{ => trace}/ManagerKeys.java (89%) rename smart-flow-manager/src/main/java/org/smartboot/flow/manager/{ => trace}/TraceIdGenerator.java (93%) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java index f15a632..917f130 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java @@ -1,7 +1,5 @@ package org.smartboot.flow.core; -import org.smartboot.flow.core.util.AuxiliaryUtils; - import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -20,12 +18,12 @@ public class DefaultIdentifierManager implements IdentifierManager { private final AtomicInteger sequence = new AtomicInteger(0); @Override - public String generateIdentifier(String prefix) { - String identifier = AuxiliaryUtils.contact(prefix, sequence.getAndAdd(1)); + public String allocate(String prefix) { + String identifier = prefix + "-" + sequence.getAndAdd(1); // Ensure identifier is unique. while (identifiers.containsKey(identifier) || identifiers.put(identifier, 1) != null) { - identifier = AuxiliaryUtils.contact(prefix, sequence.getAndAdd(1)); + identifier = prefix + "-" + sequence.getAndAdd(1); } return identifier; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java index b51d4b7..c215ae7 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java @@ -5,6 +5,7 @@ import org.smartboot.flow.core.exception.DefaultExceptionHandler; import org.smartboot.flow.core.exception.ExceptionHandler; import org.smartboot.flow.core.invoker.Invoker; import org.smartboot.flow.core.manager.DefaultEngineManager; +import org.smartboot.flow.core.manager.EngineManager; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -171,6 +172,14 @@ public class FlowEngine implements Describable, Validator, Measurable { AssertUtil.notNull(pipeline, "engine[ " + name + " ]pipeline must not be null"); pipeline.validate(); validateCalled = true; - DefaultEngineManager.getDefaultManager().register(this); + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + defaultManager.detach(name); + defaultManager.register(this); + } + + @Override + public void reset() { + Measurable.super.reset(); + pipeline.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java index 4094b1b..1ceab3b 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java @@ -13,5 +13,5 @@ public interface IdentifierManager { * @param prefix prefix. * @return identifier. */ - String generateIdentifier(String prefix); + String allocate(String prefix); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java index 8f9ae29..c489a1b 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java @@ -118,4 +118,12 @@ public class Pipeline implements Rollback, Describable, Validator, M validateCalled = true; } + + @Override + public void reset() { + Measurable.super.reset(); + for (Component component : components) { + component.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java index 8a27998..f0f32ba 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java @@ -26,7 +26,7 @@ public enum ComponentType { /** * 子流程组件 */ - PIPELINE, + SUBPROCESS, /** * 适配器组件 diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java index c14e65e..07ddbf1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java @@ -106,4 +106,10 @@ public class AdapterComponent extends Component { public ComponentType getType() { return ComponentType.ADAPTER; } + + @Override + public void reset() { + super.reset(); + this.component.reset(); + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java index dd8734e..862af6d 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java @@ -151,4 +151,13 @@ public class ChooseComponent extends Component { public ComponentType getType() { return ComponentType.CHOOSE; } + + @Override + public void reset() { + super.reset(); + this.branches.forEach((k, v) -> v.reset()); + if (defaultBranch != null) { + defaultBranch.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java index f495930..89369f2 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java @@ -128,4 +128,13 @@ public class IfComponent extends Component{ public ComponentType getType() { return ComponentType.IF; } + + @Override + public void reset() { + super.reset(); + this.thenComponent.reset(); + if (elseComponent != null) { + elseComponent.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java index 990db74..d12f7ec 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java @@ -92,6 +92,12 @@ public class PipelineComponent extends Component { @Override public ComponentType getType() { - return ComponentType.PIPELINE; + return ComponentType.SUBPROCESS; + } + + @Override + public void reset() { + super.reset(); + this.pipeline.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java index d5de986..9f8dc90 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java @@ -5,7 +5,6 @@ import org.smartboot.flow.core.common.ComponentType; import org.smartboot.flow.core.common.Uniqueness; import org.smartboot.flow.core.attribute.AttributeHolder; import org.smartboot.flow.core.component.Component; -import org.smartboot.flow.core.metrics.Metrics; import java.util.HashMap; import java.util.List; @@ -20,129 +19,50 @@ import java.util.concurrent.ConcurrentHashMap; @SuppressWarnings("rawtypes") public class ComponentModel extends Uniqueness { - private final Map holders = new ConcurrentHashMap<>(); private Component component; - private String name; - private String describe; + private final String name; private final Map components = new ConcurrentHashMap<>(); - - String executable; - ComponentType type; + private final ComponentType type; PipelineModel pipeline; - String condition; - private String branch; - private Metrics metrics; - ComponentModel(ComponentType type, String identifier) { - this.identifier = identifier; + ComponentModel(ComponentType type, String name) { + this.name = name; this.type = type; - } - - public Map getHolders() { - return holders; - } - - public void addAttributes(List attributes) { - for (AttributeHolder holder : attributes) { - this.holders.put(holder.getAttribute().getName(), holder.getValue()); - } - } - - public String getExecutable() { - return executable; - } - - public ComponentType getType() { - return type; - } - - public PipelineModel getPipeline() { - return pipeline; - } - - public String getCondition() { - return condition; - } - - public String getBranch() { - return branch; - } - - public void setBranch(String branch) { - this.branch = branch; - } - - public Map getComponents() { - return new HashMap<>(components); + this.identifier = name; } Map collect() { - if (type == ComponentType.PIPELINE) { - Map collected = this.pipeline.collect(); - collected.put(this.identifier, this); - return collected; - } else if (type == ComponentType.BASIC) { - Map temp = new HashMap<>(4); - temp.put(this.identifier, this); - return temp; + this.component.setName(name); + if (type == ComponentType.SUBPROCESS) { + return pipeline.collect(); } else { - Map temp = new HashMap<>(8); - this.components.forEach((k, v) -> temp.putAll(v.collect())); - temp.put(this.identifier, this); - return temp; + return new HashMap<>(components); } } void addComponent(ComponentModel model) { - if (this.type == ComponentType.CHOOSE) { - this.components.put(model.getBranch(), model); - } else if (this.type == ComponentType.IF) { - String key = this.components.size() > 0 ? "else" : "then"; - this.components.put(key, model); - } else { - this.components.put(model.getIdentifier(), model); - } - } - - public String getName() { - return name; - } - - public String getDescribe() { - return describe; + this.components.put(model.getIdentifier(), model); } @SuppressWarnings("unchecked") public void changeAttributes(List holders) { - Map snapshot = new HashMap<>(this.holders); AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); - try { holders.forEach(p -> { Object resolvedValue = valueResolver.resolve(p.getAttribute(), p.getValue()); p.getAttribute().apply(component, resolvedValue); }); - addAttributes(holders); - } catch (Exception e) { - this.holders.clear(); - this.holders.putAll(snapshot); + } catch (Exception ignored) { + } } - public Metrics getMetrics() { - return metrics; + public void setComponent(Component component) { + this.component = component; } public void reset() { - this.metrics.reset(); - components.forEach((k, v) -> v.reset()); - } - - public void setComponent(Component component) { - this.component = component; - this.name = component.getName(); - this.describe = component.describe(); - this.metrics = component.getMetrics(); + this.component.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java index 0e03077..9b6d578 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java @@ -38,7 +38,6 @@ public class DefaultEngineManager implements EngineManager { if (registeredEngines.get(engine.getName()) != null) { LOGGER.warn("engine {} already registered", engine.getName()); - return; } // Ensure engine and components is valid diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java index ec2cd54..26a6ca0 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java @@ -3,13 +3,14 @@ package org.smartboot.flow.core.manager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.common.Uniqueness; import org.smartboot.flow.core.attribute.AttributeHolder; -import org.smartboot.flow.core.metrics.Metrics; +import org.smartboot.flow.core.common.Uniqueness; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** @@ -24,7 +25,10 @@ public class EngineModel extends Uniqueness { private PipelineModel pipeline; private transient final Map components = new ConcurrentHashMap<>(); - private Metrics metrics; + /** + * All flat components in engine, include pipeline and engine. + */ + private transient final List flatComponents = new ArrayList<>(); private transient FlowEngine source; public EngineModel(String name) { @@ -71,19 +75,6 @@ public class EngineModel extends Uniqueness { this.components.putAll(this.pipeline.collect()); } - public Metrics getMetrics() { - return metrics; - } - - public void setMetrics(Metrics metrics) { - this.metrics = metrics; - } - - public void reset() { - this.metrics.reset(); - this.pipeline.reset(); - } - public void reset(String identifier) { ComponentModel model = components.get(identifier); if (model == null) { @@ -93,4 +84,16 @@ public class EngineModel extends Uniqueness { model.reset(); } + + public void reset() { + this.source.reset(); + } + + void init(Set visited) { + this.flatComponents.addAll(visited); + } + + public List getAllComponents() { + return new ArrayList<>(flatComponents); + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java new file mode 100644 index 0000000..5d543c7 --- /dev/null +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java @@ -0,0 +1,20 @@ +package org.smartboot.flow.core.manager; + +import org.smartboot.flow.core.IdentifierManager; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.0 + */ +public class IdentifierAllocator implements IdentifierManager { + + private final AtomicInteger sequence = new AtomicInteger(0); + + @Override + public String allocate(String prefix) { + return "anonymous-" + prefix + sequence.addAndGet(1); + } +} diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java index 0c03cf7..bcac717 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java @@ -18,7 +18,6 @@ public class PipelineModel extends Uniqueness { private final List components = new ArrayList<>(); private final String name; - private Metrics metrics; PipelineModel(String name, String identifier) { this.name = name; @@ -39,23 +38,13 @@ public class PipelineModel extends Uniqueness { Map collect() { HashMap collected = new HashMap<>(components.size()); + for (ComponentModel model : components) { collected.putAll(model.collect()); + collected.put(model.getIdentifier(), model); } return collected; } - public Metrics getMetrics() { - return metrics; - } - - public void setMetrics(Metrics metrics) { - this.metrics = metrics; - } - - public void reset() { - this.metrics.reset(); - components.forEach(ComponentModel::reset); - } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java index a69ccc7..81c933f 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java @@ -1,7 +1,6 @@ package org.smartboot.flow.core.manager; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -18,6 +17,7 @@ public class RegisterEngineVisitor extends EngineVisitor { private EngineModel model; private final Set visited = new HashSet<>(32); + private final IdentifierAllocator allocator = new IdentifierAllocator(); @Override public void visit(String name, Executor executor) { @@ -27,19 +27,20 @@ public class RegisterEngineVisitor extends EngineVisitor { @Override public void visitSource(FlowEngine flowEngine) { visited.add(flowEngine); - this.model.setMetrics(flowEngine.getMetrics()); this.model.setSource(flowEngine); } @Override public PipelineVisitor visitPipeline(String pipeline) { - PipelineModel pipelineModel = new PipelineModel(pipeline, AuxiliaryUtils.contact(this.model.getIdentifier(), pipeline)); + PipelineModel pipelineModel = new PipelineModel(pipeline, pipeline); this.model.setPipeline(pipelineModel); - return new RegisteredPipelineVisitor(pipelineModel, visited); + return new RegisteredPipelineVisitor(pipelineModel, visited, allocator); } @Override public void visitEnd() { + this.model.init(visited); + this.model.collect(); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java index d664ac4..63c4172 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java @@ -1,14 +1,12 @@ package org.smartboot.flow.core.manager; import org.smartboot.flow.core.common.ComponentType; -import org.smartboot.flow.core.attribute.AttributeHolder; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; -import java.util.List; import java.util.Set; /** @@ -20,60 +18,58 @@ public class RegisteredComponentVisitor extends ComponentVisitor { private final ComponentModel model; private final Set visited; + private final IdentifierAllocator allocator; - public RegisteredComponentVisitor(ComponentModel comp, Set visited) { + public RegisteredComponentVisitor(ComponentModel comp, Set visited, IdentifierAllocator allocator) { this.model = comp; this.visited = visited; + this.allocator = allocator; } @Override public PipelineVisitor visitPipeline(String pipeline) { - PipelineModel pipelineModel = new PipelineModel(pipeline, AuxiliaryUtils.contact(model.getIdentifier(), pipeline)); + // Re-allocate name. + if (pipeline == null || AuxiliaryUtils.isAnonymous(pipeline)) { + pipeline = allocator.allocate("pipeline"); + } + + PipelineModel pipelineModel = new PipelineModel(pipeline, pipeline); this.model.pipeline = pipelineModel; - return new RegisteredPipelineVisitor(pipelineModel, visited); + return new RegisteredPipelineVisitor(pipelineModel, visited, allocator); } @Override public void visitSource(Component component) { + this.visited.add(component); this.model.setComponent(component); } @Override public ConditionVisitor visitCondition(String condition) { - this.model.condition = (condition); return null; } @Override public ComponentVisitor visitComponent(ComponentType type, String name, String describe) { - String identifier = AuxiliaryUtils.contact(model.getIdentifier(), AuxiliaryUtils.or(name, describe)); - String branch = null; - if (this.model.type == ComponentType.CHOOSE) { - identifier = AuxiliaryUtils.contact(model.getIdentifier(), "default"); - branch = "default"; + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); } - ComponentModel comp = new ComponentModel(type, identifier); - comp.setBranch(branch); + ComponentModel comp = new ComponentModel(type, name); this.model.addComponent(comp); - return new RegisteredComponentVisitor(comp, visited); - } - - @Override - public void visitAttributes(List attributes) { - model.addAttributes(attributes); + return new RegisteredComponentVisitor(comp, visited, allocator); } @Override public ComponentVisitor visitBranch(Object branch, ComponentType type, String name, String describe) { - ComponentModel model = new ComponentModel(type, AuxiliaryUtils.contact(this.model.getIdentifier(), "branch", String.valueOf(branch))); - model.setBranch((String.valueOf(branch))); - this.model.addComponent(model); - return new RegisteredComponentVisitor(model, visited); - } + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); + } - @Override - public void visitExecutable(String executable) { - this.model.executable = (executable); + ComponentModel model = new ComponentModel(type, name); + this.model.addComponent(model); + return new RegisteredComponentVisitor(model, visited, allocator); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java index 6572eff..c2078ee 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java @@ -18,16 +18,17 @@ public class RegisteredPipelineVisitor extends PipelineVisitor { private final PipelineModel pipelineModel; private final Set visited; private boolean isCycle; + private final IdentifierAllocator allocator; - public RegisteredPipelineVisitor(PipelineModel pipelineModel, Set visited) { + public RegisteredPipelineVisitor(PipelineModel pipelineModel, Set visited, IdentifierAllocator allocator) { this.pipelineModel = pipelineModel; this.visited = visited; + this.allocator = allocator; } @Override public void visitSource(Pipeline pipeline) { this.isCycle = !this.visited.add(pipeline); - pipelineModel.setMetrics(pipeline.getMetrics()); } @Override @@ -37,8 +38,13 @@ public class RegisteredPipelineVisitor extends PipelineVisitor { return null; } - ComponentModel comp = new ComponentModel(type, AuxiliaryUtils.contact(this.pipelineModel.getIdentifier(), AuxiliaryUtils.or(name, describe))); + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); + } + + ComponentModel comp = new ComponentModel(type, name); this.pipelineModel.addComponent(comp); - return new RegisteredComponentVisitor(comp, visited); + return new RegisteredComponentVisitor(comp, visited, allocator); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java index 32817db..6589e2a 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java @@ -7,6 +7,8 @@ package org.smartboot.flow.core.metrics; */ public class DefaultMetricsCreator implements MetricsCreator { + public static final MetricsCreator INSTANCE = new DefaultMetricsCreator(); + @Override public Metrics create(Object key) { return new Metrics(); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java index afe995e..cb134a2 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java @@ -13,7 +13,7 @@ import java.util.concurrent.ConcurrentHashMap; public class MetricsManager { private static final Map MANAGED = new ConcurrentHashMap<>(); - private static MetricsCreator metricsCreator = new DefaultMetricsCreator(); + private static MetricsCreator metricsCreator = DefaultMetricsCreator.INSTANCE; public static MetricsCreator getMetricsCreator() { return metricsCreator; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java index 6c219e4..6dc1592 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java @@ -78,14 +78,14 @@ public class ParserContext { String elementName = ElementUtils.getName(element); if (identifier == null) { - identifier = identifierManager.generateIdentifier(elementName); + identifier = identifierManager.allocate(elementName); this.generatedIdentifiers.put(element, identifier); } return identifier; } public String allocateIdentifier(String prefix) { - return identifierManager.generateIdentifier(prefix); + return identifierManager.allocate(prefix); } /** diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java index 8ba3a4b..411dbed 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java @@ -46,14 +46,7 @@ public final class AuxiliaryUtils { } } - public static String contact(String p, Object ...s) { - StringBuilder sb = new StringBuilder(); - sb.append(p); - - for (Object suffix : s) { - sb.append("-").append(suffix); - } - - return sb.toString(); + public static boolean isAnonymous(String name) { + return name != null && name.contains("anonymous"); } } diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java index 31a7495..eddd0b1 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java @@ -124,7 +124,7 @@ public class PlantumlComponent extends ComponentVisitor { content.append("endswitch\n"); - } else if (type == ComponentType.PIPELINE) { + } else if (type == ComponentType.SUBPROCESS) { if (isAsync()) { content.append("-[dashed]->异步;\n"); } @@ -215,7 +215,7 @@ public class PlantumlComponent extends ComponentVisitor { }); } - if (this.type == ComponentType.PIPELINE) { + if (this.type == ComponentType.SUBPROCESS) { this.pipeline.eraser(); } else if (this.type != ComponentType.BASIC) { this.components.forEach(p -> p.eraser(false)); diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java index 9d1d4af..1008b8a 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java @@ -1,6 +1,7 @@ package org.smartboot.flow.helper.view; import org.smartboot.flow.core.attribute.AttributeHolder; +import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.common.ComponentType; import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; @@ -30,10 +31,12 @@ public class XmlComponentVisitor extends ComponentVisitor { private final Set visited; private String executable; private String script; + private final String name; public XmlComponentVisitor(ComponentType type, String name, String describe, Set visited) { this.type = type; this.visited = visited; + this.name = name; } @Override @@ -80,7 +83,9 @@ public class XmlComponentVisitor extends ComponentVisitor { } public void generate(StringBuilder content, int numbersOfTab) { - ComponentType type = this.type; + if (name != null && !AuxiliaryUtils.isAnonymous(name)) { + addAttributeName(); + } if (script != null) { ScriptCollector.collect(condition, script); @@ -136,7 +141,7 @@ public class XmlComponentVisitor extends ComponentVisitor { AuxiliaryUtils.appendTab(content, numbersOfTab); content.append("\n"); - } else if (type == ComponentType.PIPELINE) { + } else if (type == ComponentType.SUBPROCESS) { if (pipeline.isCycle()) { AuxiliaryUtils.appendTab(content, numbersOfTab); content.append(" p.getAttribute() == Attributes.NAME).findFirst().orElse(null); + if (ab == null) { + attributes.add(AttributeHolder.of(Attributes.NAME, name)); + } + + } + private class XmlConditionVisitor extends ConditionVisitor { @Override diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java new file mode 100644 index 0000000..95c5f0a --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java @@ -0,0 +1,71 @@ +package org.smartboot.flow.manager; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.7 + */ +public class FlatEngine { + + /** + * Md5 string + */ + private String md5; + + /** + * xml content. + */ + private String content; + + /** + * engine created stamp. + */ + private long timestamp; + + /** + * engine name. + */ + private String name; + + private volatile boolean reportContent; + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean getReportContent() { + return reportContent; + } + + public void setReportContent(boolean reportContent) { + this.reportContent = reportContent; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java index 8e361f5..fd9ba0f 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java @@ -1,5 +1,14 @@ package org.smartboot.flow.manager; +import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.helper.view.XmlEngineVisitor; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Base64; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * Flat engine manager. * @@ -10,8 +19,43 @@ package org.smartboot.flow.manager; public class FlatManager { private static final FlatManager INSTANCE = new FlatManager(); + private final Map flatEngineMap = new ConcurrentHashMap<>(8); - public static FlatManager get() { + public static FlatManager getInstance() { return INSTANCE; } + + public FlatEngine getFlatEngine(FlowEngine source) { + FlatEngine flatEngine = flatEngineMap.get(source.getName()); + if (flatEngine == null || flatEngine.getTimestamp() != source.getStartedAt()) { + flatEngine = createFlatEngine(source); + flatEngineMap.put(source.getName(), flatEngine); + } + + return flatEngine; + } + + private FlatEngine createFlatEngine(FlowEngine source) { + FlatEngine engine = new FlatEngine(); + engine.setTimestamp(source.getStartedAt()); + engine.setName(source.getName()); + engine.setReportContent(true); + + XmlEngineVisitor visitor = new XmlEngineVisitor(); + visitor.visit(source); + String content = visitor.getContent(); + engine.setContent(content); + engine.setMd5(encryptMd5(content)); + return engine; + } + + private static String encryptMd5(String content) { + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + byte[] md5Bytes = md5.digest(content.getBytes(StandardCharsets.UTF_8)); + return new String(Base64.getEncoder().encode(md5Bytes), StandardCharsets.UTF_8); + } catch (Exception e) { + return null; + } + } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java deleted file mode 100644 index a701315..0000000 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerAction.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.smartboot.flow.manager; - -/** - * @author qinluo - * @date 2023/1/30 22:43 - * @since 1.0.7 - */ -public interface ManagerAction { - - /** - * 快照查询,决定是否需要上报引擎结构 - */ - String SNAPSHOT_QUERY = "/api/report/query"; - - /** - * 上报统计数据 - */ - String REPORT_METRICS = "/api/report/metrics"; - - /** - * 上报执行链路数据 - */ - String REPORT_TRACE = "/api/report/trace"; - - /** - * 拉取待执行的commands. - */ - String MANAGER_COMMAND = "/api/manager/commands"; -} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java index 7bed422..59801cb 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java @@ -2,11 +2,32 @@ package org.smartboot.flow.manager; /** * @author qinluo - * @date 2023/2/1 21:56 - * @since 1.0.0 + * @date 2023/1/30 22:43 + * @since 1.0.7 */ public interface ManagerConstants { + /** + * 快照查询,决定是否需要上报引擎结构 + */ + String SNAPSHOT_QUERY = "/api/report/query"; + String SNAPSHOT_QUERY_PARAM = "engineMd5"; + + /** + * 上报统计数据 + */ + String REPORT_METRICS = "/api/report/metrics"; + + /** + * 上报执行链路数据 + */ + String REPORT_TRACE = "/api/report/trace"; + + /** + * 拉取待执行的commands. + */ + String MANAGER_COMMAND = "/api/manager/commands"; + /** * Http success code. */ diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java new file mode 100644 index 0000000..991cd17 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java @@ -0,0 +1,85 @@ +package org.smartboot.flow.manager; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.smartboot.flow.core.manager.DefaultEngineManager; +import org.smartboot.flow.core.manager.EngineManager; +import org.smartboot.flow.core.manager.EngineModel; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.http.client.HttpClient; +import org.smartboot.http.client.HttpGet; + +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.7 + */ +public class UpdateContentTask extends Thread { + + private static volatile boolean started; + private static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("query-thread")); + + private final String host; + private final int port; + + public UpdateContentTask(String host, int port) { + this.host = host; + this.port = port; + } + + public synchronized static void startTask(String host, int port) { + if (started) { + return; + } + + started = true; + executorService.schedule(new UpdateContentTask(host, port), 5, TimeUnit.SECONDS); + } + + @Override + public void run() { + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + List allEngines = defaultManager.getRegisteredEngineNames(); + StringBuilder sb = new StringBuilder(); + for (String name : allEngines) { + EngineModel model = defaultManager.getEngineModel(name); + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(model.getSource()); + if (flatEngine.getReportContent()) { + sb.append(flatEngine.getName()).append("-") + .append(flatEngine.getMd5()).append(","); + } + } + + String value = sb.toString(); + if (AuxiliaryUtils.isBlank(value)) { + return; + } + + HttpClient httpClient = new HttpClient(host, port); + httpClient.timeout(5000); + httpClient.connect(); + HttpGet httpGet = httpClient.get(ManagerConstants.SNAPSHOT_QUERY); + httpGet.addQueryParam(ManagerConstants.SNAPSHOT_QUERY_PARAM, value); + httpGet.onSuccess(response -> { + JSONObject data = JSONObject.parseObject(response.body()); + Boolean success = data.getBoolean("success"); + if (!success) { + return; + } + + List engineNames = JSONArray.parseArray(data.getString("data"), String.class); + engineNames.forEach(p -> { + EngineModel model = defaultManager.getEngineModel(p); + FlatManager.getInstance().getFlatEngine(model.getSource()).setReportContent(false); + }); + }).onFailure(e -> { + + }).send(); + + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java index a4721f9..fc25f9f 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java @@ -3,8 +3,6 @@ package org.smartboot.flow.manager.reload; import org.smartboot.flow.core.FlowEngine; import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.exception.FlowException; -import org.smartboot.flow.core.manager.DefaultEngineManager; -import org.smartboot.flow.core.manager.EngineManager; import org.smartboot.flow.core.parser.DefaultObjectCreator; import org.smartboot.flow.core.parser.DefaultParser; import org.smartboot.flow.core.parser.DefinitionVisitor; @@ -64,15 +62,12 @@ public class XmlParseReloader extends AbstractReloader { // parse parser.parse(stream); - EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); - // if assemble if (assemble) { List engineNames = parser.getEngineNames(); engineNames.forEach(p -> { FlowEngine engine = parser.getEngine(p); if (engine != null) { - defaultManager.detach(p); engine.validate(); } }); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java index f375af3..a9bef5c 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java @@ -1,7 +1,5 @@ package org.smartboot.flow.manager.report; -import com.alibaba.fastjson.JSONObject; - import java.io.Serializable; /** @@ -18,7 +16,7 @@ public class HttpReportModel implements Serializable { private String engineName; private String md5; private String content; - private JSONObject json; + private Serializable json; public long getTimestamp() { return timestamp; @@ -68,11 +66,11 @@ public class HttpReportModel implements Serializable { this.content = content; } - public JSONObject getJson() { + public Serializable getJson() { return json; } - public void setJson(JSONObject json) { + public void setJson(Serializable json) { this.json = json; } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java index 20e9906..4820b3b 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java @@ -1,19 +1,36 @@ package org.smartboot.flow.manager.report; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.ExecutionListenerRegistry; +import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.core.Measurable; +import org.smartboot.flow.core.Pipeline; +import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.manager.EngineModel; +import org.smartboot.flow.core.metrics.DefaultMetricsCreator; +import org.smartboot.flow.core.metrics.MetricsCreator; +import org.smartboot.flow.core.metrics.MetricsManager; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.flow.manager.FlatEngine; +import org.smartboot.flow.manager.FlatManager; import org.smartboot.flow.manager.HostUtils; -import org.smartboot.flow.manager.ManagerAction; +import org.smartboot.flow.manager.ManagerConstants; +import org.smartboot.flow.manager.UpdateContentTask; +import org.smartboot.flow.manager.metric.DefaultMetrics; +import org.smartboot.flow.manager.metric.MetricExecutionListener; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.Map; /** @@ -50,17 +67,25 @@ public class HttpReporter extends AbstractReporter { this.host = parsedUrl.getHost(); this.port = parsedUrl.getPort(); + // Register creator and listener. + MetricsCreator metricsCreator = MetricsManager.getMetricsCreator(); + if (metricsCreator == DefaultMetricsCreator.INSTANCE) { + MetricsManager.setMetricsCreator(k -> new DefaultMetrics()); + ExecutionListenerRegistry.register(MetricExecutionListener.getInstance()); + } + super.start(); } @Override public void doExport(EngineModel model) { AssertUtil.notNull(host, "address is invalid."); + UpdateContentTask.startTask(host, port); HttpClient httpClient = new HttpClient(host, port); httpClient.timeout((int)timeout); httpClient.connect(); - HttpPost post = httpClient.post(ManagerAction.REPORT_METRICS); + HttpPost post = httpClient.post(ManagerConstants.REPORT_METRICS); if (headers != null) { headers.forEach(post::addHeader); @@ -72,11 +97,36 @@ public class HttpReporter extends AbstractReporter { reportModel.setTimestamp(System.currentTimeMillis()); reportModel.setEngineName(model.getIdentifier()); - // TODO 获取上报的数据 - //reportModel.setJson(model); - //reportModel.setMd5(model); - // TODO 获取engine的内容以及md5字符串 - //reportModel.setContent(model); + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(model.getSource()); + reportModel.setMd5(flatEngine.getMd5()); + + if (AuxiliaryUtils.isBlank(flatEngine.getMd5()) || flatEngine.getReportContent()) { + reportModel.setContent(flatEngine.getContent()); + } + + List allComponents = model.getAllComponents(); + JSONArray array = new JSONArray(); + for (Object com : allComponents) { + Measurable measurable = (Measurable)com; + + JSONObject item = new JSONObject(); + item.put("metrics", measurable.getMetrics()); + + if (com instanceof Component) { + item.put("name", ((Component) com).getName()); + item.put("type", ((Component) com).getType()); + } else if (com instanceof Pipeline) { + item.put("name", ((Pipeline) com).describe()); + item.put("type", "pipeline"); + } else { + item.put("name", ((FlowEngine) com).getName()); + item.put("type", "engine"); + } + + array.add(item); + } + reportModel.setJson(array); + String json = JSON.toJSONString(reportModel, SerializerFeature.WriteEnumUsingToString); byte[] bytes = json.getBytes(StandardCharsets.UTF_8); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java similarity index 66% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index eb496b4..6183a66 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -1,17 +1,25 @@ -package org.smartboot.flow.manager; +package org.smartboot.flow.manager.trace; import org.smartboot.flow.core.EngineContext; +import org.smartboot.flow.core.ExecutionListener; import org.smartboot.flow.core.ExecutionListenerSupport; +import org.smartboot.flow.manager.metric.MetricExecutionListener; /** * 由管理模块进行Listener的注册 * * @author qinluo * @date 2023/1/30 22:42 - * @since 1.0.0 + * @since 1.0.7 */ public class ManagerExecutionListener extends ExecutionListenerSupport { + private final TraceReporter traceReporter; + + ManagerExecutionListener(TraceReporter traceReporter) { + this.traceReporter = traceReporter; + } + @Override public void start(EngineContext context) { TraceIdGenerator generator = TraceIdGenerator.getTraceIdGenerator(); @@ -27,5 +35,6 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { @Override public void completed(EngineContext context) { // 将执行采集到的数据进行上报 + traceReporter.submit(context.getExt(ManagerKeys.TRACES)); } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java similarity index 89% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java index c36e689..b73d718 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.manager; +package org.smartboot.flow.manager.trace; import org.smartboot.flow.core.Key; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java similarity index 93% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java index 054e1d5..a6ab8b1 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.manager; +package org.smartboot.flow.manager.trace; import org.smartboot.flow.core.EngineContext; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java new file mode 100644 index 0000000..338cd9b --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -0,0 +1,139 @@ +package org.smartboot.flow.manager.trace; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.ExecutionListenerRegistry; +import org.smartboot.flow.core.manager.DefaultEngineManager; +import org.smartboot.flow.core.manager.EngineManager; +import org.smartboot.flow.core.manager.EngineModel; +import org.smartboot.flow.core.metrics.DefaultMetricsCreator; +import org.smartboot.flow.core.metrics.MetricsCreator; +import org.smartboot.flow.core.metrics.MetricsManager; +import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.manager.NamedThreadFactory; +import org.smartboot.flow.manager.metric.DefaultMetrics; +import org.smartboot.flow.manager.metric.MetricExecutionListener; +import org.smartboot.flow.manager.report.AbstractReporter; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingDeque; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.0 + */ +public class TraceReporter { + + private static final Logger LOGGER = LoggerFactory.getLogger(TraceReporter.class); + private final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("export-thread")); + + /** + * Report idle in mills. + */ + protected long idle = 5000L; + + /** + * 服务端地址 + */ + private String serverAddress; + + /** + * 超时时间 + */ + private long timeout; + private String host; + private int port; + + private Map headers; + private BlockingQueue traceQueue = new ArrayBlockingQueue<>(20000); + + public long getIdle() { + return idle; + } + + public void setIdle(long idle) { + AssertUtil.isTrue(idle > 0, "idle must great than zero"); + this.idle = idle; + } + + public void export() { + List traces = new ArrayList<>(); + if (traceQueue.drainTo(traces) < 0) { + return; + } + + for (Object trace : traces) { + + + } + } + + public void start() { + URL parsedUrl; + try { + parsedUrl = new URL(serverAddress); + } catch (Exception e) { + throw new IllegalStateException("invalid url " + serverAddress, e); + } + this.host = parsedUrl.getHost(); + this.port = parsedUrl.getPort(); + + // Register listener. + ExecutionListenerRegistry.register(new ManagerExecutionListener(this)); + this.executorService.schedule(this::export, idle, TimeUnit.MILLISECONDS); + } + + public void submit(Object item) { + traceQueue.offer(item); + } + + public String getServerAddress() { + return serverAddress; + } + + public void setServerAddress(String serverAddress) { + this.serverAddress = serverAddress; + } + + public long getTimeout() { + return timeout; + } + + public void setTimeout(long timeout) { + this.timeout = timeout; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } +} diff --git a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java index 27a13bc..c1345b8 100644 --- a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java @@ -104,6 +104,7 @@ public class BeanDefinitionVisitor implements DefinitionVisitor, BeanFactoryAwar definition.setBeanClass(ed.resolveType()); definition.getPropertyValues().addPropertyValue(name); definition.getPropertyValues().addPropertyValue(pipeline); + definition.setInitMethodName("validate"); register.registerBeanDefinition(ed.getIdentifier(), definition, true); } diff --git a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java index 5a50639..086d029 100644 --- a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java @@ -20,10 +20,10 @@ public class SpringIdentifierManager implements IdentifierManager { private final IdentifierManager identifierManager = new DefaultIdentifierManager(); @Override - public String generateIdentifier(String prefix) { - String identifier = identifierManager.generateIdentifier(prefix); + public String allocate(String prefix) { + String identifier = identifierManager.allocate(prefix); while (registry.containsBeanDefinition(identifier)) { - identifier = identifierManager.generateIdentifier(prefix); + identifier = identifierManager.allocate(prefix); } return identifier; -- Gitee From 2a3ae4745356a7332447e0648443f971863f3603 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Wed, 8 Feb 2023 01:14:17 +0800 Subject: [PATCH 18/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E6=95=B0=E6=8D=AE=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/manager/report/HttpReporter.java | 3 +- .../flow/manager/trace/ComponentData.java | 9 +++ .../trace/ManagerExecutionListener.java | 55 ++++++++++++++-- .../flow/manager/trace/ManagerKeys.java | 2 +- .../flow/manager/trace/TraceData.java | 48 ++++++++++++++ .../flow/manager/trace/TraceReporter.java | 63 +++++++++++++++++-- .../manager/trace/TraceSampleStrategy.java | 27 ++++++++ 7 files changed, 194 insertions(+), 13 deletions(-) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java index 4820b3b..ce78de1 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java @@ -16,7 +16,6 @@ import org.smartboot.flow.core.metrics.DefaultMetricsCreator; import org.smartboot.flow.core.metrics.MetricsCreator; import org.smartboot.flow.core.metrics.MetricsManager; import org.smartboot.flow.core.util.AssertUtil; -import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.manager.FlatEngine; import org.smartboot.flow.manager.FlatManager; import org.smartboot.flow.manager.HostUtils; @@ -100,7 +99,7 @@ public class HttpReporter extends AbstractReporter { FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(model.getSource()); reportModel.setMd5(flatEngine.getMd5()); - if (AuxiliaryUtils.isBlank(flatEngine.getMd5()) || flatEngine.getReportContent()) { + if (flatEngine.getReportContent()) { reportModel.setContent(flatEngine.getContent()); } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java new file mode 100644 index 0000000..2ab2452 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java @@ -0,0 +1,9 @@ +package org.smartboot.flow.manager.trace; + +/** + * @author qinluo + * @date 2023/2/8 1:04 + * @since 1.0.7 + */ +public class ComponentData { +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index 6183a66..4375a1b 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -15,6 +15,7 @@ import org.smartboot.flow.manager.metric.MetricExecutionListener; public class ManagerExecutionListener extends ExecutionListenerSupport { private final TraceReporter traceReporter; + private TraceSampleStrategy sampleStrategy; ManagerExecutionListener(TraceReporter traceReporter) { this.traceReporter = traceReporter; @@ -23,18 +24,62 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { @Override public void start(EngineContext context) { TraceIdGenerator generator = TraceIdGenerator.getTraceIdGenerator(); - if (generator != null) { - context.putExt(ManagerKeys.TRACE_ID, generator.getTraceId(context)); + if (generator == null) { + return; } + // init trace. + TraceData trace = new TraceData(); + trace.setEngineName(context.getEngineName()); + trace.setTraceId(generator.getTraceId(context)); + // 暂时init个object - context.putExt(ManagerKeys.TRACES, new Object()); + context.putExt(ManagerKeys.TRACES, trace); + + } + + @Override + public void beforeExecute(EngineContext context, Object object) { + TraceData trace = context.getExt(ManagerKeys.TRACES); + if (trace == null) { + return; + } + } + + @Override + public void afterExecute(EngineContext context, Object object) { + TraceData trace = context.getExt(ManagerKeys.TRACES); + if (trace == null) { + return; + } + } + + @Override + public void beforeRollback(EngineContext context, Object object) { + TraceData trace = context.getExt(ManagerKeys.TRACES); + if (trace == null) { + return; + } + } + @Override + public void afterRollback(EngineContext context, Object object) { + TraceData trace = context.getExt(ManagerKeys.TRACES); + if (trace == null) { + return; + } } @Override public void completed(EngineContext context) { - // 将执行采集到的数据进行上报 - traceReporter.submit(context.getExt(ManagerKeys.TRACES)); + TraceData trace = context.getExt(ManagerKeys.TRACES); + if (trace == null) { + return; + } + + if (sampleStrategy == null || sampleStrategy.sampled(context)) { + // 将执行采集到的数据进行上报 + traceReporter.submit(trace); + } } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java index b73d718..8374fa9 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java @@ -18,7 +18,7 @@ public interface ManagerKeys { * Invoke trace in engine invoking. * */ - Key TRACES = Key.of("traces"); + Key TRACES = Key.of("traces"); } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java new file mode 100644 index 0000000..b4d806f --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java @@ -0,0 +1,48 @@ +package org.smartboot.flow.manager.trace; + +import java.util.Map; + +/** + * @author qinluo + * @date 2023/2/8 1:00 + * @since 1.0.7 + */ +public class TraceData { + + private String engineName; + private String traceId; + private Throwable ex; + private Map componentTraceData; + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } + + public Throwable getEx() { + return ex; + } + + public void setEx(Throwable ex) { + this.ex = ex; + } + + public Map getComponentTraceData() { + return componentTraceData; + } + + public void setComponentTraceData(Map componentTraceData) { + this.componentTraceData = componentTraceData; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java index 338cd9b..d591c76 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -1,5 +1,7 @@ package org.smartboot.flow.manager.trace; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.ExecutionListenerRegistry; @@ -10,12 +12,23 @@ import org.smartboot.flow.core.metrics.DefaultMetricsCreator; import org.smartboot.flow.core.metrics.MetricsCreator; import org.smartboot.flow.core.metrics.MetricsManager; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.flow.manager.FlatEngine; +import org.smartboot.flow.manager.FlatManager; +import org.smartboot.flow.manager.HostUtils; +import org.smartboot.flow.manager.ManagerConstants; import org.smartboot.flow.manager.NamedThreadFactory; +import org.smartboot.flow.manager.UpdateContentTask; import org.smartboot.flow.manager.metric.DefaultMetrics; import org.smartboot.flow.manager.metric.MetricExecutionListener; import org.smartboot.flow.manager.report.AbstractReporter; +import org.smartboot.flow.manager.report.HttpReportModel; +import org.smartboot.http.client.HttpClient; +import org.smartboot.http.client.HttpPost; +import org.smartboot.http.common.enums.HeaderNameEnum; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,7 +43,7 @@ import java.util.concurrent.TimeUnit; /** * @author qinluo * @date 2023-02-07 - * @since 1.0.0 + * @since 1.0.7 */ public class TraceReporter { @@ -55,7 +68,7 @@ public class TraceReporter { private int port; private Map headers; - private BlockingQueue traceQueue = new ArrayBlockingQueue<>(20000); + private final BlockingQueue traceQueue = new ArrayBlockingQueue<>(20000); public long getIdle() { return idle; @@ -67,13 +80,52 @@ public class TraceReporter { } public void export() { - List traces = new ArrayList<>(); + UpdateContentTask.startTask(host, port); + List traces = new ArrayList<>(); if (traceQueue.drainTo(traces) < 0) { return; } - for (Object trace : traces) { + HttpClient httpClient = new HttpClient(host, port); + httpClient.timeout((int)timeout); + httpClient.connect(); + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + for (TraceData trace : traces) { + HttpPost post = httpClient.post(ManagerConstants.REPORT_TRACE); + + if (headers != null) { + headers.forEach(post::addHeader); + } + + HttpReportModel reportModel = new HttpReportModel(); + reportModel.setAddress(HostUtils.getHostIp()); + reportModel.setHost(HostUtils.getHostName()); + reportModel.setTimestamp(System.currentTimeMillis()); + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(defaultManager.getEngineModel(trace.getEngineName()).getSource()); + reportModel.setMd5(flatEngine.getMd5()); + + if (flatEngine.getReportContent()) { + reportModel.setContent(flatEngine.getContent()); + } + + String json = JSON.toJSONString(reportModel, SerializerFeature.WriteEnumUsingToString); + byte[] bytes = json.getBytes(StandardCharsets.UTF_8); + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("report trace data, engine = {}, data = {}", trace.getEngineName(), JSON.toJSONString(reportModel)); + } + + post.addHeader(HeaderNameEnum.CONTENT_TYPE.getName(), "application/json;charset=UTF-8"); + post.addHeader(HeaderNameEnum.CONTENT_LENGTH.getName(), String.valueOf(bytes.length)); + + // Use body stream write. + post.bodyStream().write(bytes, 0, bytes.length); + post.bodyStream().flush(); + post.onSuccess(httpResponse -> {}) + .onFailure(throwable -> {}); + + post.send(); } } @@ -93,7 +145,8 @@ public class TraceReporter { this.executorService.schedule(this::export, idle, TimeUnit.MILLISECONDS); } - public void submit(Object item) { + public void submit(TraceData item) { + //noinspection ResultOfMethodCallIgnored traceQueue.offer(item); } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java new file mode 100644 index 0000000..9c87d04 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java @@ -0,0 +1,27 @@ +package org.smartboot.flow.manager.trace; + +import org.smartboot.flow.core.EngineContext; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author qinluo + * @date 2023/2/8 1:09 + * @since 1.0.0 + */ +public class TraceSampleStrategy { + + private double radio; + + public double getRadio() { + return radio; + } + + public void setRadio(double radio) { + this.radio = radio; + } + + public boolean sampled(EngineContext ctx) { + return ThreadLocalRandom.current().nextDouble(1) < radio; + } +} -- Gitee From e77672e6a07b918bbeeec271f724a26cc2b8dcd0 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Thu, 9 Feb 2023 00:33:11 +0800 Subject: [PATCH 19/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=90=8E=E5=8F=B0=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/api/module/api.ts | 16 +++ .../SmartFlowConfiguration.java | 2 +- .../admin/controller/EnginesController.java | 3 - .../admin/controller/ReportController.java | 109 +++++++++++++++++- .../flow/admin/mapper/EngineMetricMapper.java | 31 +++++ .../flow/admin/mapper/EngineTraceMapper.java | 31 +++++ .../smart/flow/admin/model/EngineMetrics.java | 96 +++++++++++++++ .../flow/admin/model/EngineSnapshot.java | 4 - .../smart/flow/admin/model/EngineTrace.java | 105 +++++++++++++++++ .../resources/mapper/EngineMetricsMapper.xml | 28 +++++ .../resources/mapper/EngineTraceMapper.xml | 29 +++++ .../src/main/resources/schema.sql | 1 + .../smartboot/flow/core/NamedCondition.java | 4 + .../attribute/AttributeValueResolver.java | 8 +- .../builder/AbstractComponentBuilder.java | 9 +- .../flow/core/builder/AdapterBuilder.java | 7 ++ .../flow/core/builder/ChooseBuilder.java | 7 ++ .../flow/core/builder/ExecutableBuilder.java | 7 ++ .../flow/core/builder/IfComponentBuilder.java | 7 ++ .../core/parser/AbstractElementParser.java | 2 +- .../core/parser/BuilderDefinitionVisitor.java | 11 +- .../parser/definition/ScriptDefinition.java | 7 +- .../flow/helper/view/ScriptCollector.java | 10 +- .../flow/helper/view/XmlComponentVisitor.java | 14 ++- .../flow/helper/view/XmlEngineVisitor.java | 12 +- .../flow/manager/UpdateContentTask.java | 13 ++- .../flow/manager/reload/XmlParseReloader.java | 2 - .../flow/manager/report/HttpReporter.java | 2 +- .../flow/manager/trace/ComponentData.java | 74 ++++++++++++ .../trace/ManagerExecutionListener.java | 66 +++++++++-- .../flow/manager/trace/ManagerKeys.java | 24 ---- .../flow/manager/trace/TraceData.java | 18 ++- .../manager/trace/TraceReportRequest.java | 85 ++++++++++++++ .../flow/manager/trace/TraceReporter.java | 84 ++++++++------ 34 files changed, 816 insertions(+), 112 deletions(-) rename smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/{controller => configuration}/SmartFlowConfiguration.java (95%) create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java create mode 100644 smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml create mode 100644 smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml delete mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java diff --git a/dashboard/src/api/module/api.ts b/dashboard/src/api/module/api.ts index 38f9e44..48d060e 100644 --- a/dashboard/src/api/module/api.ts +++ b/dashboard/src/api/module/api.ts @@ -35,3 +35,19 @@ export const engine_online = function (engineId: any) { export const engine_offline = function (engineId: any) { return Http.get('/engines/offline?id=' + engineId); } + +export const metrics_list = function (param: any) { + return Http.post('/report/metrics_list', param); +} + +export const metrics_detail = function (id: any) { + return Http.get('/report/metrics_detail?id=' + id); +} + +export const trace_list = function (param: any) { + return Http.post('/report/trace_list', param); +} + +export const trace_detail = function (id: any) { + return Http.get('/report/trace_detail?id=' + id); +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/SmartFlowConfiguration.java similarity index 95% rename from smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java rename to smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/SmartFlowConfiguration.java index 19b6560..4784aac 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/SmartFlowConfiguration.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/configuration/SmartFlowConfiguration.java @@ -1,4 +1,4 @@ -package org.smartboot.smart.flow.admin.controller; +package org.smartboot.smart.flow.admin.configuration; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java index 262f038..0e4932b 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/EnginesController.java @@ -3,7 +3,6 @@ package org.smartboot.smart.flow.admin.controller; import net.sourceforge.plantuml.SourceFileReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.smartboot.flow.core.manager.DefaultEngineManager; import org.smartboot.flow.core.parser.DefaultParser; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.util.AuxiliaryUtils; @@ -124,7 +123,6 @@ public class EnginesController { List engineNames = parser.getEngineNames(); AssertUtil.isTrue(engineNames.size() == 1, "只允许存在一个engine"); parser.getEngine(engineNames.get(0)).validate(); - DefaultEngineManager.getDefaultManager().detach(engineNames.get(0)); } catch (Exception e) { LOGGER.warn("invalid content, content = {}\n", content, e); @@ -152,7 +150,6 @@ public class EnginesController { AssertUtil.isTrue(engineNames.size() == 1, "只允许存在一个engine"); parser.getEngine(engineNames.get(0)).validate(); - DefaultEngineManager.getDefaultManager().detach(engineNames.get(0)); plantuml = File.createTempFile("plantuml", ".puml"); PlantumlEngineVisitor visitor = new PlantumlEngineVisitor(plantuml.getAbsolutePath().substring(0, plantuml.getAbsolutePath().lastIndexOf("."))); diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java index 326b4d3..eef27e9 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java @@ -1,23 +1,40 @@ package org.smartboot.smart.flow.admin.controller; +import com.alibaba.fastjson2.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.parser.DefaultParser; +import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.flow.helper.mock.FakeObjectCreator; +import org.smartboot.flow.manager.report.HttpReportModel; +import org.smartboot.flow.manager.trace.TraceReportRequest; import org.smartboot.smart.flow.admin.Result; +import org.smartboot.smart.flow.admin.mapper.EngineMetricMapper; import org.smartboot.smart.flow.admin.mapper.EngineSnapshotMapper; +import org.smartboot.smart.flow.admin.mapper.EngineTraceMapper; +import org.smartboot.smart.flow.admin.model.EngineMetrics; +import org.smartboot.smart.flow.admin.model.EngineSnapshot; +import org.smartboot.smart.flow.admin.model.EngineTrace; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** * @author qinluo * @date 2023-01-30 12:01:42 - * @since 1.0.0 + * @since 1.0.7 */ @RestController @RequestMapping("/api/report") @@ -29,6 +46,12 @@ public class ReportController { @Autowired private EngineSnapshotMapper snapshotMapper; + @Autowired + private EngineMetricMapper metricMapper; + + @Autowired + private EngineTraceMapper traceMapper; + @RequestMapping("/query") public String query(@RequestParam("engineMd5") String engineMd5) { if (AuxiliaryUtils.isBlank(engineMd5)) { @@ -52,4 +75,88 @@ public class ReportController { return Result.ok(existEngines); } + + private void writeSnapshot(String engineName, String md5, String content) { + DefaultParser parser = new DefaultParser(); + parser.setObjectCreator(new FakeObjectCreator()); + + try { + parser.parse(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))); + List engineNames = parser.getEngineNames(); + AssertUtil.isTrue(engineNames.size() == 1, "只允许存在一个engine"); + parser.getEngine(engineNames.get(0)).validate(); + } catch (Exception e) { + return; + } + + try { + EngineSnapshot snapshot = new EngineSnapshot(); + snapshot.setEngineName(engineName); + snapshot.setMd5(md5); + snapshot.setContent(content); + snapshotMapper.insert(snapshot); + } catch (DuplicateKeyException ignored) { + + } + } + + @PostMapping("/metrics") + public String receiveMetrics(@RequestBody HttpReportModel model) { + LOGGER.info("receive \n {}", JSON.toJSONString(model)); + if (AuxiliaryUtils.isBlank(model.getEngineName()) || AuxiliaryUtils.isBlank(model.getMd5())) { + return Result.fail(500, "engineName and md5 must not be blank."); + } + + EngineSnapshot detail = snapshotMapper.detail(model.getEngineName(), model.getMd5()); + if (detail == null) { + writeSnapshot(model.getEngineName(), model.getMd5(), model.getContent()); + detail = snapshotMapper.detail(model.getEngineName(), model.getMd5()); + } + + if (detail == null) { + return Result.ok("failed due to invalid structure"); + } + + EngineMetrics metrics = new EngineMetrics(); + metrics.setAddress(model.getAddress()); + metrics.setHost(model.getHost()); + metrics.setReportTime(new Date(model.getTimestamp())); + metrics.setContent(JSON.toJSONString(model.getJson())); + metrics.setEngineName(model.getEngineName()); + metrics.setMd5(model.getMd5()); + metricMapper.insert(metrics); + + return Result.ok(true); + } + + @PostMapping("/trace") + public String receiveTrace(@RequestBody TraceReportRequest model) { + LOGGER.info("receive \n {}", JSON.toJSONString(model)); + if (AuxiliaryUtils.isBlank(model.getEngineName()) || AuxiliaryUtils.isBlank(model.getMd5())) { + return Result.fail(500, "engineName and md5 must not be blank."); + } + + EngineSnapshot detail = snapshotMapper.detail(model.getEngineName(), model.getMd5()); + if (detail == null) { + writeSnapshot(model.getEngineName(), model.getMd5(), model.getContent()); + detail = snapshotMapper.detail(model.getEngineName(), model.getMd5()); + } + + if (detail == null) { + return Result.ok("failed due to invalid structure"); + } + + EngineTrace trace = new EngineTrace(); + trace.setTraceId(model.getTraceId()); + trace.setAddress(model.getAddress()); + trace.setHost(model.getHost()); + trace.setReportTime(new Date(model.getTimestamp())); + trace.setContent(JSON.toJSONString(model.getJson())); + trace.setEngineName(model.getEngineName()); + trace.setMd5(model.getMd5()); + traceMapper.insert(trace); + + + return Result.ok(true); + } } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java new file mode 100644 index 0000000..45f9ac0 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java @@ -0,0 +1,31 @@ +package org.smartboot.smart.flow.admin.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.model.EngineMetrics; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Mapper +public interface EngineMetricMapper { + + /** + * 查询详情 + * + * @param id 记录id + * @return 详情 + */ + EngineMetrics detail(@Param("id") Long id); + + /** + * 插入一条记录 + * + * @param metrics 记录 + * @return 1/0 + */ + int insert(@Param("trace") EngineMetrics metrics); + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java new file mode 100644 index 0000000..2d49b8e --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java @@ -0,0 +1,31 @@ +package org.smartboot.smart.flow.admin.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.model.EngineTrace; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.0 + */ +@Mapper +public interface EngineTraceMapper { + + /** + * 查询详情 + * + * @param id 记录id + * @return 详情 + */ + EngineTrace detail(@Param("id") Long id); + + /** + * 插入一条记录 + * + * @param trace 记录 + * @return 1/0 + */ + int insert(@Param("trace") EngineTrace trace); + +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java new file mode 100644 index 0000000..343d5f1 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java @@ -0,0 +1,96 @@ +package org.smartboot.smart.flow.admin.model; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.7 + */ +public class EngineMetrics implements Serializable { + private static final long serialVersionUID = 5630916400064848439L; + + private Long id; + private String engineName; + private String content; + private String md5; + private Date reportTime; + private String address; + private String host; + + private Date created; + private Date updated; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } + + public Date getReportTime() { + return reportTime; + } + + public void setReportTime(Date reportTime) { + this.reportTime = reportTime; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java index 92d47fe..18c9adf 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineSnapshot.java @@ -1,7 +1,5 @@ package org.smartboot.smart.flow.admin.model; -import com.alibaba.fastjson2.annotation.JSONField; - import java.io.Serializable; import java.util.Date; @@ -18,10 +16,8 @@ public class EngineSnapshot implements Serializable { private String content; private String md5; - @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date created; - @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date updated; public Long getId() { diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java new file mode 100644 index 0000000..d85b98c --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java @@ -0,0 +1,105 @@ +package org.smartboot.smart.flow.admin.model; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author qinluo + * @date 2023-01-30 + * @since 1.0.7 + */ +public class EngineTrace implements Serializable { + private static final long serialVersionUID = 5630916400064848439L; + + private Long id; + private String engineName; + private String content; + private String md5; + private Date reportTime; + private String address; + private String host; + private String traceId; + + private Date created; + private Date updated; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } + + public Date getReportTime() { + return reportTime; + } + + public void setReportTime(Date reportTime) { + this.reportTime = reportTime; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } +} diff --git a/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml new file mode 100644 index 0000000..ed6f2e3 --- /dev/null +++ b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + insert into engine_table_metrics(engine_name, content, md5, address, host, report_time, created, updated) + values(#{trace.engineName}, #{trace.content}, #{trace.md5}, #{trace.address}, #{trace.host}, #{trace.reportTime}, now(), now()) + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml new file mode 100644 index 0000000..5fd0d37 --- /dev/null +++ b/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + insert into engine_table_trace(engine_name, content, md5, address, host, trace_id, report_time, created, updated) + values(#{trace.engineName}, #{trace.content}, #{trace.md5}, #{trace.address}, #{trace.host}, #{trace.traceId}, #{trace.reportTime}, now(), now()) + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/schema.sql b/smart-flow-admin/src/main/resources/schema.sql index 6410fdc..ae0c9a7 100644 --- a/smart-flow-admin/src/main/resources/schema.sql +++ b/smart-flow-admin/src/main/resources/schema.sql @@ -56,6 +56,7 @@ CREATE TABLE IF NOT EXISTS `engine_table_trace`( `address` varchar(64) COMMENT 'IP地址', `host` varchar(128) COMMENT '主机名', `md5` varchar(256) COMMENT 'content md5加密字符串', + `trace_id` varchar(256) COMMENT 'traceId', `content` text COMMENT 'json格式', `report_time` timestamp COMMENT '上报时间', `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java index ee5e559..34d13c3 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java @@ -13,6 +13,10 @@ public abstract class NamedCondition extends Condition { this.name = name; } + public String getName() { + return this.name; + } + @Override public String describe() { return this.name; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java index b7c5037..a02fda0 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java @@ -23,12 +23,12 @@ public class AttributeValueResolver { } - public static AttributeValueResolver getInstance() { - return INSTANCE; + public AttributeValueResolver(ObjectCreator objectCreator) { + this.objectCreator = objectCreator; } - public void setObjectCreator(ObjectCreator objectCreator) { - this.objectCreator = objectCreator; + public static AttributeValueResolver getInstance() { + return INSTANCE; } public Object resolve(Attributes attribute, Object value) { diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java index 0217330..40acf79 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java @@ -16,19 +16,24 @@ import java.util.Map; */ public abstract class AbstractComponentBuilder { - private final AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); + private AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); /** * Component attribute attributes. */ private final Map settings = new HashMap<>(8); + public AbstractComponentBuilder withResolver(AttributeValueResolver resolver) { + AssertUtil.notNull(resolver, "Resolver must not be null"); + this.valueResolver = resolver; + return this; + } public AbstractComponentBuilder apply(Attributes attributes, Object value) { AssertUtil.notNull(attributes, "Unknown attribute"); AssertUtil.notNull(value, "null"); - Object resolved = valueResolver.resolve(attributes, value); + Object resolved = this.valueResolver.resolve(attributes, value); AssertUtil.isTrue(attributes.accept(resolved), "Un-matched type"); this.settings.put(attributes, resolved); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java index 143804e..0572851 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java @@ -1,6 +1,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Adapter; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.AdapterComponent; import org.smartboot.flow.core.component.Component; @@ -37,4 +38,10 @@ public class AdapterBuilder extends ExecutableBuilder { return this; } + @Override + public AdapterBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java index cccbf55..dee1491 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java @@ -2,6 +2,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.ChooseComponent; import org.smartboot.flow.core.component.Component; @@ -83,4 +84,10 @@ public class ChooseBuilder extends ExecutableBuilder { return this; } + @Override + public ChooseBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java index 122c436..270fef4 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java @@ -1,6 +1,7 @@ package org.smartboot.flow.core.builder; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.executable.Executable; @@ -35,6 +36,12 @@ public class ExecutableBuilder extends AbstractComponentBuilder { return this; } + @Override + public ExecutableBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + public static ExecutableBuilder newBuilder() { return new ExecutableBuilder<>(); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java index cd08544..557a36e 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java @@ -2,6 +2,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.component.IfComponent; @@ -41,6 +42,12 @@ public class IfComponentBuilder extends ExecutableBuilder{ return this; } + @Override + public IfComponentBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + public PipelineBuilder then(Component component) { return this.then(component, null); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java index 4bb00f6..ebf700c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java @@ -29,7 +29,7 @@ public abstract class AbstractElementParser implements ElementParser { // name String name = element.getAttribute(ParseConstants.NAME); // nested pipeline maybe no name. - if (name.trim().length() == 0 || Objects.equals(name, element.getAttribute(ParseConstants.EXECUTE))) { + if (name.trim().length() == 0) { name = context.getIdentifier(element); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java index 7cb1386..7049ef1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java @@ -4,6 +4,7 @@ import org.smartboot.flow.core.Adapter; import org.smartboot.flow.core.Condition; import org.smartboot.flow.core.FlowEngine; import org.smartboot.flow.core.Pipeline; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.builder.AdapterBuilder; import org.smartboot.flow.core.builder.ChooseBuilder; import org.smartboot.flow.core.builder.EngineBuilder; @@ -48,10 +49,12 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { private final Map scriptConditions = new ConcurrentHashMap<>(); private final ObjectCreator objectCreator; private final boolean useCache; + private final AttributeValueResolver valueResolver; public BuilderDefinitionVisitor(boolean useCache, ObjectCreator objectCreator) { this.useCache = useCache; this.objectCreator = objectCreator; + this.valueResolver = new AttributeValueResolver(objectCreator); } @Override @@ -150,7 +153,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { @Override public void visitBasic(ElementDefinition ed) { - ExecutableBuilder builder = new ExecutableBuilder<>(); + ExecutableBuilder builder = new ExecutableBuilder<>().withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. builder.apply(p.getAttribute(), p.getValue()); @@ -176,7 +179,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { } AssertUtil.notNull(condition, "can't find condition for if-element, test = " + test); - IfComponentBuilder ifComponentBuilder = new IfComponentBuilder<>(condition); + IfComponentBuilder ifComponentBuilder = new IfComponentBuilder<>(condition).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. ifComponentBuilder.apply(p.getAttribute(), p.getValue()); @@ -216,7 +219,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { } AssertUtil.notNull(condition, "can't find condition for choose-element, test = " + test); - ChooseBuilder chooseBuilder = new ChooseBuilder<>(condition); + ChooseBuilder chooseBuilder = new ChooseBuilder<>(condition).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. chooseBuilder.apply(p.getAttribute(), p.getValue()); @@ -256,7 +259,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { ed.getPipelineElement().visit(this); Component component = namedComponents.get(ed.getPipelineElement().getIdentifier()); - AdapterBuilder adapterBuilder = new AdapterBuilder(adapter, component); + AdapterBuilder adapterBuilder = new AdapterBuilder(adapter, component).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. adapterBuilder.apply(p.getAttribute(), p.getValue()); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java index 72d31a2..659fb28 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java @@ -28,9 +28,10 @@ public class ScriptDefinition extends ElementDefinition { javaType = AuxiliaryUtils.asClass(type); } - AssertUtil.notNull(javaType, "script type must be a javaType"); - AssertUtil.isTrue(ScriptCondition.class.isAssignableFrom(javaType), "script type must be a subclass of ScriptCondition"); - AssertUtil.isTrue(ScriptCondition.class != javaType, "script type must be a subclass of ScriptCondition"); + if (javaType != null) { + AssertUtil.isTrue(ScriptCondition.class.isAssignableFrom(javaType), "script type must be a subclass of ScriptCondition"); + AssertUtil.isTrue(ScriptCondition.class != javaType, "script type must be a subclass of ScriptCondition"); + } } /** diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java index 501a045..e291e9e 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java @@ -1,5 +1,7 @@ package org.smartboot.flow.helper.view; +import org.smartboot.flow.core.common.Pair; + import java.util.HashMap; import java.util.Map; @@ -13,20 +15,20 @@ import java.util.Map; public class ScriptCollector { private static final ThreadLocal HOLDER = new ThreadLocal<>(); - private final Map scripts = new HashMap<>(); + private final Map> scripts = new HashMap<>(); public static void start() { HOLDER.set(new ScriptCollector()); } - public static void collect(String condition, String script) { + public static void collect(String condition, String script, String name) { ScriptCollector collector = HOLDER.get(); if (collector != null) { - collector.scripts.put(condition, script); + collector.scripts.put(condition, Pair.of(name, script)); } } - public static Map end() { + public static Map> end() { ScriptCollector collector = HOLDER.get(); if (collector != null) { HOLDER.remove(); diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java index 1008b8a..b69911e 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java @@ -1,8 +1,11 @@ package org.smartboot.flow.helper.view; +import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.NamedCondition; import org.smartboot.flow.core.attribute.AttributeHolder; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.common.ComponentType; +import org.smartboot.flow.core.script.ScriptCondition; import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; @@ -31,6 +34,7 @@ public class XmlComponentVisitor extends ComponentVisitor { private final Set visited; private String executable; private String script; + private String scriptName; private final String name; public XmlComponentVisitor(ComponentType type, String name, String describe, Set visited) { @@ -88,7 +92,7 @@ public class XmlComponentVisitor extends ComponentVisitor { } if (script != null) { - ScriptCollector.collect(condition, script); + ScriptCollector.collect(condition, script, scriptName); } if (type == ComponentType.BASIC) { @@ -179,5 +183,13 @@ public class XmlComponentVisitor extends ComponentVisitor { public void visitScript(String script) { XmlComponentVisitor.this.script = script; } + + @Override + public void visitSource(Condition condition) { + if (condition instanceof ScriptCondition) { + NamedCondition sc = (NamedCondition) condition; + XmlComponentVisitor.this.scriptName = sc.getName(); + } + } } } diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java index b91be98..b65bbea 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java @@ -1,6 +1,7 @@ package org.smartboot.flow.helper.view; import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.core.common.Pair; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -16,7 +17,7 @@ import java.util.concurrent.Executor; */ public class XmlEngineVisitor extends EngineVisitor { - private static final String START = "\n\n" + + private static final String START = "\n" + " scripts = ScriptCollector.end(); + Map> scripts = ScriptCollector.end(); if (scripts != null && scripts.size() > 0) { - scripts.forEach((k, v) -> { - content.append("\n\t"); - }); + scripts.forEach((k, v) -> content.append("\n\t")); } content.append("\n").append(END).append("\n"); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java index 991cd17..799eb1f 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java @@ -38,11 +38,21 @@ public class UpdateContentTask extends Thread { } started = true; - executorService.schedule(new UpdateContentTask(host, port), 5, TimeUnit.SECONDS); + executorService.schedule(new UpdateContentTask(host, port), 1, TimeUnit.SECONDS); } @Override public void run() { + + try { + executeQuery(); + } finally { + executorService.schedule(new UpdateContentTask(host, port), 5, TimeUnit.SECONDS); + } + + } + + private void executeQuery() { EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); List allEngines = defaultManager.getRegisteredEngineNames(); StringBuilder sb = new StringBuilder(); @@ -80,6 +90,5 @@ public class UpdateContentTask extends Thread { }).onFailure(e -> { }).send(); - } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java index fc25f9f..b04a404 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java @@ -1,7 +1,6 @@ package org.smartboot.flow.manager.reload; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.exception.FlowException; import org.smartboot.flow.core.parser.DefaultObjectCreator; import org.smartboot.flow.core.parser.DefaultParser; @@ -57,7 +56,6 @@ public class XmlParseReloader extends AbstractReloader { // object creator include independent and spring ref independent. parser.setObjectCreator(objectCreator); parser.setAssemble(assemble); - AttributeValueResolver.getInstance().setObjectCreator(objectCreator); // parse parser.parse(stream); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java index ce78de1..3556614 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java @@ -73,13 +73,13 @@ public class HttpReporter extends AbstractReporter { ExecutionListenerRegistry.register(MetricExecutionListener.getInstance()); } + UpdateContentTask.startTask(host, port); super.start(); } @Override public void doExport(EngineModel model) { AssertUtil.notNull(host, "address is invalid."); - UpdateContentTask.startTask(host, port); HttpClient httpClient = new HttpClient(host, port); httpClient.timeout((int)timeout); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java index 2ab2452..457f7f3 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java @@ -1,9 +1,83 @@ package org.smartboot.flow.manager.trace; +import org.smartboot.flow.core.component.Component; + /** * @author qinluo * @date 2023/2/8 1:04 * @since 1.0.7 */ +@SuppressWarnings("rawtypes") public class ComponentData { + + /** + * component source. + */ + private Component source; + + private final long start; + private long escape; + private Throwable ex; + private Object ctx; + private long rollbackStart; + private long rollbackEnd; + + public ComponentData(Component source, Object ctx) { + this.source = source; + this.start = System.currentTimeMillis(); + this.ctx = ctx; + + } + + public long getRollbackStart() { + return rollbackStart; + } + + public void setRollbackStart(long rollbackStart) { + this.rollbackStart = rollbackStart; + } + + public long getRollbackEnd() { + return rollbackEnd; + } + + public void setRollbackEnd(long rollbackEnd) { + this.rollbackEnd = rollbackEnd; + } + + public Component getSource() { + return source; + } + + public void setSource(Component source) { + this.source = source; + } + + public long getStart() { + return start; + } + + public long getEscape() { + return escape; + } + + public void setEscape(long escape) { + this.escape = escape; + } + + public Throwable getEx() { + return ex; + } + + public void setEx(Throwable ex) { + this.ex = ex; + } + + public Object getCtx() { + return ctx; + } + + public void setCtx(Object ctx) { + this.ctx = ctx; + } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index 4375a1b..914fe68 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -1,9 +1,9 @@ package org.smartboot.flow.manager.trace; import org.smartboot.flow.core.EngineContext; -import org.smartboot.flow.core.ExecutionListener; import org.smartboot.flow.core.ExecutionListenerSupport; -import org.smartboot.flow.manager.metric.MetricExecutionListener; +import org.smartboot.flow.core.Key; +import org.smartboot.flow.core.component.Component; /** * 由管理模块进行Listener的注册 @@ -12,13 +12,19 @@ import org.smartboot.flow.manager.metric.MetricExecutionListener; * @date 2023/1/30 22:42 * @since 1.0.7 */ +@SuppressWarnings("rawtypes") public class ManagerExecutionListener extends ExecutionListenerSupport { + /** + * Invoke trace in engine invoking. + */ + private static final Key TRACES = Key.of("traces"); private final TraceReporter traceReporter; - private TraceSampleStrategy sampleStrategy; + private final TraceSampleStrategy sampleStrategy; - ManagerExecutionListener(TraceReporter traceReporter) { + ManagerExecutionListener(TraceReporter traceReporter, TraceSampleStrategy sampleStrategy) { this.traceReporter = traceReporter; + this.sampleStrategy = sampleStrategy; } @Override @@ -34,45 +40,85 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { trace.setTraceId(generator.getTraceId(context)); // 暂时init个object - context.putExt(ManagerKeys.TRACES, trace); + context.putExt(TRACES, trace); } @Override public void beforeExecute(EngineContext context, Object object) { - TraceData trace = context.getExt(ManagerKeys.TRACES); + TraceData trace = context.getExt(TRACES); if (trace == null) { return; } + + if (object instanceof Component) { + Component comp = (Component) object; + trace.add(comp, new ComponentData(comp, context)); + } } @Override public void afterExecute(EngineContext context, Object object) { - TraceData trace = context.getExt(ManagerKeys.TRACES); + TraceData trace = context.getExt(TRACES); if (trace == null) { return; } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) return; + + data.setEscape(System.currentTimeMillis() - data.getStart()); + data.setEx(context.getFatal()); } @Override public void beforeRollback(EngineContext context, Object object) { - TraceData trace = context.getExt(ManagerKeys.TRACES); + TraceData trace = context.getExt(TRACES); if (trace == null) { return; } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) return; + + data.setRollbackStart(System.currentTimeMillis()); } @Override public void afterRollback(EngineContext context, Object object) { - TraceData trace = context.getExt(ManagerKeys.TRACES); + TraceData trace = context.getExt(TRACES); if (trace == null) { return; } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) { + return; + } + + data.setRollbackEnd(System.currentTimeMillis()); + } + + private ComponentData getComponentData(Object obj, TraceData trace) { + Component comp = (Component) obj; + return trace.getData(comp); } @Override public void completed(EngineContext context) { - TraceData trace = context.getExt(ManagerKeys.TRACES); + TraceData trace = context.getExt(TRACES); if (trace == null) { return; } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java deleted file mode 100644 index 8374fa9..0000000 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerKeys.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.smartboot.flow.manager.trace; - -import org.smartboot.flow.core.Key; - -/** - * @author qinluo - * @date 2023/1/30 22:43 - * @since 1.0.0 - */ -public interface ManagerKeys { - - /** - * TraceId key in engine ctx. - */ - Key TRACE_ID = Key.of("traceId"); - - /** - * Invoke trace in engine invoking. - * - */ - Key TRACES = Key.of("traces"); - - -} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java index b4d806f..505087e 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java @@ -1,18 +1,22 @@ package org.smartboot.flow.manager.trace; +import org.smartboot.flow.core.component.Component; + import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * @author qinluo * @date 2023/2/8 1:00 * @since 1.0.7 */ +@SuppressWarnings("rawtypes") public class TraceData { private String engineName; private String traceId; private Throwable ex; - private Map componentTraceData; + private final Map components = new ConcurrentHashMap<>(); public String getEngineName() { return engineName; @@ -38,11 +42,15 @@ public class TraceData { this.ex = ex; } - public Map getComponentTraceData() { - return componentTraceData; + public Map getComponents() { + return components; + } + + public void add(Component comp, ComponentData data) { + components.put(comp, data); } - public void setComponentTraceData(Map componentTraceData) { - this.componentTraceData = componentTraceData; + public ComponentData getData(Component comp) { + return components.get(comp); } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java new file mode 100644 index 0000000..6c33224 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java @@ -0,0 +1,85 @@ +package org.smartboot.flow.manager.trace; + +import java.io.Serializable; + +/** + * @author qinluo + * @date 2022-11-25 21:38:04 + * @since 1.0.7 + */ +public class TraceReportRequest implements Serializable { + private static final long serialVersionUID = -457007982997285755L; + + private long timestamp; + private String address; + private String host; + private String engineName; + private String md5; + private String content; + private String traceId; + private Serializable json; + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Serializable getJson() { + return json; + } + + public void setJson(Serializable json) { + this.json = json; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java index d591c76..60ec857 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -1,28 +1,21 @@ package org.smartboot.flow.manager.trace; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.ExecutionListenerRegistry; import org.smartboot.flow.core.manager.DefaultEngineManager; import org.smartboot.flow.core.manager.EngineManager; -import org.smartboot.flow.core.manager.EngineModel; -import org.smartboot.flow.core.metrics.DefaultMetricsCreator; -import org.smartboot.flow.core.metrics.MetricsCreator; -import org.smartboot.flow.core.metrics.MetricsManager; import org.smartboot.flow.core.util.AssertUtil; -import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.manager.FlatEngine; import org.smartboot.flow.manager.FlatManager; import org.smartboot.flow.manager.HostUtils; import org.smartboot.flow.manager.ManagerConstants; import org.smartboot.flow.manager.NamedThreadFactory; import org.smartboot.flow.manager.UpdateContentTask; -import org.smartboot.flow.manager.metric.DefaultMetrics; -import org.smartboot.flow.manager.metric.MetricExecutionListener; -import org.smartboot.flow.manager.report.AbstractReporter; -import org.smartboot.flow.manager.report.HttpReportModel; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; @@ -32,9 +25,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingDeque; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -48,7 +39,7 @@ import java.util.concurrent.TimeUnit; public class TraceReporter { private static final Logger LOGGER = LoggerFactory.getLogger(TraceReporter.class); - private final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("export-thread")); + private final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("export-trace")); /** * Report idle in mills. @@ -66,6 +57,8 @@ public class TraceReporter { private long timeout; private String host; private int port; + private Double radio; + private TraceSampleStrategy sampleStrategy; private Map headers; private final BlockingQueue traceQueue = new ArrayBlockingQueue<>(20000); @@ -80,7 +73,6 @@ public class TraceReporter { } public void export() { - UpdateContentTask.startTask(host, port); List traces = new ArrayList<>(); if (traceQueue.drainTo(traces) < 0) { return; @@ -98,22 +90,41 @@ public class TraceReporter { headers.forEach(post::addHeader); } - HttpReportModel reportModel = new HttpReportModel(); - reportModel.setAddress(HostUtils.getHostIp()); - reportModel.setHost(HostUtils.getHostName()); - reportModel.setTimestamp(System.currentTimeMillis()); + TraceReportRequest request = new TraceReportRequest(); + request.setAddress(HostUtils.getHostIp()); + request.setHost(HostUtils.getHostName()); + request.setTimestamp(System.currentTimeMillis()); FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(defaultManager.getEngineModel(trace.getEngineName()).getSource()); - reportModel.setMd5(flatEngine.getMd5()); + request.setMd5(flatEngine.getMd5()); + request.setTraceId(trace.getTraceId()); + request.setEngineName(trace.getEngineName()); if (flatEngine.getReportContent()) { - reportModel.setContent(flatEngine.getContent()); + request.setContent(flatEngine.getContent()); } - String json = JSON.toJSONString(reportModel, SerializerFeature.WriteEnumUsingToString); + JSONArray ja = new JSONArray(); + + trace.getComponents().forEach((k , v) -> { + JSONObject item = new JSONObject(); + item.put("name", k.getName()); + item.put("type", k.getType()); + item.put("start", v.getStart()); + item.put("escape", v.getEscape()); + item.put("ex", v.getEx()); + item.put("rollbackStart", v.getRollbackStart()); + item.put("rollbackEnd", v.getRollbackEnd()); + + ja.add(item); + }); + + request.setJson(ja); + + String json = JSON.toJSONString(request, SerializerFeature.WriteEnumUsingToString); byte[] bytes = json.getBytes(StandardCharsets.UTF_8); if (LOGGER.isDebugEnabled()) { - LOGGER.debug("report trace data, engine = {}, data = {}", trace.getEngineName(), JSON.toJSONString(reportModel)); + LOGGER.debug("report trace data, engine = {}, data = {}", trace.getEngineName(), JSON.toJSONString(request)); } post.addHeader(HeaderNameEnum.CONTENT_TYPE.getName(), "application/json;charset=UTF-8"); @@ -141,8 +152,13 @@ public class TraceReporter { this.port = parsedUrl.getPort(); // Register listener. - ExecutionListenerRegistry.register(new ManagerExecutionListener(this)); + if (sampleStrategy == null && radio != null && radio > 0 && radio <= 1) { + sampleStrategy = new TraceSampleStrategy(); + } + + ExecutionListenerRegistry.register(new ManagerExecutionListener(this, sampleStrategy)); this.executorService.schedule(this::export, idle, TimeUnit.MILLISECONDS); + UpdateContentTask.startTask(host, port); } public void submit(TraceData item) { @@ -166,27 +182,27 @@ public class TraceReporter { this.timeout = timeout; } - public String getHost() { - return host; + public Map getHeaders() { + return headers; } - public void setHost(String host) { - this.host = host; + public void setHeaders(Map headers) { + this.headers = headers; } - public int getPort() { - return port; + public Double getRadio() { + return radio; } - public void setPort(int port) { - this.port = port; + public void setRadio(Double radio) { + this.radio = radio; } - public Map getHeaders() { - return headers; + public TraceSampleStrategy getSampleStrategy() { + return sampleStrategy; } - public void setHeaders(Map headers) { - this.headers = headers; + public void setSampleStrategy(TraceSampleStrategy sampleStrategy) { + this.sampleStrategy = sampleStrategy; } } -- Gitee From 4c4606ff0c886a92ac6c84e4d86c6846bc278c18 Mon Sep 17 00:00:00 2001 From: yisshengyouni Date: Thu, 9 Feb 2023 15:19:54 +0800 Subject: [PATCH 20/76] =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/smartboot/flow/core/useful/Mediator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java index 9c7ae49..cdc3aed 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java @@ -55,7 +55,7 @@ public final class Mediator { return (S)extensions.getOrDefault(key, defaultValue); } - public void put(Key key, Object value) { + public void put(Key key, S value) { if (value == null) { return; } -- Gitee From df95bf179be85f7758dd8df5ed395fe6fadb29e9 Mon Sep 17 00:00:00 2001 From: yisshengyouni Date: Thu, 9 Feb 2023 15:22:14 +0800 Subject: [PATCH 21/76] =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/smartboot/flow/core/useful/Context.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java index ac9356e..1d19da6 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java @@ -75,7 +75,7 @@ public class Context { return (S)extensions.getOrDefault(key, defaultValue); } - public void put(Key key, Object value) { + public void put(Key key, S value) { if (value == null) { return; } -- Gitee From 4a2b4e1b8103c5366a39ad734478dbfa4b14a2f3 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Thu, 9 Feb 2023 15:36:46 +0800 Subject: [PATCH 22/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=201=E3=80=81?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E6=95=B0=E6=8D=AE=E4=B8=8A=E6=8A=A5=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20=20=20=20=20=20-=202=E3=80=81MetricListener?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0manager=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E7=94=B1reporter=E5=90=AF=E7=94=A8=20=20=20=20=20=20-=203?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E7=AE=80=E5=8D=95=E6=89=A7=E8=A1=8C?= =?UTF-8?q?trace=E6=95=B0=E6=8D=AE=E4=B8=8A=E6=8A=A5=20=20=20=20=20=20-=20?= =?UTF-8?q?4=E3=80=81=E4=BC=98=E5=8C=96Java=20builder=20=20=20=20=20=20-?= =?UTF-8?q?=205=E3=80=81=E4=BC=98=E5=8C=96xml=E8=A7=A3=E6=9E=90=20=20=20?= =?UTF-8?q?=20=20=20-=206=E3=80=81=E7=AE=80=E5=8C=96=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=20=20=20=20=20-=207?= =?UTF-8?q?=E3=80=81xml=E5=BA=8F=E5=88=97=E5=8C=96bugfix=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81script=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- smart-flow-core/pom.xml | 2 +- .../flow/core/DefaultIdentifierManager.java | 8 +- .../org/smartboot/flow/core/FlowEngine.java | 14 +- .../flow/core/IdentifierManager.java | 2 +- .../smartboot/flow/core/NamedCondition.java | 4 + .../org/smartboot/flow/core/Pipeline.java | 8 + .../attribute/AttributeValueResolver.java | 8 +- .../builder/AbstractComponentBuilder.java | 9 +- .../flow/core/builder/AdapterBuilder.java | 7 + .../flow/core/builder/ChooseBuilder.java | 7 + .../flow/core/builder/ExecutableBuilder.java | 7 + .../flow/core/builder/IfComponentBuilder.java | 7 + .../flow/core/common/ComponentType.java | 2 +- .../flow/core/component/AdapterComponent.java | 6 + .../flow/core/component/ChooseComponent.java | 9 + .../flow/core/component/IfComponent.java | 9 + .../core/component/PipelineComponent.java | 8 +- .../flow/core/manager/ComponentModel.java | 110 ++------- .../core/manager/DefaultEngineManager.java | 1 - .../flow/core/manager/EngineModel.java | 35 +-- .../core/manager/IdentifierAllocator.java | 20 ++ .../flow/core/manager/PipelineModel.java | 15 +- .../core/manager/RegisterEngineVisitor.java | 9 +- .../manager/RegisteredComponentVisitor.java | 50 ++--- .../manager/RegisteredPipelineVisitor.java | 14 +- .../core/metrics/DefaultMetricsCreator.java | 4 +- .../smartboot/flow/core/metrics/Metrics.java | 36 +-- .../flow/core/metrics/MetricsCreator.java | 4 +- .../flow/core/metrics/MetricsManager.java | 4 +- .../core/parser/AbstractElementParser.java | 2 +- .../core/parser/BuilderDefinitionVisitor.java | 11 +- .../flow/core/parser/ParserContext.java | 4 +- .../parser/definition/ScriptDefinition.java | 7 +- .../smartboot/flow/core/useful/Context.java | 1 + .../smartboot/flow/core/useful/Mediator.java | 1 + .../flow/core/util/AuxiliaryUtils.java | 11 +- smart-flow-helper/pom.xml | 4 +- .../flow/helper/view/PlantumlComponent.java | 4 +- .../flow/helper/view/ScriptCollector.java | 10 +- .../flow/helper/view/XmlComponentVisitor.java | 32 ++- .../flow/helper/view/XmlEngineVisitor.java | 12 +- smart-flow-manager/pom.xml | 6 +- .../smartboot/flow/manager/FlatEngine.java | 71 ++++++ .../smartboot/flow/manager/FlatManager.java | 61 +++++ .../flow/manager/{report => }/HostUtils.java | 2 +- .../flow/manager/ManagerConstants.java | 25 ++- .../manager/ManagerExecutionListener.java | 31 --- .../smartboot/flow/manager/ManagerKeys.java | 24 -- .../flow/manager/UpdateContentTask.java | 94 ++++++++ .../flow/manager/change/HttpManager.java | 2 +- .../flow/manager/metric}/Counter.java | 2 +- .../flow/manager/metric/DefaultMetrics.java | 46 ++++ .../flow/manager/metric}/MaxCounter.java | 2 +- .../metric}/MetricExecutionListener.java | 22 +- .../flow/manager/metric}/MetricKind.java | 2 +- .../flow/manager/metric}/NamedMetrics.java | 2 +- .../flow/manager/reload/XmlParseReloader.java | 7 - .../flow/manager/report/HttpReportModel.java | 39 +++- .../flow/manager/report/HttpReporter.java | 98 ++++++-- .../flow/manager/trace/ComponentData.java | 83 +++++++ .../trace/ManagerExecutionListener.java | 131 +++++++++++ .../flow/manager/trace/TraceData.java | 56 +++++ .../manager/{ => trace}/TraceIdGenerator.java | 2 +- .../manager/trace/TraceReportRequest.java | 85 +++++++ .../flow/manager/trace/TraceReporter.java | 209 ++++++++++++++++++ .../manager/trace/TraceSampleStrategy.java | 27 +++ smart-flow-script-condition/pom.xml | 4 +- .../smart-flow-script-groovy/pom.xml | 2 +- .../smart-flow-script-ognl/pom.xml | 2 +- .../smart-flow-script-qlexpress/pom.xml | 2 +- smart-flow-spring-extension/pom.xml | 4 +- .../extension/BeanDefinitionVisitor.java | 1 + .../extension/SpringIdentifierManager.java | 6 +- smart-flow-springboot-starter/pom.xml | 4 +- .../FlowHttpReportConfiguration.java | 2 +- 76 files changed, 1301 insertions(+), 375 deletions(-) create mode 100644 smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java rename smart-flow-manager/src/main/java/org/smartboot/flow/manager/{report => }/HostUtils.java (97%) delete mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java delete mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java rename {smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter => smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric}/Counter.java (89%) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java rename {smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter => smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric}/MaxCounter.java (92%) rename {smart-flow-core/src/main/java/org/smartboot/flow/core/metrics => smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric}/MetricExecutionListener.java (82%) rename {smart-flow-core/src/main/java/org/smartboot/flow/core/metrics => smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric}/MetricKind.java (80%) rename {smart-flow-core/src/main/java/org/smartboot/flow/core/metrics => smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric}/NamedMetrics.java (89%) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java rename smart-flow-manager/src/main/java/org/smartboot/flow/manager/{ => trace}/TraceIdGenerator.java (93%) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java diff --git a/pom.xml b/pom.xml index fe57ca1..ebe41ca 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.smartboot.flow smart-flow-parent - 1.0.6 + 1.0.7 4.0.0 pom smart-flow diff --git a/smart-flow-core/pom.xml b/smart-flow-core/pom.xml index bdbaf34..55e79d2 100644 --- a/smart-flow-core/pom.xml +++ b/smart-flow-core/pom.xml @@ -5,7 +5,7 @@ org.smartboot.flow smart-flow-parent - 1.0.6 + 1.0.7 4.0.0 diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java index f15a632..917f130 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/DefaultIdentifierManager.java @@ -1,7 +1,5 @@ package org.smartboot.flow.core; -import org.smartboot.flow.core.util.AuxiliaryUtils; - import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -20,12 +18,12 @@ public class DefaultIdentifierManager implements IdentifierManager { private final AtomicInteger sequence = new AtomicInteger(0); @Override - public String generateIdentifier(String prefix) { - String identifier = AuxiliaryUtils.contact(prefix, sequence.getAndAdd(1)); + public String allocate(String prefix) { + String identifier = prefix + "-" + sequence.getAndAdd(1); // Ensure identifier is unique. while (identifiers.containsKey(identifier) || identifiers.put(identifier, 1) != null) { - identifier = AuxiliaryUtils.contact(prefix, sequence.getAndAdd(1)); + identifier = prefix + "-" + sequence.getAndAdd(1); } return identifier; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java index 42be7b2..c215ae7 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/FlowEngine.java @@ -5,7 +5,7 @@ import org.smartboot.flow.core.exception.DefaultExceptionHandler; import org.smartboot.flow.core.exception.ExceptionHandler; import org.smartboot.flow.core.invoker.Invoker; import org.smartboot.flow.core.manager.DefaultEngineManager; -import org.smartboot.flow.core.metrics.MetricExecutionListener; +import org.smartboot.flow.core.manager.EngineManager; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -172,8 +172,14 @@ public class FlowEngine implements Describable, Validator, Measurable { AssertUtil.notNull(pipeline, "engine[ " + name + " ]pipeline must not be null"); pipeline.validate(); validateCalled = true; - // Register metrics listener. - ExecutionListenerRegistry.register(MetricExecutionListener.getInstance()); - DefaultEngineManager.getDefaultManager().register(this); + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + defaultManager.detach(name); + defaultManager.register(this); + } + + @Override + public void reset() { + Measurable.super.reset(); + pipeline.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java index 4094b1b..1ceab3b 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/IdentifierManager.java @@ -13,5 +13,5 @@ public interface IdentifierManager { * @param prefix prefix. * @return identifier. */ - String generateIdentifier(String prefix); + String allocate(String prefix); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java index ee5e559..34d13c3 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/NamedCondition.java @@ -13,6 +13,10 @@ public abstract class NamedCondition extends Condition { this.name = name; } + public String getName() { + return this.name; + } + @Override public String describe() { return this.name; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java index 8f9ae29..c489a1b 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java @@ -118,4 +118,12 @@ public class Pipeline implements Rollback, Describable, Validator, M validateCalled = true; } + + @Override + public void reset() { + Measurable.super.reset(); + for (Component component : components) { + component.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java index b7c5037..a02fda0 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/attribute/AttributeValueResolver.java @@ -23,12 +23,12 @@ public class AttributeValueResolver { } - public static AttributeValueResolver getInstance() { - return INSTANCE; + public AttributeValueResolver(ObjectCreator objectCreator) { + this.objectCreator = objectCreator; } - public void setObjectCreator(ObjectCreator objectCreator) { - this.objectCreator = objectCreator; + public static AttributeValueResolver getInstance() { + return INSTANCE; } public Object resolve(Attributes attribute, Object value) { diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java index 0217330..40acf79 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AbstractComponentBuilder.java @@ -16,19 +16,24 @@ import java.util.Map; */ public abstract class AbstractComponentBuilder { - private final AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); + private AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); /** * Component attribute attributes. */ private final Map settings = new HashMap<>(8); + public AbstractComponentBuilder withResolver(AttributeValueResolver resolver) { + AssertUtil.notNull(resolver, "Resolver must not be null"); + this.valueResolver = resolver; + return this; + } public AbstractComponentBuilder apply(Attributes attributes, Object value) { AssertUtil.notNull(attributes, "Unknown attribute"); AssertUtil.notNull(value, "null"); - Object resolved = valueResolver.resolve(attributes, value); + Object resolved = this.valueResolver.resolve(attributes, value); AssertUtil.isTrue(attributes.accept(resolved), "Un-matched type"); this.settings.put(attributes, resolved); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java index 143804e..0572851 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/AdapterBuilder.java @@ -1,6 +1,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Adapter; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.AdapterComponent; import org.smartboot.flow.core.component.Component; @@ -37,4 +38,10 @@ public class AdapterBuilder extends ExecutableBuilder { return this; } + @Override + public AdapterBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java index cccbf55..dee1491 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ChooseBuilder.java @@ -2,6 +2,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.ChooseComponent; import org.smartboot.flow.core.component.Component; @@ -83,4 +84,10 @@ public class ChooseBuilder extends ExecutableBuilder { return this; } + @Override + public ChooseBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java index 122c436..270fef4 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/ExecutableBuilder.java @@ -1,6 +1,7 @@ package org.smartboot.flow.core.builder; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.executable.Executable; @@ -35,6 +36,12 @@ public class ExecutableBuilder extends AbstractComponentBuilder { return this; } + @Override + public ExecutableBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + public static ExecutableBuilder newBuilder() { return new ExecutableBuilder<>(); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java index cd08544..557a36e 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/builder/IfComponentBuilder.java @@ -2,6 +2,7 @@ package org.smartboot.flow.core.builder; import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.component.IfComponent; @@ -41,6 +42,12 @@ public class IfComponentBuilder extends ExecutableBuilder{ return this; } + @Override + public IfComponentBuilder withResolver(AttributeValueResolver resolver) { + super.withResolver(resolver); + return this; + } + public PipelineBuilder then(Component component) { return this.then(component, null); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java index 8a27998..f0f32ba 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/common/ComponentType.java @@ -26,7 +26,7 @@ public enum ComponentType { /** * 子流程组件 */ - PIPELINE, + SUBPROCESS, /** * 适配器组件 diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java index c14e65e..07ddbf1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java @@ -106,4 +106,10 @@ public class AdapterComponent extends Component { public ComponentType getType() { return ComponentType.ADAPTER; } + + @Override + public void reset() { + super.reset(); + this.component.reset(); + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java index dd8734e..862af6d 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java @@ -151,4 +151,13 @@ public class ChooseComponent extends Component { public ComponentType getType() { return ComponentType.CHOOSE; } + + @Override + public void reset() { + super.reset(); + this.branches.forEach((k, v) -> v.reset()); + if (defaultBranch != null) { + defaultBranch.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java index f495930..89369f2 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java @@ -128,4 +128,13 @@ public class IfComponent extends Component{ public ComponentType getType() { return ComponentType.IF; } + + @Override + public void reset() { + super.reset(); + this.thenComponent.reset(); + if (elseComponent != null) { + elseComponent.reset(); + } + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java index 990db74..d12f7ec 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java @@ -92,6 +92,12 @@ public class PipelineComponent extends Component { @Override public ComponentType getType() { - return ComponentType.PIPELINE; + return ComponentType.SUBPROCESS; + } + + @Override + public void reset() { + super.reset(); + this.pipeline.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java index d5de986..9f8dc90 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/ComponentModel.java @@ -5,7 +5,6 @@ import org.smartboot.flow.core.common.ComponentType; import org.smartboot.flow.core.common.Uniqueness; import org.smartboot.flow.core.attribute.AttributeHolder; import org.smartboot.flow.core.component.Component; -import org.smartboot.flow.core.metrics.Metrics; import java.util.HashMap; import java.util.List; @@ -20,129 +19,50 @@ import java.util.concurrent.ConcurrentHashMap; @SuppressWarnings("rawtypes") public class ComponentModel extends Uniqueness { - private final Map holders = new ConcurrentHashMap<>(); private Component component; - private String name; - private String describe; + private final String name; private final Map components = new ConcurrentHashMap<>(); - - String executable; - ComponentType type; + private final ComponentType type; PipelineModel pipeline; - String condition; - private String branch; - private Metrics metrics; - ComponentModel(ComponentType type, String identifier) { - this.identifier = identifier; + ComponentModel(ComponentType type, String name) { + this.name = name; this.type = type; - } - - public Map getHolders() { - return holders; - } - - public void addAttributes(List attributes) { - for (AttributeHolder holder : attributes) { - this.holders.put(holder.getAttribute().getName(), holder.getValue()); - } - } - - public String getExecutable() { - return executable; - } - - public ComponentType getType() { - return type; - } - - public PipelineModel getPipeline() { - return pipeline; - } - - public String getCondition() { - return condition; - } - - public String getBranch() { - return branch; - } - - public void setBranch(String branch) { - this.branch = branch; - } - - public Map getComponents() { - return new HashMap<>(components); + this.identifier = name; } Map collect() { - if (type == ComponentType.PIPELINE) { - Map collected = this.pipeline.collect(); - collected.put(this.identifier, this); - return collected; - } else if (type == ComponentType.BASIC) { - Map temp = new HashMap<>(4); - temp.put(this.identifier, this); - return temp; + this.component.setName(name); + if (type == ComponentType.SUBPROCESS) { + return pipeline.collect(); } else { - Map temp = new HashMap<>(8); - this.components.forEach((k, v) -> temp.putAll(v.collect())); - temp.put(this.identifier, this); - return temp; + return new HashMap<>(components); } } void addComponent(ComponentModel model) { - if (this.type == ComponentType.CHOOSE) { - this.components.put(model.getBranch(), model); - } else if (this.type == ComponentType.IF) { - String key = this.components.size() > 0 ? "else" : "then"; - this.components.put(key, model); - } else { - this.components.put(model.getIdentifier(), model); - } - } - - public String getName() { - return name; - } - - public String getDescribe() { - return describe; + this.components.put(model.getIdentifier(), model); } @SuppressWarnings("unchecked") public void changeAttributes(List holders) { - Map snapshot = new HashMap<>(this.holders); AttributeValueResolver valueResolver = AttributeValueResolver.getInstance(); - try { holders.forEach(p -> { Object resolvedValue = valueResolver.resolve(p.getAttribute(), p.getValue()); p.getAttribute().apply(component, resolvedValue); }); - addAttributes(holders); - } catch (Exception e) { - this.holders.clear(); - this.holders.putAll(snapshot); + } catch (Exception ignored) { + } } - public Metrics getMetrics() { - return metrics; + public void setComponent(Component component) { + this.component = component; } public void reset() { - this.metrics.reset(); - components.forEach((k, v) -> v.reset()); - } - - public void setComponent(Component component) { - this.component = component; - this.name = component.getName(); - this.describe = component.describe(); - this.metrics = component.getMetrics(); + this.component.reset(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java index 0e03077..9b6d578 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/DefaultEngineManager.java @@ -38,7 +38,6 @@ public class DefaultEngineManager implements EngineManager { if (registeredEngines.get(engine.getName()) != null) { LOGGER.warn("engine {} already registered", engine.getName()); - return; } // Ensure engine and components is valid diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java index ec2cd54..26a6ca0 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/EngineModel.java @@ -3,13 +3,14 @@ package org.smartboot.flow.core.manager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.common.Uniqueness; import org.smartboot.flow.core.attribute.AttributeHolder; -import org.smartboot.flow.core.metrics.Metrics; +import org.smartboot.flow.core.common.Uniqueness; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** @@ -24,7 +25,10 @@ public class EngineModel extends Uniqueness { private PipelineModel pipeline; private transient final Map components = new ConcurrentHashMap<>(); - private Metrics metrics; + /** + * All flat components in engine, include pipeline and engine. + */ + private transient final List flatComponents = new ArrayList<>(); private transient FlowEngine source; public EngineModel(String name) { @@ -71,19 +75,6 @@ public class EngineModel extends Uniqueness { this.components.putAll(this.pipeline.collect()); } - public Metrics getMetrics() { - return metrics; - } - - public void setMetrics(Metrics metrics) { - this.metrics = metrics; - } - - public void reset() { - this.metrics.reset(); - this.pipeline.reset(); - } - public void reset(String identifier) { ComponentModel model = components.get(identifier); if (model == null) { @@ -93,4 +84,16 @@ public class EngineModel extends Uniqueness { model.reset(); } + + public void reset() { + this.source.reset(); + } + + void init(Set visited) { + this.flatComponents.addAll(visited); + } + + public List getAllComponents() { + return new ArrayList<>(flatComponents); + } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java new file mode 100644 index 0000000..5d543c7 --- /dev/null +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/IdentifierAllocator.java @@ -0,0 +1,20 @@ +package org.smartboot.flow.core.manager; + +import org.smartboot.flow.core.IdentifierManager; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.0 + */ +public class IdentifierAllocator implements IdentifierManager { + + private final AtomicInteger sequence = new AtomicInteger(0); + + @Override + public String allocate(String prefix) { + return "anonymous-" + prefix + sequence.addAndGet(1); + } +} diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java index 0c03cf7..bcac717 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java @@ -18,7 +18,6 @@ public class PipelineModel extends Uniqueness { private final List components = new ArrayList<>(); private final String name; - private Metrics metrics; PipelineModel(String name, String identifier) { this.name = name; @@ -39,23 +38,13 @@ public class PipelineModel extends Uniqueness { Map collect() { HashMap collected = new HashMap<>(components.size()); + for (ComponentModel model : components) { collected.putAll(model.collect()); + collected.put(model.getIdentifier(), model); } return collected; } - public Metrics getMetrics() { - return metrics; - } - - public void setMetrics(Metrics metrics) { - this.metrics = metrics; - } - - public void reset() { - this.metrics.reset(); - components.forEach(ComponentModel::reset); - } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java index a69ccc7..81c933f 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisterEngineVisitor.java @@ -1,7 +1,6 @@ package org.smartboot.flow.core.manager; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -18,6 +17,7 @@ public class RegisterEngineVisitor extends EngineVisitor { private EngineModel model; private final Set visited = new HashSet<>(32); + private final IdentifierAllocator allocator = new IdentifierAllocator(); @Override public void visit(String name, Executor executor) { @@ -27,19 +27,20 @@ public class RegisterEngineVisitor extends EngineVisitor { @Override public void visitSource(FlowEngine flowEngine) { visited.add(flowEngine); - this.model.setMetrics(flowEngine.getMetrics()); this.model.setSource(flowEngine); } @Override public PipelineVisitor visitPipeline(String pipeline) { - PipelineModel pipelineModel = new PipelineModel(pipeline, AuxiliaryUtils.contact(this.model.getIdentifier(), pipeline)); + PipelineModel pipelineModel = new PipelineModel(pipeline, pipeline); this.model.setPipeline(pipelineModel); - return new RegisteredPipelineVisitor(pipelineModel, visited); + return new RegisteredPipelineVisitor(pipelineModel, visited, allocator); } @Override public void visitEnd() { + this.model.init(visited); + this.model.collect(); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java index d664ac4..63c4172 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredComponentVisitor.java @@ -1,14 +1,12 @@ package org.smartboot.flow.core.manager; import org.smartboot.flow.core.common.ComponentType; -import org.smartboot.flow.core.attribute.AttributeHolder; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; -import java.util.List; import java.util.Set; /** @@ -20,60 +18,58 @@ public class RegisteredComponentVisitor extends ComponentVisitor { private final ComponentModel model; private final Set visited; + private final IdentifierAllocator allocator; - public RegisteredComponentVisitor(ComponentModel comp, Set visited) { + public RegisteredComponentVisitor(ComponentModel comp, Set visited, IdentifierAllocator allocator) { this.model = comp; this.visited = visited; + this.allocator = allocator; } @Override public PipelineVisitor visitPipeline(String pipeline) { - PipelineModel pipelineModel = new PipelineModel(pipeline, AuxiliaryUtils.contact(model.getIdentifier(), pipeline)); + // Re-allocate name. + if (pipeline == null || AuxiliaryUtils.isAnonymous(pipeline)) { + pipeline = allocator.allocate("pipeline"); + } + + PipelineModel pipelineModel = new PipelineModel(pipeline, pipeline); this.model.pipeline = pipelineModel; - return new RegisteredPipelineVisitor(pipelineModel, visited); + return new RegisteredPipelineVisitor(pipelineModel, visited, allocator); } @Override public void visitSource(Component component) { + this.visited.add(component); this.model.setComponent(component); } @Override public ConditionVisitor visitCondition(String condition) { - this.model.condition = (condition); return null; } @Override public ComponentVisitor visitComponent(ComponentType type, String name, String describe) { - String identifier = AuxiliaryUtils.contact(model.getIdentifier(), AuxiliaryUtils.or(name, describe)); - String branch = null; - if (this.model.type == ComponentType.CHOOSE) { - identifier = AuxiliaryUtils.contact(model.getIdentifier(), "default"); - branch = "default"; + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); } - ComponentModel comp = new ComponentModel(type, identifier); - comp.setBranch(branch); + ComponentModel comp = new ComponentModel(type, name); this.model.addComponent(comp); - return new RegisteredComponentVisitor(comp, visited); - } - - @Override - public void visitAttributes(List attributes) { - model.addAttributes(attributes); + return new RegisteredComponentVisitor(comp, visited, allocator); } @Override public ComponentVisitor visitBranch(Object branch, ComponentType type, String name, String describe) { - ComponentModel model = new ComponentModel(type, AuxiliaryUtils.contact(this.model.getIdentifier(), "branch", String.valueOf(branch))); - model.setBranch((String.valueOf(branch))); - this.model.addComponent(model); - return new RegisteredComponentVisitor(model, visited); - } + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); + } - @Override - public void visitExecutable(String executable) { - this.model.executable = (executable); + ComponentModel model = new ComponentModel(type, name); + this.model.addComponent(model); + return new RegisteredComponentVisitor(model, visited, allocator); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java index 6572eff..c2078ee 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/RegisteredPipelineVisitor.java @@ -18,16 +18,17 @@ public class RegisteredPipelineVisitor extends PipelineVisitor { private final PipelineModel pipelineModel; private final Set visited; private boolean isCycle; + private final IdentifierAllocator allocator; - public RegisteredPipelineVisitor(PipelineModel pipelineModel, Set visited) { + public RegisteredPipelineVisitor(PipelineModel pipelineModel, Set visited, IdentifierAllocator allocator) { this.pipelineModel = pipelineModel; this.visited = visited; + this.allocator = allocator; } @Override public void visitSource(Pipeline pipeline) { this.isCycle = !this.visited.add(pipeline); - pipelineModel.setMetrics(pipeline.getMetrics()); } @Override @@ -37,8 +38,13 @@ public class RegisteredPipelineVisitor extends PipelineVisitor { return null; } - ComponentModel comp = new ComponentModel(type, AuxiliaryUtils.contact(this.pipelineModel.getIdentifier(), AuxiliaryUtils.or(name, describe))); + // Re-allocate name. + if (name == null || AuxiliaryUtils.isAnonymous(name)) { + name = allocator.allocate(type.name()); + } + + ComponentModel comp = new ComponentModel(type, name); this.pipelineModel.addComponent(comp); - return new RegisteredComponentVisitor(comp, visited); + return new RegisteredComponentVisitor(comp, visited, allocator); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java index 2f15888..6589e2a 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/DefaultMetricsCreator.java @@ -7,8 +7,10 @@ package org.smartboot.flow.core.metrics; */ public class DefaultMetricsCreator implements MetricsCreator { + public static final MetricsCreator INSTANCE = new DefaultMetricsCreator(); + @Override - public Metrics create() { + public Metrics create(Object key) { return new Metrics(); } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java index 61c8ee6..1bd37b1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/Metrics.java @@ -1,13 +1,5 @@ package org.smartboot.flow.core.metrics; -import org.smartboot.flow.core.metrics.counter.Counter; -import org.smartboot.flow.core.metrics.counter.MaxCounter; -import org.smartboot.flow.core.util.AssertUtil; - -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * @author qinluo * @date 2022/11/23 21:35 @@ -15,33 +7,7 @@ import java.util.concurrent.ConcurrentHashMap; */ public class Metrics { - private final Map COUNTERS = new ConcurrentHashMap<>(); - - public void addMetric(String name, long value) { - this.addMetric(MetricKind.ACCUMULATE, name, value); - } - - public void addMetric(MetricKind kind, String name, long value) { - AssertUtil.notNull(name, "metric name must not be null"); - AssertUtil.notNull(kind, "metric kind must not be null"); - - Counter counter = COUNTERS.computeIfAbsent(name, k -> createCounter(kind)); - counter.increment(value); - } - - public Map getMetrics() { - return Collections.unmodifiableMap(COUNTERS); - } - - private Counter createCounter(MetricKind kind) { - if (kind == MetricKind.MAX) { - return new MaxCounter(); - } - - return new Counter(); - } - public void reset() { - COUNTERS.forEach((k, v) -> v.reset()); + // Reset all data. } } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java index 231b2a4..56b6a25 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsCreator.java @@ -10,7 +10,9 @@ public interface MetricsCreator { /** * 创建一个metrics实例 * + * @param key related-object. + * * @return metrics */ - Metrics create(); + Metrics create(Object key); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java index 3ad8d56..cb134a2 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricsManager.java @@ -13,7 +13,7 @@ import java.util.concurrent.ConcurrentHashMap; public class MetricsManager { private static final Map MANAGED = new ConcurrentHashMap<>(); - private static MetricsCreator metricsCreator = new DefaultMetricsCreator(); + private static MetricsCreator metricsCreator = DefaultMetricsCreator.INSTANCE; public static MetricsCreator getMetricsCreator() { return metricsCreator; @@ -27,7 +27,7 @@ public class MetricsManager { AssertUtil.notNull(key, "key must not be null!"); Metrics metrics = MANAGED.get(key); if (metrics == null) { - metrics = metricsCreator.create(); + metrics = metricsCreator.create(key); MANAGED.put(key, metrics); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java index 4bb00f6..ebf700c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java @@ -29,7 +29,7 @@ public abstract class AbstractElementParser implements ElementParser { // name String name = element.getAttribute(ParseConstants.NAME); // nested pipeline maybe no name. - if (name.trim().length() == 0 || Objects.equals(name, element.getAttribute(ParseConstants.EXECUTE))) { + if (name.trim().length() == 0) { name = context.getIdentifier(element); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java index 7cb1386..7049ef1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/BuilderDefinitionVisitor.java @@ -4,6 +4,7 @@ import org.smartboot.flow.core.Adapter; import org.smartboot.flow.core.Condition; import org.smartboot.flow.core.FlowEngine; import org.smartboot.flow.core.Pipeline; +import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.builder.AdapterBuilder; import org.smartboot.flow.core.builder.ChooseBuilder; import org.smartboot.flow.core.builder.EngineBuilder; @@ -48,10 +49,12 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { private final Map scriptConditions = new ConcurrentHashMap<>(); private final ObjectCreator objectCreator; private final boolean useCache; + private final AttributeValueResolver valueResolver; public BuilderDefinitionVisitor(boolean useCache, ObjectCreator objectCreator) { this.useCache = useCache; this.objectCreator = objectCreator; + this.valueResolver = new AttributeValueResolver(objectCreator); } @Override @@ -150,7 +153,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { @Override public void visitBasic(ElementDefinition ed) { - ExecutableBuilder builder = new ExecutableBuilder<>(); + ExecutableBuilder builder = new ExecutableBuilder<>().withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. builder.apply(p.getAttribute(), p.getValue()); @@ -176,7 +179,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { } AssertUtil.notNull(condition, "can't find condition for if-element, test = " + test); - IfComponentBuilder ifComponentBuilder = new IfComponentBuilder<>(condition); + IfComponentBuilder ifComponentBuilder = new IfComponentBuilder<>(condition).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. ifComponentBuilder.apply(p.getAttribute(), p.getValue()); @@ -216,7 +219,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { } AssertUtil.notNull(condition, "can't find condition for choose-element, test = " + test); - ChooseBuilder chooseBuilder = new ChooseBuilder<>(condition); + ChooseBuilder chooseBuilder = new ChooseBuilder<>(condition).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. chooseBuilder.apply(p.getAttribute(), p.getValue()); @@ -256,7 +259,7 @@ public class BuilderDefinitionVisitor implements DefinitionVisitor { ed.getPipelineElement().visit(this); Component component = namedComponents.get(ed.getPipelineElement().getIdentifier()); - AdapterBuilder adapterBuilder = new AdapterBuilder(adapter, component); + AdapterBuilder adapterBuilder = new AdapterBuilder(adapter, component).withResolver(valueResolver); ed.getAttributes().forEach(p -> { // resolve value type. adapterBuilder.apply(p.getAttribute(), p.getValue()); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java index 6c219e4..6dc1592 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/ParserContext.java @@ -78,14 +78,14 @@ public class ParserContext { String elementName = ElementUtils.getName(element); if (identifier == null) { - identifier = identifierManager.generateIdentifier(elementName); + identifier = identifierManager.allocate(elementName); this.generatedIdentifiers.put(element, identifier); } return identifier; } public String allocateIdentifier(String prefix) { - return identifierManager.generateIdentifier(prefix); + return identifierManager.allocate(prefix); } /** diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java index 72d31a2..659fb28 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/definition/ScriptDefinition.java @@ -28,9 +28,10 @@ public class ScriptDefinition extends ElementDefinition { javaType = AuxiliaryUtils.asClass(type); } - AssertUtil.notNull(javaType, "script type must be a javaType"); - AssertUtil.isTrue(ScriptCondition.class.isAssignableFrom(javaType), "script type must be a subclass of ScriptCondition"); - AssertUtil.isTrue(ScriptCondition.class != javaType, "script type must be a subclass of ScriptCondition"); + if (javaType != null) { + AssertUtil.isTrue(ScriptCondition.class.isAssignableFrom(javaType), "script type must be a subclass of ScriptCondition"); + AssertUtil.isTrue(ScriptCondition.class != javaType, "script type must be a subclass of ScriptCondition"); + } } /** diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java index 1d19da6..b7a13a1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Context.java @@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap; * @author huqiang * @since 1.5.1 */ +@SuppressWarnings("unchecked") public class Context { private List> mediators; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java index cdc3aed..c886ed0 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/useful/Mediator.java @@ -12,6 +12,7 @@ import java.util.concurrent.ConcurrentHashMap; * @author huqiang * @since 1.5.1 */ +@SuppressWarnings("unchecked") public final class Mediator { /** diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java index 8ba3a4b..411dbed 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/util/AuxiliaryUtils.java @@ -46,14 +46,7 @@ public final class AuxiliaryUtils { } } - public static String contact(String p, Object ...s) { - StringBuilder sb = new StringBuilder(); - sb.append(p); - - for (Object suffix : s) { - sb.append("-").append(suffix); - } - - return sb.toString(); + public static boolean isAnonymous(String name) { + return name != null && name.contains("anonymous"); } } diff --git a/smart-flow-helper/pom.xml b/smart-flow-helper/pom.xml index f85faf0..701fc2a 100644 --- a/smart-flow-helper/pom.xml +++ b/smart-flow-helper/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 @@ -20,7 +20,7 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7 diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java index 31a7495..eddd0b1 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/PlantumlComponent.java @@ -124,7 +124,7 @@ public class PlantumlComponent extends ComponentVisitor { content.append("endswitch\n"); - } else if (type == ComponentType.PIPELINE) { + } else if (type == ComponentType.SUBPROCESS) { if (isAsync()) { content.append("-[dashed]->异步;\n"); } @@ -215,7 +215,7 @@ public class PlantumlComponent extends ComponentVisitor { }); } - if (this.type == ComponentType.PIPELINE) { + if (this.type == ComponentType.SUBPROCESS) { this.pipeline.eraser(); } else if (this.type != ComponentType.BASIC) { this.components.forEach(p -> p.eraser(false)); diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java index 501a045..e291e9e 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/ScriptCollector.java @@ -1,5 +1,7 @@ package org.smartboot.flow.helper.view; +import org.smartboot.flow.core.common.Pair; + import java.util.HashMap; import java.util.Map; @@ -13,20 +15,20 @@ import java.util.Map; public class ScriptCollector { private static final ThreadLocal HOLDER = new ThreadLocal<>(); - private final Map scripts = new HashMap<>(); + private final Map> scripts = new HashMap<>(); public static void start() { HOLDER.set(new ScriptCollector()); } - public static void collect(String condition, String script) { + public static void collect(String condition, String script, String name) { ScriptCollector collector = HOLDER.get(); if (collector != null) { - collector.scripts.put(condition, script); + collector.scripts.put(condition, Pair.of(name, script)); } } - public static Map end() { + public static Map> end() { ScriptCollector collector = HOLDER.get(); if (collector != null) { HOLDER.remove(); diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java index 9d1d4af..b69911e 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlComponentVisitor.java @@ -1,7 +1,11 @@ package org.smartboot.flow.helper.view; +import org.smartboot.flow.core.Condition; +import org.smartboot.flow.core.NamedCondition; import org.smartboot.flow.core.attribute.AttributeHolder; +import org.smartboot.flow.core.attribute.Attributes; import org.smartboot.flow.core.common.ComponentType; +import org.smartboot.flow.core.script.ScriptCondition; import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; @@ -30,10 +34,13 @@ public class XmlComponentVisitor extends ComponentVisitor { private final Set visited; private String executable; private String script; + private String scriptName; + private final String name; public XmlComponentVisitor(ComponentType type, String name, String describe, Set visited) { this.type = type; this.visited = visited; + this.name = name; } @Override @@ -80,10 +87,12 @@ public class XmlComponentVisitor extends ComponentVisitor { } public void generate(StringBuilder content, int numbersOfTab) { - ComponentType type = this.type; + if (name != null && !AuxiliaryUtils.isAnonymous(name)) { + addAttributeName(); + } if (script != null) { - ScriptCollector.collect(condition, script); + ScriptCollector.collect(condition, script, scriptName); } if (type == ComponentType.BASIC) { @@ -136,7 +145,7 @@ public class XmlComponentVisitor extends ComponentVisitor { AuxiliaryUtils.appendTab(content, numbersOfTab); content.append("\n"); - } else if (type == ComponentType.PIPELINE) { + } else if (type == ComponentType.SUBPROCESS) { if (pipeline.isCycle()) { AuxiliaryUtils.appendTab(content, numbersOfTab); content.append(" p.getAttribute() == Attributes.NAME).findFirst().orElse(null); + if (ab == null) { + attributes.add(AttributeHolder.of(Attributes.NAME, name)); + } + + } + private class XmlConditionVisitor extends ConditionVisitor { @Override public void visitScript(String script) { XmlComponentVisitor.this.script = script; } + + @Override + public void visitSource(Condition condition) { + if (condition instanceof ScriptCondition) { + NamedCondition sc = (NamedCondition) condition; + XmlComponentVisitor.this.scriptName = sc.getName(); + } + } } } diff --git a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java index b91be98..b65bbea 100644 --- a/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java +++ b/smart-flow-helper/src/main/java/org/smartboot/flow/helper/view/XmlEngineVisitor.java @@ -1,6 +1,7 @@ package org.smartboot.flow.helper.view; import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.core.common.Pair; import org.smartboot.flow.core.visitor.EngineVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -16,7 +17,7 @@ import java.util.concurrent.Executor; */ public class XmlEngineVisitor extends EngineVisitor { - private static final String START = "\n\n" + + private static final String START = "\n" + " scripts = ScriptCollector.end(); + Map> scripts = ScriptCollector.end(); if (scripts != null && scripts.size() > 0) { - scripts.forEach((k, v) -> { - content.append("\n\t"); - }); + scripts.forEach((k, v) -> content.append("\n\t")); } content.append("\n").append(END).append("\n"); diff --git a/smart-flow-manager/pom.xml b/smart-flow-manager/pom.xml index d20e9a4..902c0c2 100644 --- a/smart-flow-manager/pom.xml +++ b/smart-flow-manager/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 @@ -20,13 +20,13 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7 org.smartboot.flow smart-flow-helper - 1.0.6 + 1.0.7 diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java new file mode 100644 index 0000000..95c5f0a --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatEngine.java @@ -0,0 +1,71 @@ +package org.smartboot.flow.manager; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.7 + */ +public class FlatEngine { + + /** + * Md5 string + */ + private String md5; + + /** + * xml content. + */ + private String content; + + /** + * engine created stamp. + */ + private long timestamp; + + /** + * engine name. + */ + private String name; + + private volatile boolean reportContent; + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean getReportContent() { + return reportContent; + } + + public void setReportContent(boolean reportContent) { + this.reportContent = reportContent; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java new file mode 100644 index 0000000..fd9ba0f --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/FlatManager.java @@ -0,0 +1,61 @@ +package org.smartboot.flow.manager; + +import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.helper.view.XmlEngineVisitor; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Base64; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Flat engine manager. + * + * @author qinluo + * @date 2023/1/30 22:43 + * @since 1.0.7 + */ +public class FlatManager { + + private static final FlatManager INSTANCE = new FlatManager(); + private final Map flatEngineMap = new ConcurrentHashMap<>(8); + + public static FlatManager getInstance() { + return INSTANCE; + } + + public FlatEngine getFlatEngine(FlowEngine source) { + FlatEngine flatEngine = flatEngineMap.get(source.getName()); + if (flatEngine == null || flatEngine.getTimestamp() != source.getStartedAt()) { + flatEngine = createFlatEngine(source); + flatEngineMap.put(source.getName(), flatEngine); + } + + return flatEngine; + } + + private FlatEngine createFlatEngine(FlowEngine source) { + FlatEngine engine = new FlatEngine(); + engine.setTimestamp(source.getStartedAt()); + engine.setName(source.getName()); + engine.setReportContent(true); + + XmlEngineVisitor visitor = new XmlEngineVisitor(); + visitor.visit(source); + String content = visitor.getContent(); + engine.setContent(content); + engine.setMd5(encryptMd5(content)); + return engine; + } + + private static String encryptMd5(String content) { + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + byte[] md5Bytes = md5.digest(content.getBytes(StandardCharsets.UTF_8)); + return new String(Base64.getEncoder().encode(md5Bytes), StandardCharsets.UTF_8); + } catch (Exception e) { + return null; + } + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java similarity index 97% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java index 79a9c75..d436481 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HostUtils.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/HostUtils.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.manager.report; +package org.smartboot.flow.manager; import java.net.InetAddress; import java.net.NetworkInterface; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java index 7bed422..59801cb 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConstants.java @@ -2,11 +2,32 @@ package org.smartboot.flow.manager; /** * @author qinluo - * @date 2023/2/1 21:56 - * @since 1.0.0 + * @date 2023/1/30 22:43 + * @since 1.0.7 */ public interface ManagerConstants { + /** + * 快照查询,决定是否需要上报引擎结构 + */ + String SNAPSHOT_QUERY = "/api/report/query"; + String SNAPSHOT_QUERY_PARAM = "engineMd5"; + + /** + * 上报统计数据 + */ + String REPORT_METRICS = "/api/report/metrics"; + + /** + * 上报执行链路数据 + */ + String REPORT_TRACE = "/api/report/trace"; + + /** + * 拉取待执行的commands. + */ + String MANAGER_COMMAND = "/api/manager/commands"; + /** * Http success code. */ diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java deleted file mode 100644 index eb496b4..0000000 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerExecutionListener.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.smartboot.flow.manager; - -import org.smartboot.flow.core.EngineContext; -import org.smartboot.flow.core.ExecutionListenerSupport; - -/** - * 由管理模块进行Listener的注册 - * - * @author qinluo - * @date 2023/1/30 22:42 - * @since 1.0.0 - */ -public class ManagerExecutionListener extends ExecutionListenerSupport { - - @Override - public void start(EngineContext context) { - TraceIdGenerator generator = TraceIdGenerator.getTraceIdGenerator(); - if (generator != null) { - context.putExt(ManagerKeys.TRACE_ID, generator.getTraceId(context)); - } - - // 暂时init个object - context.putExt(ManagerKeys.TRACES, new Object()); - - } - - @Override - public void completed(EngineContext context) { - // 将执行采集到的数据进行上报 - } -} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java deleted file mode 100644 index c36e689..0000000 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerKeys.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.smartboot.flow.manager; - -import org.smartboot.flow.core.Key; - -/** - * @author qinluo - * @date 2023/1/30 22:43 - * @since 1.0.0 - */ -public interface ManagerKeys { - - /** - * TraceId key in engine ctx. - */ - Key TRACE_ID = Key.of("traceId"); - - /** - * Invoke trace in engine invoking. - * - */ - Key TRACES = Key.of("traces"); - - -} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java new file mode 100644 index 0000000..799eb1f --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/UpdateContentTask.java @@ -0,0 +1,94 @@ +package org.smartboot.flow.manager; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.smartboot.flow.core.manager.DefaultEngineManager; +import org.smartboot.flow.core.manager.EngineManager; +import org.smartboot.flow.core.manager.EngineModel; +import org.smartboot.flow.core.util.AuxiliaryUtils; +import org.smartboot.http.client.HttpClient; +import org.smartboot.http.client.HttpGet; + +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.7 + */ +public class UpdateContentTask extends Thread { + + private static volatile boolean started; + private static final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("query-thread")); + + private final String host; + private final int port; + + public UpdateContentTask(String host, int port) { + this.host = host; + this.port = port; + } + + public synchronized static void startTask(String host, int port) { + if (started) { + return; + } + + started = true; + executorService.schedule(new UpdateContentTask(host, port), 1, TimeUnit.SECONDS); + } + + @Override + public void run() { + + try { + executeQuery(); + } finally { + executorService.schedule(new UpdateContentTask(host, port), 5, TimeUnit.SECONDS); + } + + } + + private void executeQuery() { + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + List allEngines = defaultManager.getRegisteredEngineNames(); + StringBuilder sb = new StringBuilder(); + for (String name : allEngines) { + EngineModel model = defaultManager.getEngineModel(name); + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(model.getSource()); + if (flatEngine.getReportContent()) { + sb.append(flatEngine.getName()).append("-") + .append(flatEngine.getMd5()).append(","); + } + } + + String value = sb.toString(); + if (AuxiliaryUtils.isBlank(value)) { + return; + } + + HttpClient httpClient = new HttpClient(host, port); + httpClient.timeout(5000); + httpClient.connect(); + HttpGet httpGet = httpClient.get(ManagerConstants.SNAPSHOT_QUERY); + httpGet.addQueryParam(ManagerConstants.SNAPSHOT_QUERY_PARAM, value); + httpGet.onSuccess(response -> { + JSONObject data = JSONObject.parseObject(response.body()); + Boolean success = data.getBoolean("success"); + if (!success) { + return; + } + + List engineNames = JSONArray.parseArray(data.getString("data"), String.class); + engineNames.forEach(p -> { + EngineModel model = defaultManager.getEngineModel(p); + FlatManager.getInstance().getFlatEngine(model.getSource()).setReportContent(false); + }); + }).onFailure(e -> { + + }).send(); + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java index 7b3b5cb..d043c0a 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/change/HttpManager.java @@ -10,7 +10,7 @@ import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.manager.ManagerConstants; import org.smartboot.flow.manager.NamedThreadFactory; import org.smartboot.flow.manager.reload.Reloader; -import org.smartboot.flow.manager.report.HostUtils; +import org.smartboot.flow.manager.HostUtils; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java similarity index 89% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java index c8be0c2..f456d14 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/Counter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/Counter.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics.counter; +package org.smartboot.flow.manager.metric; import java.util.concurrent.atomic.LongAdder; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java new file mode 100644 index 0000000..d8ca163 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java @@ -0,0 +1,46 @@ +package org.smartboot.flow.manager.metric; + +import org.smartboot.flow.core.metrics.Metrics; +import org.smartboot.flow.core.util.AssertUtil; + +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author qinluo + * @date 2022/11/23 21:35 + * @since 1.0.7 + */ +public class DefaultMetrics extends Metrics { + + private final Map COUNTERS = new ConcurrentHashMap<>(); + + public void addMetric(String name, long value) { + this.addMetric(MetricKind.ACCUMULATE, name, value); + } + + public void addMetric(MetricKind kind, String name, long value) { + AssertUtil.notNull(name, "metric name must not be null"); + AssertUtil.notNull(kind, "metric kind must not be null"); + + Counter counter = COUNTERS.computeIfAbsent(name, k -> createCounter(kind)); + counter.increment(value); + } + + public Map getMetrics() { + return Collections.unmodifiableMap(COUNTERS); + } + + private Counter createCounter(MetricKind kind) { + if (kind == MetricKind.MAX) { + return new MaxCounter(); + } + + return new Counter(); + } + + public void reset() { + COUNTERS.forEach((k, v) -> v.reset()); + } +} diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java similarity index 92% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java index 2166e19..193a93a 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/counter/MaxCounter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MaxCounter.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics.counter; +package org.smartboot.flow.manager.metric; import java.util.concurrent.atomic.AtomicLong; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java similarity index 82% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java index 8eb1fd5..34e697c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java @@ -1,10 +1,11 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.ExecutionListener; import org.smartboot.flow.core.ExecutionListenerSupport; import org.smartboot.flow.core.Key; import org.smartboot.flow.core.Measurable; +import org.smartboot.flow.core.metrics.Metrics; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -30,7 +31,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { Measurable measurable = (Measurable) object; Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + if (metrics.getClass() != DefaultMetrics.class) { return; } @@ -40,7 +41,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { context.putExt(Key.of(this), escaped); } - metrics.addMetric(NamedMetrics.EXECUTE, 1); + ((DefaultMetrics)metrics).addMetric(NamedMetrics.EXECUTE, 1); escaped.put(object, System.currentTimeMillis()); } @@ -51,8 +52,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -66,6 +67,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; if (context.getFatal() != null) { metrics.addMetric(NamedMetrics.FAIL, 1); } @@ -81,8 +83,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -91,6 +93,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; metrics.addMetric(NamedMetrics.ROLLBACK, 1); escaped.put(object, System.currentTimeMillis()); } @@ -102,8 +105,8 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } Measurable measurable = (Measurable) object; - Metrics metrics = measurable.getMetrics(); - if (metrics.getClass() != Metrics.class) { + Metrics m = measurable.getMetrics(); + if (m.getClass() != DefaultMetrics.class) { return; } @@ -117,6 +120,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { return; } + DefaultMetrics metrics = (DefaultMetrics) m; long now = System.currentTimeMillis(); metrics.addMetric(NamedMetrics.ROLLBACK_TOTAL_ESCAPE, (now - start)); metrics.addMetric(MetricKind.MAX, NamedMetrics.ROLLBACK_MAX_ESCAPE, (now - start)); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java similarity index 80% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java index 921b016..94665ab 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/MetricKind.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricKind.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; /** * @author qinluo diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java similarity index 89% rename from smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java index 7a81a92..4b55f87 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/metrics/NamedMetrics.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/NamedMetrics.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.core.metrics; +package org.smartboot.flow.manager.metric; /** * @author qinluo diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java index a4721f9..b04a404 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/reload/XmlParseReloader.java @@ -1,10 +1,7 @@ package org.smartboot.flow.manager.reload; import org.smartboot.flow.core.FlowEngine; -import org.smartboot.flow.core.attribute.AttributeValueResolver; import org.smartboot.flow.core.exception.FlowException; -import org.smartboot.flow.core.manager.DefaultEngineManager; -import org.smartboot.flow.core.manager.EngineManager; import org.smartboot.flow.core.parser.DefaultObjectCreator; import org.smartboot.flow.core.parser.DefaultParser; import org.smartboot.flow.core.parser.DefinitionVisitor; @@ -59,20 +56,16 @@ public class XmlParseReloader extends AbstractReloader { // object creator include independent and spring ref independent. parser.setObjectCreator(objectCreator); parser.setAssemble(assemble); - AttributeValueResolver.getInstance().setObjectCreator(objectCreator); // parse parser.parse(stream); - EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); - // if assemble if (assemble) { List engineNames = parser.getEngineNames(); engineNames.forEach(p -> { FlowEngine engine = parser.getEngine(p); if (engine != null) { - defaultManager.detach(p); engine.validate(); } }); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java index 8de4864..a9bef5c 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReportModel.java @@ -1,7 +1,5 @@ package org.smartboot.flow.manager.report; -import org.smartboot.flow.core.manager.EngineModel; - import java.io.Serializable; /** @@ -15,7 +13,10 @@ public class HttpReportModel implements Serializable { private long timestamp; private String address; private String host; - private EngineModel data; + private String engineName; + private String md5; + private String content; + private Serializable json; public long getTimestamp() { return timestamp; @@ -41,11 +42,35 @@ public class HttpReportModel implements Serializable { this.host = host; } - public EngineModel getData() { - return data; + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Serializable getJson() { + return json; } - public void setData(EngineModel data) { - this.data = data; + public void setJson(Serializable json) { + this.json = json; } } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java index d59d9b0..3556614 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/report/HttpReporter.java @@ -1,17 +1,35 @@ package org.smartboot.flow.manager.report; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.ExecutionListenerRegistry; +import org.smartboot.flow.core.FlowEngine; +import org.smartboot.flow.core.Measurable; +import org.smartboot.flow.core.Pipeline; +import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.manager.EngineModel; +import org.smartboot.flow.core.metrics.DefaultMetricsCreator; +import org.smartboot.flow.core.metrics.MetricsCreator; +import org.smartboot.flow.core.metrics.MetricsManager; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.manager.FlatEngine; +import org.smartboot.flow.manager.FlatManager; +import org.smartboot.flow.manager.HostUtils; +import org.smartboot.flow.manager.ManagerConstants; +import org.smartboot.flow.manager.UpdateContentTask; +import org.smartboot.flow.manager.metric.DefaultMetrics; +import org.smartboot.flow.manager.metric.MetricExecutionListener; import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.Map; /** @@ -23,35 +41,50 @@ public class HttpReporter extends AbstractReporter { private static final Logger LOGGER = LoggerFactory.getLogger(HttpReporter.class); - private String url; + /** + * 服务端地址 + */ + private String serverAddress; + + /** + * 超时时间 + */ private long timeout; - private URL parsedUrl; + private String host; + private int port; + private Map headers; @Override public void start() { + URL parsedUrl; try { - this.parsedUrl = new URL(url); + parsedUrl = new URL(serverAddress); } catch (Exception e) { - throw new IllegalStateException("invalid url " + url, e); + throw new IllegalStateException("invalid url " + serverAddress, e); + } + this.host = parsedUrl.getHost(); + this.port = parsedUrl.getPort(); + + // Register creator and listener. + MetricsCreator metricsCreator = MetricsManager.getMetricsCreator(); + if (metricsCreator == DefaultMetricsCreator.INSTANCE) { + MetricsManager.setMetricsCreator(k -> new DefaultMetrics()); + ExecutionListenerRegistry.register(MetricExecutionListener.getInstance()); } + UpdateContentTask.startTask(host, port); super.start(); } @Override public void doExport(EngineModel model) { - AssertUtil.notNull(parsedUrl, "url is invalid."); + AssertUtil.notNull(host, "address is invalid."); - String path = parsedUrl.getPath(); - if (parsedUrl.getQuery() != null) { - path = path + "?" + parsedUrl.getQuery(); - } - - HttpClient httpClient = new HttpClient(parsedUrl.getHost(), parsedUrl.getPort()); + HttpClient httpClient = new HttpClient(host, port); httpClient.timeout((int)timeout); httpClient.connect(); - HttpPost post = httpClient.post(path); + HttpPost post = httpClient.post(ManagerConstants.REPORT_METRICS); if (headers != null) { headers.forEach(post::addHeader); @@ -61,7 +94,38 @@ public class HttpReporter extends AbstractReporter { reportModel.setAddress(HostUtils.getHostIp()); reportModel.setHost(HostUtils.getHostName()); reportModel.setTimestamp(System.currentTimeMillis()); - reportModel.setData(model); + reportModel.setEngineName(model.getIdentifier()); + + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(model.getSource()); + reportModel.setMd5(flatEngine.getMd5()); + + if (flatEngine.getReportContent()) { + reportModel.setContent(flatEngine.getContent()); + } + + List allComponents = model.getAllComponents(); + JSONArray array = new JSONArray(); + for (Object com : allComponents) { + Measurable measurable = (Measurable)com; + + JSONObject item = new JSONObject(); + item.put("metrics", measurable.getMetrics()); + + if (com instanceof Component) { + item.put("name", ((Component) com).getName()); + item.put("type", ((Component) com).getType()); + } else if (com instanceof Pipeline) { + item.put("name", ((Pipeline) com).describe()); + item.put("type", "pipeline"); + } else { + item.put("name", ((FlowEngine) com).getName()); + item.put("type", "engine"); + } + + array.add(item); + } + reportModel.setJson(array); + String json = JSON.toJSONString(reportModel, SerializerFeature.WriteEnumUsingToString); byte[] bytes = json.getBytes(StandardCharsets.UTF_8); @@ -90,12 +154,12 @@ public class HttpReporter extends AbstractReporter { this.headers = headers; } - public String getUrl() { - return url; + public String getServerAddress() { + return serverAddress; } - public void setUrl(String url) { - this.url = url; + public void setServerAddress(String serverAddress) { + this.serverAddress = serverAddress; } public long getTimeout() { diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java new file mode 100644 index 0000000..457f7f3 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ComponentData.java @@ -0,0 +1,83 @@ +package org.smartboot.flow.manager.trace; + +import org.smartboot.flow.core.component.Component; + +/** + * @author qinluo + * @date 2023/2/8 1:04 + * @since 1.0.7 + */ +@SuppressWarnings("rawtypes") +public class ComponentData { + + /** + * component source. + */ + private Component source; + + private final long start; + private long escape; + private Throwable ex; + private Object ctx; + private long rollbackStart; + private long rollbackEnd; + + public ComponentData(Component source, Object ctx) { + this.source = source; + this.start = System.currentTimeMillis(); + this.ctx = ctx; + + } + + public long getRollbackStart() { + return rollbackStart; + } + + public void setRollbackStart(long rollbackStart) { + this.rollbackStart = rollbackStart; + } + + public long getRollbackEnd() { + return rollbackEnd; + } + + public void setRollbackEnd(long rollbackEnd) { + this.rollbackEnd = rollbackEnd; + } + + public Component getSource() { + return source; + } + + public void setSource(Component source) { + this.source = source; + } + + public long getStart() { + return start; + } + + public long getEscape() { + return escape; + } + + public void setEscape(long escape) { + this.escape = escape; + } + + public Throwable getEx() { + return ex; + } + + public void setEx(Throwable ex) { + this.ex = ex; + } + + public Object getCtx() { + return ctx; + } + + public void setCtx(Object ctx) { + this.ctx = ctx; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java new file mode 100644 index 0000000..914fe68 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -0,0 +1,131 @@ +package org.smartboot.flow.manager.trace; + +import org.smartboot.flow.core.EngineContext; +import org.smartboot.flow.core.ExecutionListenerSupport; +import org.smartboot.flow.core.Key; +import org.smartboot.flow.core.component.Component; + +/** + * 由管理模块进行Listener的注册 + * + * @author qinluo + * @date 2023/1/30 22:42 + * @since 1.0.7 + */ +@SuppressWarnings("rawtypes") +public class ManagerExecutionListener extends ExecutionListenerSupport { + + /** + * Invoke trace in engine invoking. + */ + private static final Key TRACES = Key.of("traces"); + private final TraceReporter traceReporter; + private final TraceSampleStrategy sampleStrategy; + + ManagerExecutionListener(TraceReporter traceReporter, TraceSampleStrategy sampleStrategy) { + this.traceReporter = traceReporter; + this.sampleStrategy = sampleStrategy; + } + + @Override + public void start(EngineContext context) { + TraceIdGenerator generator = TraceIdGenerator.getTraceIdGenerator(); + if (generator == null) { + return; + } + + // init trace. + TraceData trace = new TraceData(); + trace.setEngineName(context.getEngineName()); + trace.setTraceId(generator.getTraceId(context)); + + // 暂时init个object + context.putExt(TRACES, trace); + + } + + @Override + public void beforeExecute(EngineContext context, Object object) { + TraceData trace = context.getExt(TRACES); + if (trace == null) { + return; + } + + if (object instanceof Component) { + Component comp = (Component) object; + trace.add(comp, new ComponentData(comp, context)); + } + } + + @Override + public void afterExecute(EngineContext context, Object object) { + TraceData trace = context.getExt(TRACES); + if (trace == null) { + return; + } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) return; + + data.setEscape(System.currentTimeMillis() - data.getStart()); + data.setEx(context.getFatal()); + } + + @Override + public void beforeRollback(EngineContext context, Object object) { + TraceData trace = context.getExt(TRACES); + if (trace == null) { + return; + } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) return; + + data.setRollbackStart(System.currentTimeMillis()); + } + + @Override + public void afterRollback(EngineContext context, Object object) { + TraceData trace = context.getExt(TRACES); + if (trace == null) { + return; + } + + if (!(object instanceof Component)) { + return; + } + + ComponentData data = getComponentData(object, trace); + if (data == null) { + return; + } + + data.setRollbackEnd(System.currentTimeMillis()); + } + + private ComponentData getComponentData(Object obj, TraceData trace) { + Component comp = (Component) obj; + return trace.getData(comp); + } + + @Override + public void completed(EngineContext context) { + TraceData trace = context.getExt(TRACES); + if (trace == null) { + return; + } + + if (sampleStrategy == null || sampleStrategy.sampled(context)) { + // 将执行采集到的数据进行上报 + traceReporter.submit(trace); + } + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java new file mode 100644 index 0000000..505087e --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceData.java @@ -0,0 +1,56 @@ +package org.smartboot.flow.manager.trace; + +import org.smartboot.flow.core.component.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author qinluo + * @date 2023/2/8 1:00 + * @since 1.0.7 + */ +@SuppressWarnings("rawtypes") +public class TraceData { + + private String engineName; + private String traceId; + private Throwable ex; + private final Map components = new ConcurrentHashMap<>(); + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } + + public Throwable getEx() { + return ex; + } + + public void setEx(Throwable ex) { + this.ex = ex; + } + + public Map getComponents() { + return components; + } + + public void add(Component comp, ComponentData data) { + components.put(comp, data); + } + + public ComponentData getData(Component comp) { + return components.get(comp); + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java similarity index 93% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java rename to smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java index 054e1d5..a6ab8b1 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/TraceIdGenerator.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceIdGenerator.java @@ -1,4 +1,4 @@ -package org.smartboot.flow.manager; +package org.smartboot.flow.manager.trace; import org.smartboot.flow.core.EngineContext; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java new file mode 100644 index 0000000..6c33224 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java @@ -0,0 +1,85 @@ +package org.smartboot.flow.manager.trace; + +import java.io.Serializable; + +/** + * @author qinluo + * @date 2022-11-25 21:38:04 + * @since 1.0.7 + */ +public class TraceReportRequest implements Serializable { + private static final long serialVersionUID = -457007982997285755L; + + private long timestamp; + private String address; + private String host; + private String engineName; + private String md5; + private String content; + private String traceId; + private Serializable json; + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Serializable getJson() { + return json; + } + + public void setJson(Serializable json) { + this.json = json; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java new file mode 100644 index 0000000..bede7ed --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -0,0 +1,209 @@ +package org.smartboot.flow.manager.trace; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.smartboot.flow.core.ExecutionListenerRegistry; +import org.smartboot.flow.core.manager.DefaultEngineManager; +import org.smartboot.flow.core.manager.EngineManager; +import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.manager.FlatEngine; +import org.smartboot.flow.manager.FlatManager; +import org.smartboot.flow.manager.HostUtils; +import org.smartboot.flow.manager.ManagerConstants; +import org.smartboot.flow.manager.NamedThreadFactory; +import org.smartboot.flow.manager.UpdateContentTask; +import org.smartboot.http.client.HttpClient; +import org.smartboot.http.client.HttpPost; +import org.smartboot.http.common.enums.HeaderNameEnum; + +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author qinluo + * @date 2023-02-07 + * @since 1.0.7 + */ +public class TraceReporter { + + private static final Logger LOGGER = LoggerFactory.getLogger(TraceReporter.class); + private final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("export-trace")); + + /** + * Report idle in mills. + */ + protected long idle = 5000L; + + /** + * 服务端地址 + */ + private String serverAddress; + + /** + * 超时时间 + */ + private long timeout; + private String host; + private int port; + private Double radio; + private TraceSampleStrategy sampleStrategy; + + private Map headers; + private final BlockingQueue traceQueue = new ArrayBlockingQueue<>(20000); + + public long getIdle() { + return idle; + } + + public void setIdle(long idle) { + AssertUtil.isTrue(idle > 0, "idle must great than zero"); + this.idle = idle; + } + + public void export() { + List traces = new ArrayList<>(); + if (traceQueue.drainTo(traces) < 0) { + return; + } + + HttpClient httpClient = new HttpClient(host, port); + httpClient.timeout((int)timeout); + httpClient.connect(); + EngineManager defaultManager = DefaultEngineManager.getDefaultManager(); + + for (TraceData trace : traces) { + HttpPost post = httpClient.post(ManagerConstants.REPORT_TRACE); + + if (headers != null) { + headers.forEach(post::addHeader); + } + + TraceReportRequest request = new TraceReportRequest(); + request.setAddress(HostUtils.getHostIp()); + request.setHost(HostUtils.getHostName()); + request.setTimestamp(System.currentTimeMillis()); + FlatEngine flatEngine = FlatManager.getInstance().getFlatEngine(defaultManager.getEngineModel(trace.getEngineName()).getSource()); + request.setMd5(flatEngine.getMd5()); + request.setTraceId(trace.getTraceId()); + request.setEngineName(trace.getEngineName()); + + if (flatEngine.getReportContent()) { + request.setContent(flatEngine.getContent()); + } + + JSONArray ja = new JSONArray(); + + trace.getComponents().forEach((k , v) -> { + JSONObject item = new JSONObject(); + item.put("name", k.getName()); + item.put("type", k.getType()); + item.put("start", v.getStart()); + item.put("escape", v.getEscape()); + item.put("ex", v.getEx()); + item.put("rollbackStart", v.getRollbackStart()); + item.put("rollbackEnd", v.getRollbackEnd()); + + ja.add(item); + }); + + request.setJson(ja); + + String json = JSON.toJSONString(request, SerializerFeature.WriteEnumUsingToString); + byte[] bytes = json.getBytes(StandardCharsets.UTF_8); + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("report trace data, engine = {}, data = {}", trace.getEngineName(), JSON.toJSONString(request)); + } + + post.addHeader(HeaderNameEnum.CONTENT_TYPE.getName(), "application/json;charset=UTF-8"); + post.addHeader(HeaderNameEnum.CONTENT_LENGTH.getName(), String.valueOf(bytes.length)); + + // Use body stream write. + post.bodyStream().write(bytes, 0, bytes.length); + post.bodyStream().flush(); + post.onSuccess(httpResponse -> {}) + .onFailure(throwable -> {}); + + post.send(); + + } + } + + public void start() { + URL parsedUrl; + try { + parsedUrl = new URL(serverAddress); + } catch (Exception e) { + throw new IllegalStateException("invalid url " + serverAddress, e); + } + this.host = parsedUrl.getHost(); + this.port = parsedUrl.getPort(); + + // Register listener. + if (sampleStrategy == null && radio != null && radio > 0 && radio <= 1) { + sampleStrategy = new TraceSampleStrategy(); + sampleStrategy.setRadio(radio); + } + + ExecutionListenerRegistry.register(new ManagerExecutionListener(this, sampleStrategy)); + this.executorService.schedule(this::export, idle, TimeUnit.MILLISECONDS); + UpdateContentTask.startTask(host, port); + } + + public void submit(TraceData item) { + //noinspection ResultOfMethodCallIgnored + traceQueue.offer(item); + } + + public String getServerAddress() { + return serverAddress; + } + + public void setServerAddress(String serverAddress) { + this.serverAddress = serverAddress; + } + + public long getTimeout() { + return timeout; + } + + public void setTimeout(long timeout) { + this.timeout = timeout; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public Double getRadio() { + return radio; + } + + public void setRadio(Double radio) { + this.radio = radio; + } + + public TraceSampleStrategy getSampleStrategy() { + return sampleStrategy; + } + + public void setSampleStrategy(TraceSampleStrategy sampleStrategy) { + this.sampleStrategy = sampleStrategy; + } +} diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java new file mode 100644 index 0000000..9c87d04 --- /dev/null +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceSampleStrategy.java @@ -0,0 +1,27 @@ +package org.smartboot.flow.manager.trace; + +import org.smartboot.flow.core.EngineContext; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author qinluo + * @date 2023/2/8 1:09 + * @since 1.0.0 + */ +public class TraceSampleStrategy { + + private double radio; + + public double getRadio() { + return radio; + } + + public void setRadio(double radio) { + this.radio = radio; + } + + public boolean sampled(EngineContext ctx) { + return ThreadLocalRandom.current().nextDouble(1) < radio; + } +} diff --git a/smart-flow-script-condition/pom.xml b/smart-flow-script-condition/pom.xml index 84f5b3c..8fc7243 100644 --- a/smart-flow-script-condition/pom.xml +++ b/smart-flow-script-condition/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 pom @@ -27,7 +27,7 @@ org.smartboot.flow smart-flow-core - 1.0.6 + 1.0.7 diff --git a/smart-flow-script-condition/smart-flow-script-groovy/pom.xml b/smart-flow-script-condition/smart-flow-script-groovy/pom.xml index 7107f2b..1bfa394 100644 --- a/smart-flow-script-condition/smart-flow-script-groovy/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-groovy/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 diff --git a/smart-flow-script-condition/smart-flow-script-ognl/pom.xml b/smart-flow-script-condition/smart-flow-script-ognl/pom.xml index 5dceee8..3dc13ca 100644 --- a/smart-flow-script-condition/smart-flow-script-ognl/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-ognl/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 diff --git a/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml b/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml index 1f74cee..d1cc4b4 100644 --- a/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml +++ b/smart-flow-script-condition/smart-flow-script-qlexpress/pom.xml @@ -5,7 +5,7 @@ smart-flow-script-condition org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 diff --git a/smart-flow-spring-extension/pom.xml b/smart-flow-spring-extension/pom.xml index de904ff..245af97 100644 --- a/smart-flow-spring-extension/pom.xml +++ b/smart-flow-spring-extension/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 @@ -22,7 +22,7 @@ org.smartboot.flow smart-flow-manager - 1.0.6 + 1.0.7 diff --git a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java index 27a13bc..c1345b8 100644 --- a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/BeanDefinitionVisitor.java @@ -104,6 +104,7 @@ public class BeanDefinitionVisitor implements DefinitionVisitor, BeanFactoryAwar definition.setBeanClass(ed.resolveType()); definition.getPropertyValues().addPropertyValue(name); definition.getPropertyValues().addPropertyValue(pipeline); + definition.setInitMethodName("validate"); register.registerBeanDefinition(ed.getIdentifier(), definition, true); } diff --git a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java index 5a50639..086d029 100644 --- a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/SpringIdentifierManager.java @@ -20,10 +20,10 @@ public class SpringIdentifierManager implements IdentifierManager { private final IdentifierManager identifierManager = new DefaultIdentifierManager(); @Override - public String generateIdentifier(String prefix) { - String identifier = identifierManager.generateIdentifier(prefix); + public String allocate(String prefix) { + String identifier = identifierManager.allocate(prefix); while (registry.containsBeanDefinition(identifier)) { - identifier = identifierManager.generateIdentifier(prefix); + identifier = identifierManager.allocate(prefix); } return identifier; diff --git a/smart-flow-springboot-starter/pom.xml b/smart-flow-springboot-starter/pom.xml index b5d3e24..b201f59 100644 --- a/smart-flow-springboot-starter/pom.xml +++ b/smart-flow-springboot-starter/pom.xml @@ -5,7 +5,7 @@ smart-flow-parent org.smartboot.flow - 1.0.6 + 1.0.7 4.0.0 @@ -25,7 +25,7 @@ org.smartboot.flow smart-flow-spring-extension - 1.0.6 + 1.0.7 diff --git a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java index 6029143..4bc582c 100644 --- a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java +++ b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowHttpReportConfiguration.java @@ -36,7 +36,7 @@ public class FlowHttpReportConfiguration { public HttpReporter getHttpReporter() { HttpReporter reporter = new HttpReporter(); reporter.setTimeout(this.timeout); - reporter.setUrl(this.url); + reporter.setServerAddress(this.url); reporter.setIdle(this.idle); return reporter; } -- Gitee From 9e45da7d3453643f83911cafea6466a1307cff9f Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Thu, 9 Feb 2023 23:52:42 +0800 Subject: [PATCH 23/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E4=B8=8A=E6=8A=A5=E5=88=97=E8=A1=A8=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/ReportManager/report-metrics.vue | 101 +++++++++++++++++- .../admin/controller/ReportController.java | 6 ++ .../flow/admin/controller/ReportQuery.java | 42 ++++++++ .../flow/admin/mapper/EngineMetricMapper.java | 10 ++ .../smart/flow/admin/model/EngineMetrics.java | 4 + .../resources/mapper/EngineMetricsMapper.xml | 16 +++ 6 files changed, 176 insertions(+), 3 deletions(-) create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportQuery.java diff --git a/dashboard/src/views/ReportManager/report-metrics.vue b/dashboard/src/views/ReportManager/report-metrics.vue index f4c1bac..1976cc2 100644 --- a/dashboard/src/views/ReportManager/report-metrics.vue +++ b/dashboard/src/views/ReportManager/report-metrics.vue @@ -1,7 +1,102 @@ \ No newline at end of file + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java index eef27e9..c92dca4 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java @@ -129,6 +129,12 @@ public class ReportController { return Result.ok(true); } + @PostMapping("/metrics_list") + public String metricsList(@RequestBody ReportQuery query) { + LOGGER.info("query \n {}", JSON.toJSONString(query)); + return Result.ok(metricMapper.list(query)); + } + @PostMapping("/trace") public String receiveTrace(@RequestBody TraceReportRequest model) { LOGGER.info("receive \n {}", JSON.toJSONString(model)); diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportQuery.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportQuery.java new file mode 100644 index 0000000..dc6c44f --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportQuery.java @@ -0,0 +1,42 @@ +package org.smartboot.smart.flow.admin.controller; + +import java.io.Serializable; + +/** + * @author qinluo + * @date 2023/2/9 23:08 + * @since 1.0.7 + */ +public class ReportQuery implements Serializable { + + + private static final long serialVersionUID = -5035190533172786720L; + + private String engineName; + private String host; + private String traceId; + + public String getEngineName() { + return engineName; + } + + public void setEngineName(String engineName) { + this.engineName = engineName; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } +} diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java index 45f9ac0..c83c893 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineMetricMapper.java @@ -2,8 +2,11 @@ package org.smartboot.smart.flow.admin.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.controller.ReportQuery; import org.smartboot.smart.flow.admin.model.EngineMetrics; +import java.util.List; + /** * @author qinluo * @date 2023-01-30 @@ -28,4 +31,11 @@ public interface EngineMetricMapper { */ int insert(@Param("trace") EngineMetrics metrics); + /** + * List top 20 metrics + * + * @param query query condition + * @return list. + */ + List list(@Param("query") ReportQuery query); } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java index 343d5f1..ef2ab03 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineMetrics.java @@ -1,5 +1,7 @@ package org.smartboot.smart.flow.admin.model; +import com.alibaba.fastjson2.annotation.JSONField; + import java.io.Serializable; import java.util.Date; @@ -15,10 +17,12 @@ public class EngineMetrics implements Serializable { private String engineName; private String content; private String md5; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date reportTime; private String address; private String host; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date created; private Date updated; diff --git a/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml index ed6f2e3..a5c6727 100644 --- a/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml +++ b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml @@ -25,4 +25,20 @@ values(#{trace.engineName}, #{trace.content}, #{trace.md5}, #{trace.address}, #{trace.host}, #{trace.reportTime}, now(), now()) + + \ No newline at end of file -- Gitee From a02d9156c5964902c68ce5f4bcb721eb731a4cfb Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Fri, 10 Feb 2023 11:50:49 +0800 Subject: [PATCH 24/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E9=93=BE=E8=B7=AF=E6=95=B0=E6=8D=AE=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/components.d.ts | 1 + .../src/views/ReportManager/report-trace.vue | 122 +++++++++++++++++- .../admin/controller/ReportController.java | 14 ++ .../flow/admin/mapper/EngineTraceMapper.java | 11 ++ .../smart/flow/admin/model/EngineTrace.java | 22 ++++ .../resources/mapper/EngineMetricsMapper.xml | 2 +- .../resources/mapper/EngineTraceMapper.xml | 27 +++- .../src/main/resources/schema.sql | 13 +- .../trace/ManagerExecutionListener.java | 1 + .../manager/trace/TraceReportRequest.java | 18 +++ .../flow/manager/trace/TraceReporter.java | 10 ++ 11 files changed, 233 insertions(+), 8 deletions(-) diff --git a/dashboard/components.d.ts b/dashboard/components.d.ts index 1a9b34d..438a5ea 100644 --- a/dashboard/components.d.ts +++ b/dashboard/components.d.ts @@ -45,6 +45,7 @@ declare module '@vue/runtime-core' { LayTab: typeof import('@layui/layui-vue')['LayTab'] LayTabItem: typeof import('@layui/layui-vue')['LayTabItem'] LayTable: typeof import('@layui/layui-vue')['LayTable'] + LayTooltip: typeof import('@layui/layui-vue')['LayTooltip'] LayTransition: typeof import('@layui/layui-vue')['LayTransition'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] diff --git a/dashboard/src/views/ReportManager/report-trace.vue b/dashboard/src/views/ReportManager/report-trace.vue index f4c1bac..dccbdd9 100644 --- a/dashboard/src/views/ReportManager/report-trace.vue +++ b/dashboard/src/views/ReportManager/report-trace.vue @@ -1,7 +1,123 @@ \ No newline at end of file + + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java index c92dca4..46b3c57 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java @@ -135,6 +135,18 @@ public class ReportController { return Result.ok(metricMapper.list(query)); } + @PostMapping("/trace_list") + public String traceList(@RequestBody ReportQuery query) { + LOGGER.info("query \n {}", JSON.toJSONString(query)); + List traces = traceMapper.list(query); + traces.forEach(p -> { + if (p.getMessage() != null && p.getMessage().length() > 512) { + p.setMessage(p.getMessage().substring(0, 512)); + } + }); + return Result.ok(traces); + } + @PostMapping("/trace") public String receiveTrace(@RequestBody TraceReportRequest model) { LOGGER.info("receive \n {}", JSON.toJSONString(model)); @@ -160,6 +172,8 @@ public class ReportController { trace.setContent(JSON.toJSONString(model.getJson())); trace.setEngineName(model.getEngineName()); trace.setMd5(model.getMd5()); + trace.setStatus(model.getSuccess() ? 1 : 0); + trace.setMessage(model.getEx()); traceMapper.insert(trace); diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java index 2d49b8e..328b34e 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineTraceMapper.java @@ -2,8 +2,11 @@ package org.smartboot.smart.flow.admin.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.smartboot.smart.flow.admin.controller.ReportQuery; import org.smartboot.smart.flow.admin.model.EngineTrace; +import java.util.List; + /** * @author qinluo * @date 2023-01-30 @@ -28,4 +31,12 @@ public interface EngineTraceMapper { */ int insert(@Param("trace") EngineTrace trace); + /** + * List top 20 traces. + * + * @param query query condition + * @return list. + */ + List list(@Param("query") ReportQuery query); + } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java index d85b98c..7e36e4c 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/model/EngineTrace.java @@ -1,5 +1,7 @@ package org.smartboot.smart.flow.admin.model; +import com.alibaba.fastjson2.annotation.JSONField; + import java.io.Serializable; import java.util.Date; @@ -15,14 +17,34 @@ public class EngineTrace implements Serializable { private String engineName; private String content; private String md5; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date reportTime; private String address; private String host; private String traceId; + private Integer status; + private String message; + @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date created; private Date updated; + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + public Long getId() { return id; } diff --git a/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml index a5c6727..7c5bdfa 100644 --- a/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml +++ b/smart-flow-admin/src/main/resources/mapper/EngineMetricsMapper.xml @@ -38,7 +38,7 @@ order by id desc - limit 200; + limit 50; \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml b/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml index 5fd0d37..9d5f234 100644 --- a/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml +++ b/smart-flow-admin/src/main/resources/mapper/EngineTraceMapper.xml @@ -10,6 +10,8 @@ + + @@ -22,8 +24,29 @@ - insert into engine_table_trace(engine_name, content, md5, address, host, trace_id, report_time, created, updated) - values(#{trace.engineName}, #{trace.content}, #{trace.md5}, #{trace.address}, #{trace.host}, #{trace.traceId}, #{trace.reportTime}, now(), now()) + insert into engine_table_trace(engine_name, content, md5, address, host, trace_id, report_time, created, updated, status, message) + values(#{trace.engineName}, #{trace.content}, #{trace.md5}, #{trace.address}, #{trace.host}, #{trace.traceId}, + #{trace.reportTime}, now(), now(), #{trace.status}, #{trace.message}) + + \ No newline at end of file diff --git a/smart-flow-admin/src/main/resources/schema.sql b/smart-flow-admin/src/main/resources/schema.sql index ae0c9a7..55c7e0c 100644 --- a/smart-flow-admin/src/main/resources/schema.sql +++ b/smart-flow-admin/src/main/resources/schema.sql @@ -46,7 +46,10 @@ CREATE TABLE IF NOT EXISTS `engine_table_metrics`( `report_time` timestamp COMMENT '上报时间', `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `idx_engine_name` (`engine_name`), + KEY `idx_host` (`host`), + KEY `idx_report_time` (`report_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎执行数据表'; -- 执行trace @@ -57,9 +60,15 @@ CREATE TABLE IF NOT EXISTS `engine_table_trace`( `host` varchar(128) COMMENT '主机名', `md5` varchar(256) COMMENT 'content md5加密字符串', `trace_id` varchar(256) COMMENT 'traceId', + `status` int(4) COMMENT 'status', + `message` TEXT COMMENT 'message', `content` text COMMENT 'json格式', `report_time` timestamp COMMENT '上报时间', `created` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `idx_trace_id` (`trace_id`), + KEY `idx_name` (`engine_name`), + KEY `idx_host_name` (`host`), + KEY `idx_report` (`report_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='引擎执行链路表'; \ No newline at end of file diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index 914fe68..49ae618 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -123,6 +123,7 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { return; } + trace.setEx(context.getFatal()); if (sampleStrategy == null || sampleStrategy.sampled(context)) { // 将执行采集到的数据进行上报 traceReporter.submit(trace); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java index 6c33224..e2ab01e 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java @@ -18,6 +18,24 @@ public class TraceReportRequest implements Serializable { private String content; private String traceId; private Serializable json; + private boolean success; + private String ex; + + public boolean getSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getEx() { + return ex; + } + + public void setEx(String ex) { + this.ex = ex; + } public long getTimestamp() { return timestamp; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java index bede7ed..c628c86 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -20,6 +20,8 @@ import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; +import java.io.ByteArrayOutputStream; +import java.io.PrintWriter; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -98,6 +100,14 @@ public class TraceReporter { request.setMd5(flatEngine.getMd5()); request.setTraceId(trace.getTraceId()); request.setEngineName(trace.getEngineName()); + request.setSuccess(trace.getEx() == null); + if (!request.getSuccess()) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PrintWriter writer = new PrintWriter(bos); + trace.getEx().printStackTrace(writer); + writer.flush(); + request.setEx(bos.toString()); + } if (flatEngine.getReportContent()) { request.setContent(flatEngine.getContent()); -- Gitee From dbe60e19dd0deac0083dce658fa58111921deffd Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Fri, 10 Feb 2023 15:27:51 +0800 Subject: [PATCH 25/76] qinluo: - merge admin dev --- .../trace/ManagerExecutionListener.java | 1 + .../flow/manager/trace/TraceReportRequest.java | 18 ++++++++++++++++++ .../flow/manager/trace/TraceReporter.java | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index 914fe68..49ae618 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -123,6 +123,7 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { return; } + trace.setEx(context.getFatal()); if (sampleStrategy == null || sampleStrategy.sampled(context)) { // 将执行采集到的数据进行上报 traceReporter.submit(trace); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java index 6c33224..e2ab01e 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReportRequest.java @@ -18,6 +18,24 @@ public class TraceReportRequest implements Serializable { private String content; private String traceId; private Serializable json; + private boolean success; + private String ex; + + public boolean getSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getEx() { + return ex; + } + + public void setEx(String ex) { + this.ex = ex; + } public long getTimestamp() { return timestamp; diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java index bede7ed..c628c86 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -20,6 +20,8 @@ import org.smartboot.http.client.HttpClient; import org.smartboot.http.client.HttpPost; import org.smartboot.http.common.enums.HeaderNameEnum; +import java.io.ByteArrayOutputStream; +import java.io.PrintWriter; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -98,6 +100,14 @@ public class TraceReporter { request.setMd5(flatEngine.getMd5()); request.setTraceId(trace.getTraceId()); request.setEngineName(trace.getEngineName()); + request.setSuccess(trace.getEx() == null); + if (!request.getSuccess()) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PrintWriter writer = new PrintWriter(bos); + trace.getEx().printStackTrace(writer); + writer.flush(); + request.setEx(bos.toString()); + } if (flatEngine.getReportContent()) { request.setContent(flatEngine.getContent()); -- Gitee From 36d6f2ba590f91d441056a43fb6e84f3edc4bd9a Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Fri, 10 Feb 2023 15:38:46 +0800 Subject: [PATCH 26/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20checkstyle=20=E4=BB=A3=E7=A0=81=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checkstyle.xml | 168 ++++++++++++++++++ pom.xml | 23 +++ .../smartboot/flow/core/EngineContext.java | 2 +- .../flow/core/manager/PipelineModel.java | 2 - .../spring/extension/ReflectionNotifier.java | 2 +- 5 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 checkstyle.xml diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000..3dbe80f --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ebe41ca..71febe3 100644 --- a/pom.xml +++ b/pom.xml @@ -165,6 +165,24 @@ deploy + + org.apache.maven.plugins + maven-checkstyle-plugin + + + + check + + package + + + + true + true + UTF-8 + checkstyle.xml + + @@ -203,6 +221,11 @@ maven-release-plugin 2.5 + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java index 33ee074..5d4b2b7 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java @@ -283,7 +283,7 @@ public class EngineContext{ private static final Value NULL = new Value(null); private final Object val; - public Value(Object val) { + Value(Object val) { this.val = val; } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java index bcac717..1022217 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/manager/PipelineModel.java @@ -1,13 +1,11 @@ package org.smartboot.flow.core.manager; import org.smartboot.flow.core.common.Uniqueness; -import org.smartboot.flow.core.metrics.Metrics; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * @author qinluo diff --git a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/ReflectionNotifier.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/ReflectionNotifier.java index a703f3a..3b7428a 100644 --- a/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/ReflectionNotifier.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/ReflectionNotifier.java @@ -84,7 +84,7 @@ public class ReflectionNotifier implements ReloadListener { private final List accepted; private final boolean acceptAny; - public NotifyConf(Field f, Object bean, List accepted) { + NotifyConf(Field f, Object bean, List accepted) { this.f = f; this.bean = bean; this.accepted = accepted; -- Gitee From ef63431f515a64edc66b7eb579aebf5369a26521 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Fri, 10 Feb 2023 15:55:21 +0800 Subject: [PATCH 27/76] qinluo: - checkstyle --- checkstyle.xml | 5 ----- .../smart/flow/admin/mapper/EngineHistoryMapper.java | 1 - 2 files changed, 6 deletions(-) diff --git a/checkstyle.xml b/checkstyle.xml index 3dbe80f..1cb296f 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -43,11 +43,6 @@ - - - - - diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java index d1464e2..1a9de30 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/mapper/EngineHistoryMapper.java @@ -2,7 +2,6 @@ package org.smartboot.smart.flow.admin.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.smartboot.smart.flow.admin.model.EngineConfig; import org.smartboot.smart.flow.admin.model.EngineHistory; import java.util.List; -- Gitee From 02e9e319a3b1afe29f140f75b524ec4696c00e33 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Fri, 10 Feb 2023 19:05:14 +0800 Subject: [PATCH 28/76] =?UTF-8?q?qinluo:=20=E5=BC=95=E5=85=A5G6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/package-lock.json | 365 ++++++++++++++++++ dashboard/package.json | 1 + dashboard/src/router/module/base-routes.ts | 5 + .../views/ReportManager/metrics_detail.vue | 74 ++++ 4 files changed, 445 insertions(+) create mode 100644 dashboard/src/views/ReportManager/metrics_detail.vue diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index 0474514..2f30983 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -4,6 +4,14 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, "@antfu/utils": { "version": "0.6.2", "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.6.2.tgz", @@ -26,6 +34,15 @@ } } }, + "@antv/algorithm": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@antv/algorithm/-/algorithm-0.1.25.tgz", + "integrity": "sha512-TGwPyFoAu4+iEJd0y1l0gHdBXCbUj8a4gR7P3GzZRfEfRnWfk+gswApzOSTd7c6HP402JOEF64PAJQKxQgSPSQ==", + "requires": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, "@antv/attr": { "version": "0.3.3", "resolved": "https://registry.npmmirror.com/@antv/attr/-/attr-0.3.3.tgz", @@ -144,6 +161,40 @@ "tslib": "^2.0.3" } }, + "@antv/g-webgpu": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu/-/g-webgpu-0.7.2.tgz", + "integrity": "sha512-kw+oYGsdvj5qeUfy5DPb/jztZBV+2fmqBd3Vv8NlKatfBmv8AirYX/CCW74AUSdWm99rEiLyxFB1VdRZ6b/wnQ==", + "requires": { + "@antv/g-webgpu-core": "^0.7.2", + "@antv/g-webgpu-engine": "^0.7.2", + "gl-matrix": "^3.1.0", + "gl-vec2": "^1.3.0", + "lodash": "^4.17.15" + } + }, + "@antv/g-webgpu-core": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-core/-/g-webgpu-core-0.7.2.tgz", + "integrity": "sha512-xUMmop7f3Rs34zFYKXLqHhDR1CQTeDl/7vI7Sn3X/73BqJc3X3HIIRvm83Fg2CjVACaOzw4WeLRXNaOCp9fz9w==", + "requires": { + "eventemitter3": "^4.0.0", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "probe.gl": "^3.1.1" + } + }, + "@antv/g-webgpu-engine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-engine/-/g-webgpu-engine-0.7.2.tgz", + "integrity": "sha512-lx8Y93IW2cnJvdoDRKyMmTdYqSC1pOmF0nyG3PGGyA0NI9vBYVgO0KTF6hkyWjdTWVq7XDZyf/h8CJridLh3lg==", + "requires": { + "@antv/g-webgpu-core": "^0.7.2", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "regl": "^1.3.11" + } + }, "@antv/g2": { "version": "4.2.8", "resolved": "https://registry.npmmirror.com/@antv/g2/-/g2-4.2.8.tgz", @@ -166,6 +217,113 @@ "tslib": "^2.0.0" } }, + "@antv/g6": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-4.8.5.tgz", + "integrity": "sha512-Cmr82GWPkgEt9/Z632NoMtSnkgjKTFnbs6FvV/W9lsmVnimUOsB626pdm5qG+HB3CvA3v7D+cNAcRIo8iKtnuA==", + "requires": { + "@antv/g6-pc": "0.8.5" + } + }, + "@antv/g6-core": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-core/-/g6-core-0.8.5.tgz", + "integrity": "sha512-cBxXB1rJkdmNWCimVqJlgVTFVvDRj3481WU2IM/+un3IbphjDP6Ft1KXHZqwJMGc03o/JUNjEgQyhwhL5iqgDQ==", + "requires": { + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-math": "^0.1.1", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "ml-matrix": "^6.5.0", + "tslib": "^2.1.0" + } + }, + "@antv/g6-element": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-element/-/g6-element-0.8.5.tgz", + "integrity": "sha512-/IXW2eRV7zwjdMUbYmO/mceFzyApKbOP+JxU90f5nH8LcxT2L0DKSgUiv4yBuMHs/caKnViUGRMLBcrSmFHEZA==", + "requires": { + "@antv/g-base": "^0.5.1", + "@antv/g6-core": "0.8.5", + "@antv/util": "~2.0.5" + } + }, + "@antv/g6-pc": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-pc/-/g6-pc-0.8.5.tgz", + "integrity": "sha512-6OlbxVMnz5wYm7PhWBNiJB7aEczEMn0bKtvBCIC1Kx8tx8Rk879DtLF2l+myq1Baod8TfzIj3gnYSBLtkO8zgw==", + "requires": { + "@ant-design/colors": "^4.0.5", + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-math": "^0.1.1", + "@antv/g-svg": "^0.5.1", + "@antv/g6-core": "0.8.5", + "@antv/g6-element": "0.8.5", + "@antv/g6-plugin": "0.8.5", + "@antv/hierarchy": "^0.6.7", + "@antv/layout": "^0.3.0", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "color": "^3.1.3", + "d3-force": "^2.0.1", + "dagre": "^0.8.5", + "insert-css": "^2.0.0", + "ml-matrix": "^6.5.0" + } + }, + "@antv/g6-plugin": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-plugin/-/g6-plugin-0.8.5.tgz", + "integrity": "sha512-6czIPyFlXAVd6lFAoPck4OaaCVXYXfkKfaInqfNlSG0P4/zerLPictJikgwJIbeXo0VBtuDbsPE/0eFjUfM4Hw==", + "requires": { + "@antv/dom-util": "^2.0.2", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-svg": "^0.5.2", + "@antv/g6-core": "0.8.5", + "@antv/g6-element": "0.8.5", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/scale": "^0.3.4", + "@antv/util": "^2.0.9", + "insert-css": "^2.0.0" + } + }, + "@antv/graphlib": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-1.2.0.tgz", + "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + }, + "@antv/hierarchy": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.10.tgz", + "integrity": "sha512-Xhtr7k5n9xrrseV8qFKRQh1TA5EJ+emDN23igwXmVFIbxA165Aj0NnsplxvY3TCUCgYiRsIzYjS/Kj8Tf+DTuA==", + "requires": { + "@antv/util": "^2.0.7" + } + }, + "@antv/layout": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.13.tgz", + "integrity": "sha512-N5dNTH3EW2B1/gNUg38OuOvc7jtHMjvY8i5+BDZn4ejYAovyhPJeIvhIhdjOir6UTXWhvtzVYYDXYfpr8/mQtQ==", + "requires": { + "@antv/g-webgpu": "0.7.2", + "@antv/graphlib": "^1.0.0", + "d3-force": "^2.1.1", + "d3-quadtree": "^2.0.0", + "dagre-compound": "^0.0.11", + "ml-matrix": "^6.5.0" + } + }, "@antv/matrix-util": { "version": "3.1.0-beta.3", "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", @@ -235,6 +393,14 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" }, + "@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, "@babel/types": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", @@ -545,6 +711,31 @@ "fastq": "^1.6.0" } }, + "@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } + }, + "@probe.gl/stats": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, "@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", @@ -983,6 +1174,30 @@ "wrap-ansi": "^6.2.0" } }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", @@ -996,6 +1211,15 @@ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1043,11 +1267,26 @@ "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" }, + "d3-dispatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + }, "d3-ease": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz", "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" }, + "d3-force": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "requires": { + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" + } + }, "d3-interpolate": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", @@ -1056,11 +1295,30 @@ "d3-color": "1 - 3" } }, + "d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + }, "d3-timer": { "version": "1.0.10", "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz", "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" }, + "dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "requires": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "dagre-compound": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==" + }, "dayjs": { "version": "1.11.3", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz", @@ -1252,6 +1510,11 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "evtd": { "version": "0.2.3", "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.3.tgz", @@ -1351,6 +1614,11 @@ "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, + "gl-vec2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gl-vec2/-/gl-vec2-1.3.0.tgz", + "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" + }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1367,6 +1635,14 @@ "dev": true, "optional": true }, + "graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "requires": { + "lodash": "^4.17.15" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1420,6 +1696,21 @@ "dev": true, "optional": true }, + "insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + }, + "is-any-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.0.tgz", + "integrity": "sha512-WdPV58rT3aOWXvvyuBydnCq4S2BM1Yz8shKxlEpk/6x+GX202XRvXOycEFtNgnHVLoc46hpexPFx8Pz1/sMS0w==" + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1575,6 +1866,11 @@ "p-locate": "^4.1.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -1653,6 +1949,41 @@ "brace-expansion": "^2.0.1" } }, + "ml-array-max": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz", + "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "requires": { + "is-any-array": "^2.0.0" + } + }, + "ml-array-min": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz", + "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "requires": { + "is-any-array": "^2.0.0" + } + }, + "ml-array-rescale": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", + "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "requires": { + "is-any-array": "^2.0.0", + "ml-array-max": "^1.2.4", + "ml-array-min": "^1.2.3" + } + }, + "ml-matrix": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.10.4.tgz", + "integrity": "sha512-rUyEhfNPzqFsltYwvjNeYQXlYEaVea3KgzcJKJteQUj2WVAGFx9fLNRjtMR9mg2B6bd5buxlmkZmxM4hmO+SKg==", + "requires": { + "is-any-array": "^2.0.0", + "ml-array-rescale": "^1.3.7" + } + }, "mlly": { "version": "0.5.16", "resolved": "https://registry.npmmirror.com/mlly/-/mlly-0.5.16.tgz", @@ -1855,6 +2186,17 @@ "source-map-js": "^1.0.2" } }, + "probe.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", + "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0", + "@probe.gl/log": "3.6.0", + "@probe.gl/stats": "3.6.0" + } + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -2026,6 +2368,16 @@ "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", + "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + }, "request-light": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", @@ -2178,6 +2530,14 @@ "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2234,6 +2594,11 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", diff --git a/dashboard/package.json b/dashboard/package.json index e79467e..b9077dd 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@antv/g2": "v4.2.8", + "@antv/g6": "^4.8.5", "@layui/layui-vue": "1.8.4", "axios": "^1.2.1", "echarts": "^5.4.1", diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index 4bb57de..ec0fb02 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -25,6 +25,11 @@ export default [ path: "/engines/history-detail", component: () => import('../../views/Engines/history-detail.vue'), meta: {title: '历史详情', requireAuth: true}, + }, + { + path: "/report/metrics-detail", + component: () => import('../../views/ReportManager/metrics_detail.vue'), + meta: {title: '数据详情', requireAuth: true}, } ] }, diff --git a/dashboard/src/views/ReportManager/metrics_detail.vue b/dashboard/src/views/ReportManager/metrics_detail.vue new file mode 100644 index 0000000..76e13f6 --- /dev/null +++ b/dashboard/src/views/ReportManager/metrics_detail.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file -- Gitee From c303241b558838c723325810645f1483cd4f8642 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Sat, 11 Feb 2023 12:53:07 +0800 Subject: [PATCH 29/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20G6=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/package-lock.json | 4778 ++++++++++++++++- dashboard/package.json | 3 +- dashboard/src/router/module/base-routes.ts | 1 - .../views/ReportManager/metrics_detail.vue | 66 +- .../views/ReportManager/report-metrics.vue | 2 +- .../smart/flow/admin/EngineAnalyzer.java | 13 + .../admin/controller/ReportController.java | 33 + .../smartboot/smart/flow/admin/g6/Combo.java | 33 + .../smart/flow/admin/g6/Constants.java | 17 + .../smartboot/smart/flow/admin/g6/Edge.java | 37 + .../smart/flow/admin/g6/EdgeBranch.java | 61 + .../smart/flow/admin/g6/EdgeStack.java | 90 + .../flow/admin/g6/G6ComponentVisitor.java | 259 + .../smart/flow/admin/g6/G6EngineVisitor.java | 65 + .../flow/admin/g6/G6PipelineVisitor.java | 55 + .../smart/flow/admin/g6/G6Result.java | 58 + .../smartboot/smart/flow/admin/g6/Node.java | 64 + .../smart/flow/admin/g6/SafeStack.java | 31 + .../org/smartboot/flow/core/Pipeline.java | 9 +- .../core/component/PipelineComponent.java | 1 + .../flow/core/manager/ComponentModel.java | 12 +- 21 files changed, 5659 insertions(+), 29 deletions(-) create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/EngineAnalyzer.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Combo.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Constants.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Edge.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/EdgeBranch.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/EdgeStack.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/G6ComponentVisitor.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/G6EngineVisitor.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/G6PipelineVisitor.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/G6Result.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Node.java create mode 100644 smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/SafeStack.java diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index 2f30983..6f5da88 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -1,8 +1,4493 @@ { "name": "layui-vue-admin", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "layui-vue-admin", + "version": "1.0.0", + "dependencies": { + "@antv/g2": "v4.2.8", + "@antv/g6": "^4.8.5", + "@antv/vis-predict-engine": "^0.1.1", + "@layui/layui-vue": "1.8.4", + "axios": "^1.2.1", + "echarts": "^5.4.1", + "js-base64": "^3.7.2", + "mockjs": "^1.1.0", + "monaco-editor": "^0.34.1", + "nprogress": "^0.2.0", + "pinia": "^2.0.20", + "pinia-plugin-persistedstate": "^3.0.1", + "vue": "^3.2.45", + "vue-monaco-editor": "0.0.19", + "vue-router": "^4.1.3" + }, + "devDependencies": { + "@types/node": "^18.7.8", + "@types/nprogress": "^0.2.0", + "@vitejs/plugin-vue": "^4.0.0", + "@vue/compiler-sfc": "^3.2.45", + "less": "^4.1.2", + "rollup-plugin-visualizer": "^5.8.3", + "typescript": "^4.5.4", + "unplugin-auto-import": "^0.11.2", + "unplugin-layui-vue-resolver": "^0.0.13", + "unplugin-vue-components": "^0.22.7", + "vite": "^4.0.0", + "vue-tsc": "^0.29.8" + } + }, + "node_modules/@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "dependencies": { + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@antfu/utils": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.6.2.tgz", + "integrity": "sha512-Qdwda+qE1KOKXuM8Gnn09zIJSA293J5putdHBx4J9sdbHzqp5QY4OmH77KgwJoi0PuY+kbddkVVdkSoZ9ruiug==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antv/adjust": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/@antv/adjust/-/adjust-0.2.5.tgz", + "integrity": "sha512-MfWZOkD9CqXRES6MBGRNe27Q577a72EIwyMnE29wIlPliFvJfWwsrONddpGU7lilMpVKecS3WAzOoip3RfPTRQ==", + "dependencies": { + "@antv/util": "~2.0.0", + "tslib": "^1.10.0" + } + }, + "node_modules/@antv/adjust/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@antv/algorithm": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@antv/algorithm/-/algorithm-0.1.25.tgz", + "integrity": "sha512-TGwPyFoAu4+iEJd0y1l0gHdBXCbUj8a4gR7P3GzZRfEfRnWfk+gswApzOSTd7c6HP402JOEF64PAJQKxQgSPSQ==", + "dependencies": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/attr": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@antv/attr/-/attr-0.3.3.tgz", + "integrity": "sha512-7iSSRhYzZ7pYXZKTL1ECGhTdKVHPQx1Vj7yYVTAiyLMsWsLUAoMf0m6dT6msTs0SdrXHRbjzXavVXxRj/wZZJA==", + "dependencies": { + "@antv/color-util": "^2.0.1", + "@antv/util": "~2.0.0", + "tslib": "^1.10.0" + } + }, + "node_modules/@antv/attr/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@antv/color-util": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@antv/color-util/-/color-util-2.0.6.tgz", + "integrity": "sha512-KnPEaAH+XNJMjax9U35W67nzPI+QQ2x27pYlzmSIWrbj4/k8PGrARXfzDTjwoozHJY8qG62Z+Ww6Alhu2FctXQ==", + "dependencies": { + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/component": { + "version": "0.8.28", + "resolved": "https://registry.npmmirror.com/@antv/component/-/component-0.8.28.tgz", + "integrity": "sha512-SlmTBl9mWFnUQclylKhTlCnB0bkLI3yH5TlC37hdSIq1sFqG4RD5CmVFcFx5lb6itKe4ZtPl4oboVxjtatkwvw==", + "dependencies": { + "@antv/color-util": "^2.0.3", + "@antv/dom-util": "~2.0.1", + "@antv/g-base": "^0.5.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.7", + "@antv/scale": "~0.3.1", + "@antv/util": "~2.0.0", + "fecha": "~4.2.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/coord": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@antv/coord/-/coord-0.3.1.tgz", + "integrity": "sha512-rFE94C8Xzbx4xmZnHh2AnlB3Qm1n5x0VT3OROy257IH6Rm4cuzv1+tZaUBATviwZd99S+rOY9telw/+6C9GbRw==", + "dependencies": { + "@antv/matrix-util": "^3.1.0-beta.2", + "@antv/util": "~2.0.12", + "tslib": "^2.1.0" + } + }, + "node_modules/@antv/dom-util": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@antv/dom-util/-/dom-util-2.0.4.tgz", + "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/event-emitter": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz", + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + }, + "node_modules/@antv/g-base": { + "version": "0.5.12", + "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.12.tgz", + "integrity": "sha512-KDM3K1rDnemvTAoPYsRYue+ZX7bR4D0TvOQ5Ib6osGtSpZcstwhA0CuQGI0wNXb/ax7h6/KyzNPVFqESrtWbqw==", + "dependencies": { + "@antv/event-emitter": "^0.1.1", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.13", + "@types/d3-timer": "^2.0.0", + "d3-ease": "^1.0.5", + "d3-interpolate": "^3.0.1", + "d3-timer": "^1.0.9", + "detect-browser": "^5.1.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-canvas": { + "version": "0.5.13", + "resolved": "https://registry.npmmirror.com/@antv/g-canvas/-/g-canvas-0.5.13.tgz", + "integrity": "sha512-nu6wNeZhYomkEks2aniWlYML0ZGb9t5PGzjiOIp+B4z4HUEUvHOTdIPNfinzl5+4QC7fVZntsQKZK5dBFO5MDQ==", + "dependencies": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-math": { + "version": "0.1.9", + "resolved": "https://registry.npmmirror.com/@antv/g-math/-/g-math-0.1.9.tgz", + "integrity": "sha512-KHMSfPfZ5XHM1PZnG42Q2gxXfOitYveNTA7L61lR6mhZ8Y/aExsYmHqaKBsSarU0z+6WLrl9C07PQJZaw0uljQ==", + "dependencies": { + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0" + } + }, + "node_modules/@antv/g-svg": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@antv/g-svg/-/g-svg-0.5.7.tgz", + "integrity": "sha512-jUbWoPgr4YNsOat2Y/rGAouNQYGpw4R0cvlN0YafwOyacFFYy2zC8RslNd6KkPhhR3XHNSqJOuCYZj/YmLUwYw==", + "dependencies": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/util": "~2.0.0", + "detect-browser": "^5.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-webgpu": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu/-/g-webgpu-0.7.2.tgz", + "integrity": "sha512-kw+oYGsdvj5qeUfy5DPb/jztZBV+2fmqBd3Vv8NlKatfBmv8AirYX/CCW74AUSdWm99rEiLyxFB1VdRZ6b/wnQ==", + "dependencies": { + "@antv/g-webgpu-core": "^0.7.2", + "@antv/g-webgpu-engine": "^0.7.2", + "gl-matrix": "^3.1.0", + "gl-vec2": "^1.3.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@antv/g-webgpu-core": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-core/-/g-webgpu-core-0.7.2.tgz", + "integrity": "sha512-xUMmop7f3Rs34zFYKXLqHhDR1CQTeDl/7vI7Sn3X/73BqJc3X3HIIRvm83Fg2CjVACaOzw4WeLRXNaOCp9fz9w==", + "dependencies": { + "eventemitter3": "^4.0.0", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "probe.gl": "^3.1.1" + } + }, + "node_modules/@antv/g-webgpu-engine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-engine/-/g-webgpu-engine-0.7.2.tgz", + "integrity": "sha512-lx8Y93IW2cnJvdoDRKyMmTdYqSC1pOmF0nyG3PGGyA0NI9vBYVgO0KTF6hkyWjdTWVq7XDZyf/h8CJridLh3lg==", + "dependencies": { + "@antv/g-webgpu-core": "^0.7.2", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "regl": "^1.3.11" + } + }, + "node_modules/@antv/g2": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/@antv/g2/-/g2-4.2.8.tgz", + "integrity": "sha512-V2ntdehdCTCjSdkDxC1/kafii/2MZ2dhLd/auMoE6viwIvyy5CKkd7qa9krxJ4IIR5RH9v5uoRV8q2Bzd0OD2Q==", + "dependencies": { + "@antv/adjust": "^0.2.1", + "@antv/attr": "^0.3.1", + "@antv/color-util": "^2.0.2", + "@antv/component": "^0.8.27", + "@antv/coord": "^0.3.0", + "@antv/dom-util": "^2.0.2", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "~0.5.6", + "@antv/g-canvas": "~0.5.10", + "@antv/g-svg": "~0.5.6", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.15", + "@antv/scale": "^0.3.14", + "@antv/util": "~2.0.5", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/g6": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-4.8.5.tgz", + "integrity": "sha512-Cmr82GWPkgEt9/Z632NoMtSnkgjKTFnbs6FvV/W9lsmVnimUOsB626pdm5qG+HB3CvA3v7D+cNAcRIo8iKtnuA==", + "dependencies": { + "@antv/g6-pc": "0.8.5" + } + }, + "node_modules/@antv/g6-core": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-core/-/g6-core-0.8.5.tgz", + "integrity": "sha512-cBxXB1rJkdmNWCimVqJlgVTFVvDRj3481WU2IM/+un3IbphjDP6Ft1KXHZqwJMGc03o/JUNjEgQyhwhL5iqgDQ==", + "dependencies": { + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-math": "^0.1.1", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "ml-matrix": "^6.5.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@antv/g6-element": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-element/-/g6-element-0.8.5.tgz", + "integrity": "sha512-/IXW2eRV7zwjdMUbYmO/mceFzyApKbOP+JxU90f5nH8LcxT2L0DKSgUiv4yBuMHs/caKnViUGRMLBcrSmFHEZA==", + "dependencies": { + "@antv/g-base": "^0.5.1", + "@antv/g6-core": "0.8.5", + "@antv/util": "~2.0.5" + } + }, + "node_modules/@antv/g6-pc": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-pc/-/g6-pc-0.8.5.tgz", + "integrity": "sha512-6OlbxVMnz5wYm7PhWBNiJB7aEczEMn0bKtvBCIC1Kx8tx8Rk879DtLF2l+myq1Baod8TfzIj3gnYSBLtkO8zgw==", + "dependencies": { + "@ant-design/colors": "^4.0.5", + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-math": "^0.1.1", + "@antv/g-svg": "^0.5.1", + "@antv/g6-core": "0.8.5", + "@antv/g6-element": "0.8.5", + "@antv/g6-plugin": "0.8.5", + "@antv/hierarchy": "^0.6.7", + "@antv/layout": "^0.3.0", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "color": "^3.1.3", + "d3-force": "^2.0.1", + "dagre": "^0.8.5", + "insert-css": "^2.0.0", + "ml-matrix": "^6.5.0" + } + }, + "node_modules/@antv/g6-plugin": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@antv/g6-plugin/-/g6-plugin-0.8.5.tgz", + "integrity": "sha512-6czIPyFlXAVd6lFAoPck4OaaCVXYXfkKfaInqfNlSG0P4/zerLPictJikgwJIbeXo0VBtuDbsPE/0eFjUfM4Hw==", + "dependencies": { + "@antv/dom-util": "^2.0.2", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-svg": "^0.5.2", + "@antv/g6-core": "0.8.5", + "@antv/g6-element": "0.8.5", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/scale": "^0.3.4", + "@antv/util": "^2.0.9", + "insert-css": "^2.0.0" + } + }, + "node_modules/@antv/graphlib": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-1.2.0.tgz", + "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + }, + "node_modules/@antv/hierarchy": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.10.tgz", + "integrity": "sha512-Xhtr7k5n9xrrseV8qFKRQh1TA5EJ+emDN23igwXmVFIbxA165Aj0NnsplxvY3TCUCgYiRsIzYjS/Kj8Tf+DTuA==", + "dependencies": { + "@antv/util": "^2.0.7" + } + }, + "node_modules/@antv/layout": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.14.tgz", + "integrity": "sha512-FkW7Y3UT8UqoeCH/HtyN2NQq+hcOyz6SLKW/Ba14GS6o5Qul87iyYNVpNAVbwyCT4pRaYP4DB8tGg/wX87k/PQ==", + "dependencies": { + "@antv/g-webgpu": "0.7.2", + "@antv/graphlib": "^1.0.0", + "d3-force": "^2.1.1", + "d3-quadtree": "^2.0.0", + "dagre-compound": "^0.0.11", + "ml-matrix": "^6.5.0" + } + }, + "node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/path-util": { + "version": "2.0.15", + "resolved": "https://registry.npmmirror.com/@antv/path-util/-/path-util-2.0.15.tgz", + "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", + "dependencies": { + "@antv/matrix-util": "^3.0.4", + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/path-util/node_modules/@antv/matrix-util": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.0.4.tgz", + "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.3.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/scale": { + "version": "0.3.18", + "resolved": "https://registry.npmmirror.com/@antv/scale/-/scale-0.3.18.tgz", + "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "dependencies": { + "@antv/util": "~2.0.3", + "fecha": "~4.2.0", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "dependencies": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/util/node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/@antv/vis-predict-engine": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@antv/vis-predict-engine/-/vis-predict-engine-0.1.1.tgz", + "integrity": "sha512-WMt/1auGn6KMubLOW3yoyhNrHUcEqlRETKcVkCnCP6StCLzBgjZqCFwbVz5vz0l7bWfYuXULth5lZ8q/JAYTOg==", + "dependencies": { + "@tensorflow/tfjs": "^2.7.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", + "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz", + "integrity": "sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz", + "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.0" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz", + "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==", + "dev": true + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@intlify/core-base": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.1.10.tgz", + "integrity": "sha512-So9CNUavB/IsZ+zBmk2Cv6McQp6vc2wbGi1S0XQmJ8Vz+UFcNn9MFXAe9gY67PreIHrbLsLxDD0cwo1qsxM1Nw==", + "dependencies": { + "@intlify/devtools-if": "9.1.10", + "@intlify/message-compiler": "9.1.10", + "@intlify/message-resolver": "9.1.10", + "@intlify/runtime": "9.1.10", + "@intlify/shared": "9.1.10", + "@intlify/vue-devtools": "9.1.10" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.1.10.tgz", + "integrity": "sha512-SHaKoYu6sog3+Q8js1y3oXLywuogbH1sKuc7NSYkN3GElvXSBaMoCzW+we0ZSFqj/6c7vTNLg9nQ6rxhKqYwnQ==", + "dependencies": { + "@intlify/shared": "9.1.10" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.1.10.tgz", + "integrity": "sha512-+JiJpXff/XTb0EadYwdxOyRTB0hXNd4n1HaJ/a4yuV960uRmPXaklJsedW0LNdcptd/hYUZtCkI7Lc9J5C1gxg==", + "dependencies": { + "@intlify/message-resolver": "9.1.10", + "@intlify/shared": "9.1.10", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-resolver": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/message-resolver/-/message-resolver-9.1.10.tgz", + "integrity": "sha512-5YixMG/M05m0cn9+gOzd4EZQTFRUu8RGhzxJbR1DWN21x/Z3bJ8QpDYj6hC4FwBj5uKsRfKpJQ3Xqg98KWoA+w==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/runtime": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/runtime/-/runtime-9.1.10.tgz", + "integrity": "sha512-7QsuByNzpe3Gfmhwq6hzgXcMPpxz8Zxb/XFI6s9lQdPLPe5Lgw4U1ovRPZTOs6Y2hwitR3j/HD8BJNGWpJnOFA==", + "dependencies": { + "@intlify/message-compiler": "9.1.10", + "@intlify/message-resolver": "9.1.10", + "@intlify/shared": "9.1.10" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/shared": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.1.10.tgz", + "integrity": "sha512-Om54xJeo1Vw+K1+wHYyXngE8cAbrxZHpWjYzMR9wCkqbhGtRV5VLhVc214Ze2YatPrWlS2WSMOWXR8JktX/IgA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.1.10.tgz", + "integrity": "sha512-5l3qYARVbkWAkagLu1XbDUWRJSL8br1Dj60wgMaKB0+HswVsrR6LloYZTg7ozyvM621V6+zsmwzbQxbVQyrytQ==", + "dependencies": { + "@intlify/message-resolver": "9.1.10", + "@intlify/runtime": "9.1.10", + "@intlify/shared": "9.1.10" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@layui/icons-vue": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@layui/icons-vue/-/icons-vue-1.0.9.tgz", + "integrity": "sha512-GZ69m1/rG1Rb+VSVYFqLzy4Hzx1unOOvOCMfk3VAZ8bulHdi/Qab7woTwUdMTyQW+ghi9iqlpq30tly9qIUrzQ==" + }, + "node_modules/@layui/layer-vue": { + "version": "1.4.7", + "resolved": "https://registry.npmmirror.com/@layui/layer-vue/-/layer-vue-1.4.7.tgz", + "integrity": "sha512-AIKvtcDr1PE6VSvf/+pnu2M12AFrzOL5kYOTDmiaPja4YKIacE9GTKg1RGp2tj8uo3e1ugVVELC31z1gLqaSZQ==" + }, + "node_modules/@layui/layui-vue": { + "version": "1.8.4", + "resolved": "https://registry.npmmirror.com/@layui/layui-vue/-/layui-vue-1.8.4.tgz", + "integrity": "sha512-FEKxwh4JmkxkIPqQvAUn1JNmgUN2a+VucDpBmJYvql4bTViTie9jTvsVrpUSvBzltcaPj5Y28xrN4BRSKZewzw==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@layui/icons-vue": "^1.0.9", + "@layui/layer-vue": "^1.4.7", + "@types/qrcode": "1.5.0", + "@umijs/ssr-darkreader": "^4.9.45", + "@vueuse/core": "^9.2.0", + "async-validator": "^4.1.1", + "cropperjs": "^1.5.12", + "dayjs": "^1.11.0", + "evtd": "^0.2.3", + "jsbarcode": "3.11.5", + "qrcode": "1.5.0", + "vue-i18n": "^9.1.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } + }, + "node_modules/@probe.gl/stats": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@tensorflow/tfjs": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.8.6.tgz", + "integrity": "sha512-/Hk3YCAreNicuQJsAIG32UGHaQj8UwX8y8ZrKVb/CrXOhrRyZmxGSZt9KMVe8MDoydenuGhZCqJUIaWdIKIA5g==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "2.8.6", + "@tensorflow/tfjs-backend-webgl": "2.8.6", + "@tensorflow/tfjs-converter": "2.8.6", + "@tensorflow/tfjs-core": "2.8.6", + "@tensorflow/tfjs-data": "2.8.6", + "@tensorflow/tfjs-layers": "2.8.6", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + }, + "bin": { + "tfjs-custom-bundle": "dist/tools/custom_bundle/cli.js" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.8.6.tgz", + "integrity": "sha512-x9WTTE9p3Pon2D0d6HH1UCIJsU1w3v9sF3vxJcp+YStrjDefWoW5pwxHCckEKTRra7GWg3CwMKK3Si2dat4H1A==", + "dependencies": { + "@types/seedrandom": "2.4.27", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "2.8.6" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + }, + "node_modules/@tensorflow/tfjs-backend-webgl": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.8.6.tgz", + "integrity": "sha512-kPgm3Dim0Li5MleybYKSZVUCu91ipDjZtTA5RrJx/Dli115qwWdiRGOHYwsIEY61hZoE0m3amjWLUBxtwMW1Nw==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "2.8.6", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "@types/webgl2": "0.0.5", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "2.8.6" + } + }, + "node_modules/@tensorflow/tfjs-backend-webgl/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + }, + "node_modules/@tensorflow/tfjs-converter": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.8.6.tgz", + "integrity": "sha512-Uv4YC66qjVC9UwBxz0IeLZ8KS2CReh63WlGRtHcSwDEYiwsa7cvp9H6lFSSPT7kiJmrK6JtHeJGIVcTuNnSt9w==", + "peerDependencies": { + "@tensorflow/tfjs-core": "2.8.6" + } + }, + "node_modules/@tensorflow/tfjs-core": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-2.8.6.tgz", + "integrity": "sha512-jS28M1POUOjnWgx3jp1v5D45DUQE8USsAHHkL/01z75KnYCAAmgqJSH4YKLiYACg3eBLWXH/KTcSc6dHAX7Kfg==", + "dependencies": { + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "node-fetch": "~2.6.1", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + } + }, + "node_modules/@tensorflow/tfjs-core/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + }, + "node_modules/@tensorflow/tfjs-data": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-2.8.6.tgz", + "integrity": "sha512-zoDUfd5TfkYdviqu2bObwyJGXJiOvBckOTP9j36PUs6s+4DbTIDttyxdfeEaiiLX9ZUFU58CoW+3LI/dlFVyoQ==", + "dependencies": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "2.8.6", + "seedrandom": "~2.4.3" + } + }, + "node_modules/@tensorflow/tfjs-layers": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.6.tgz", + "integrity": "sha512-fdZ0i/R2dIKmy8OB5tBAsm5IbAHfJpI6AlbjxpgoU3aWj1HCdDo+pMji928MkDJhP01ISgFTgw/7PseGNaUflw==", + "peerDependencies": { + "@tensorflow/tfjs-core": "2.8.6" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/d3-timer": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-2.0.1.tgz", + "integrity": "sha512-TF8aoF5cHcLO7W7403blM7L1T+6NF3XMyN3fxyUolq2uOcFeicG/khQg/dGxiCJWoAcmYulYN7LYSRKO54IXaA==" + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.7.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz", + "integrity": "sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==", + "dev": true + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + }, + "node_modules/@types/qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/@types/webgl-ext": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + }, + "node_modules/@types/webgl2": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.5.tgz", + "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==" + }, + "node_modules/@umijs/ssr-darkreader": { + "version": "4.9.45", + "resolved": "https://registry.npmjs.org/@umijs/ssr-darkreader/-/ssr-darkreader-4.9.45.tgz", + "integrity": "sha512-XlcwzSYQ/SRZpHdwIyMDS4FOGX5kP4U/2g2mykyn/iPQTK4xTiQAyBu6UnnDnn7d5P8s7Atzh1C7H0ETNOypJg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/darkreader" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", + "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/code-gen": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz", + "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==", + "dev": true, + "dependencies": { + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8" + } + }, + "node_modules/@volar/html2pug": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz", + "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==", + "deprecated": "WARNING: This project has been renamed to @johnsoncodehk/html2pug. Install using @johnsoncodehk/html2pug instead.", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0", + "domhandler": "^4.2.2", + "htmlparser2": "^7.1.2", + "pug": "^3.0.2" + } + }, + "node_modules/@volar/shared": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz", + "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==", + "dev": true, + "dependencies": { + "upath": "^2.0.1", + "vscode-jsonrpc": "^8.0.0-next.2", + "vscode-uri": "^3.0.2" + } + }, + "node_modules/@volar/source-map": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz", + "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==", + "dev": true, + "dependencies": { + "@volar/shared": "0.29.8" + } + }, + "node_modules/@volar/transforms": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz", + "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==", + "dev": true, + "dependencies": { + "@volar/shared": "0.29.8", + "vscode-languageserver": "^8.0.0-next.2" + } + }, + "node_modules/@volar/vue-code-gen": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz", + "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==", + "dev": true, + "dependencies": { + "@volar/code-gen": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@vue/compiler-core": "^3.2.21", + "@vue/compiler-dom": "^3.2.21", + "@vue/shared": "^3.2.21", + "upath": "^2.0.1" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.4.tgz", + "integrity": "sha512-lUki5QLS47bz/U8IlG9VQ+1lfxMtxMZENmU5nu4Z71eOD5j9FK0SmYGL5NiVJg9WBWeAU0VxRADMY2Qpq7BfVg==", + "dev": true, + "dependencies": { + "emmet": "^2.3.0", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-nls": "^5.0.0", + "vscode-uri": "^2.1.2" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz", + "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", + "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", + "dependencies": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", + "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", + "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" + }, + "node_modules/@vue/reactivity": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz", + "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==", + "dependencies": { + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", + "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz", + "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==", + "dependencies": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz", + "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==", + "dependencies": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz", + "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==", + "dependencies": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + }, + "peerDependencies": { + "vue": "3.2.45" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz", + "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==" + }, + "node_modules/@vueuse/core": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.4.0.tgz", + "integrity": "sha512-JzgenGj1ZF2BHOen5rsFiAyyI9sXAv7aKhNLlm9b7SwYQeKTcxTWdhudonURCSP3Egl9NQaRBzes2lv/1JUt/Q==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.4.0", + "@vueuse/shared": "9.4.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.4.0.tgz", + "integrity": "sha512-7GKMdGAsJyQJl35MYOz/RDpP0FxuiZBRDSN79QIPbdqYx4Sd0sVTnIC68KJ6Oln0t0SouvSUMvRHuno216Ud2Q==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.4.0.tgz", + "integrity": "sha512-fTuem51KwMCnqUKkI8B57qAIMcFovtGgsCtAeqxIzH3i6nE9VYge+gVfneNHAAy7lj8twbkNfqQSygOPJTm4tQ==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz", + "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A= sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", + "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cropperjs": { + "version": "1.5.12", + "resolved": "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.12.tgz", + "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==" + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + }, + "node_modules/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "node_modules/d3-force": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "dependencies": { + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "node_modules/dagre-compound": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "dagre": "^0.8.5" + } + }, + "node_modules/dayjs": { + "version": "1.11.3", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, + "node_modules/dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/echarts": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz", + "integrity": "sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.1" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/emmet": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.6.tgz", + "integrity": "sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==", + "dev": true, + "dependencies": { + "@emmetio/abbreviation": "^2.2.3", + "@emmetio/css-abbreviation": "^2.1.4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/evtd": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.3.tgz", + "integrity": "sha512-tmiT1YUVqFjTY+BSBOAskL83xNx41iUfpvKP6Gcd/xMHjg3mnER98jXGXJyKnxCG19uPc6EhZiUC+MUyvoqCtw==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/gl-vec2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gl-vec2/-/gl-vec2-1.3.0.tgz", + "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "optional": true + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + }, + "node_modules/is-any-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.0.tgz", + "integrity": "sha512-WdPV58rT3aOWXvvyuBydnCq4S2BM1Yz8shKxlEpk/6x+GX202XRvXOycEFtNgnHVLoc46hpexPFx8Pz1/sMS0w==" + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds= sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true + }, + "node_modules/jsbarcode": { + "version": "3.11.5", + "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.11.5.tgz", + "integrity": "sha512-zv3KsH51zD00I/LrFzFSM6dst7rDn0vIMzaiZFL7qusTjPZiPtxg3zxetp0RR7obmjTw4f6NyGgbdkBCgZUIrA==", + "bin": { + "auto.js": "bin/barcodes/CODE128/auto.js", + "Barcode.js": "bin/barcodes/Barcode.js", + "barcodes": "bin/barcodes", + "canvas.js": "bin/renderers/canvas.js", + "checksums.js": "bin/barcodes/MSI/checksums.js", + "codabar": "bin/barcodes/codabar", + "CODE128": "bin/barcodes/CODE128", + "CODE128_AUTO.js": "bin/barcodes/CODE128/CODE128_AUTO.js", + "CODE128.js": "bin/barcodes/CODE128/CODE128.js", + "CODE128A.js": "bin/barcodes/CODE128/CODE128A.js", + "CODE128B.js": "bin/barcodes/CODE128/CODE128B.js", + "CODE128C.js": "bin/barcodes/CODE128/CODE128C.js", + "CODE39": "bin/barcodes/CODE39", + "constants.js": "bin/barcodes/ITF/constants.js", + "defaults.js": "bin/options/defaults.js", + "EAN_UPC": "bin/barcodes/EAN_UPC", + "EAN.js": "bin/barcodes/EAN_UPC/EAN.js", + "EAN13.js": "bin/barcodes/EAN_UPC/EAN13.js", + "EAN2.js": "bin/barcodes/EAN_UPC/EAN2.js", + "EAN5.js": "bin/barcodes/EAN_UPC/EAN5.js", + "EAN8.js": "bin/barcodes/EAN_UPC/EAN8.js", + "encoder.js": "bin/barcodes/EAN_UPC/encoder.js", + "ErrorHandler.js": "bin/exceptions/ErrorHandler.js", + "exceptions": "bin/exceptions", + "exceptions.js": "bin/exceptions/exceptions.js", + "fixOptions.js": "bin/help/fixOptions.js", + "GenericBarcode": "bin/barcodes/GenericBarcode", + "getOptionsFromElement.js": "bin/help/getOptionsFromElement.js", + "getRenderProperties.js": "bin/help/getRenderProperties.js", + "help": "bin/help", + "index.js": "bin/renderers/index.js", + "index.tmp.js": "bin/barcodes/index.tmp.js", + "ITF": "bin/barcodes/ITF", + "ITF.js": "bin/barcodes/ITF/ITF.js", + "ITF14.js": "bin/barcodes/ITF/ITF14.js", + "JsBarcode.js": "bin/JsBarcode.js", + "linearizeEncodings.js": "bin/help/linearizeEncodings.js", + "merge.js": "bin/help/merge.js", + "MSI": "bin/barcodes/MSI", + "MSI.js": "bin/barcodes/MSI/MSI.js", + "MSI10.js": "bin/barcodes/MSI/MSI10.js", + "MSI1010.js": "bin/barcodes/MSI/MSI1010.js", + "MSI11.js": "bin/barcodes/MSI/MSI11.js", + "MSI1110.js": "bin/barcodes/MSI/MSI1110.js", + "object.js": "bin/renderers/object.js", + "options": "bin/options", + "optionsFromStrings.js": "bin/help/optionsFromStrings.js", + "pharmacode": "bin/barcodes/pharmacode", + "renderers": "bin/renderers", + "shared.js": "bin/renderers/shared.js", + "svg.js": "bin/renderers/svg.js", + "UPC.js": "bin/barcodes/EAN_UPC/UPC.js", + "UPCE.js": "bin/barcodes/EAN_UPC/UPCE.js" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/less": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "source-map": "~0.6.0" + } + }, + "node_modules/local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ml-array-max": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz", + "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-min": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz", + "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-rescale": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", + "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-max": "^1.2.4", + "ml-array-min": "^1.2.3" + } + }, + "node_modules/ml-matrix": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.10.4.tgz", + "integrity": "sha512-rUyEhfNPzqFsltYwvjNeYQXlYEaVea3KgzcJKJteQUj2WVAGFx9fLNRjtMR9mg2B6bd5buxlmkZmxM4hmO+SKg==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-rescale": "^1.3.7" + } + }, + "node_modules/mlly": { + "version": "0.5.16", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-0.5.16.tgz", + "integrity": "sha512-LaJ8yuh4v0zEmge/g3c7jjFlhoCPfQn6RCjXgm9A0Qiuochq4BcuOxVfWmdnCoLTlg2MV+hqhOek+W2OhG0Lwg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "pathe": "^0.3.8", + "pkg-types": "^0.3.5", + "ufo": "^0.8.5" + } + }, + "node_modules/mlly/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/mockjs": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz", + "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "dependencies": { + "commander": "*" + }, + "bin": { + "random": "bin/random" + } + }, + "node_modules/monaco-editor": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz", + "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pathe": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.3.9.tgz", + "integrity": "sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinia": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.21.tgz", + "integrity": "sha512-6ol04PtL29O0Z6JHI47O3JUSoyOJ7Og0rstXrHVMZSP4zAldsQBXJCNF0i/H7m8vp/Hjd/CSmuPl7C5QAwpeWQ==", + "dependencies": { + "@vue/devtools-api": "^6.2.1", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.0.2.tgz", + "integrity": "sha512-84vPyUhPA/8Pr+1mT1ioNb2d8z4tvdgYRqMQf8xyauOVBKjo0ZcRBwPQBV7ZAJG43Kwar43nXG2jU+ZMvAFFRQ==", + "peerDependencies": { + "pinia": "^2.0.0" + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-0.3.6.tgz", + "integrity": "sha512-uQZutkkh6axl1GxDm5/+8ivVdwuJ5pyDGqJeSiIWIUWIqYiK3p9QKozN/Rv6eVvFoeSWkN1uoYeSDBwwBJBtbg==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^0.5.16", + "pathe": "^0.3.9" + } + }, + "node_modules/pkg-types/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/probe.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", + "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0", + "@probe.gl/log": "3.6.0", + "@probe.gl/stats": "3.6.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY= sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, + "node_modules/qrcode": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", + "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + }, + "node_modules/request-light": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.10.1.tgz", + "integrity": "sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz", + "integrity": "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "node_modules/scule": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/scule/-/scule-0.3.2.tgz", + "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", + "dev": true + }, + "node_modules/seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "peer": true + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-0.4.2.tgz", + "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", + "dev": true + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "0.8.6", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-0.8.6.tgz", + "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", + "dev": true + }, + "node_modules/unimport": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-0.7.0.tgz", + "integrity": "sha512-Cr0whz4toYVid3JHlni/uThwavDVVCk6Zw0Gxnol1c7DprTA+Isr4T+asO6rDGkhkgV7r3vSdSs5Ym8F15JA+w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "mlly": "^0.5.16", + "pathe": "^0.3.9", + "pkg-types": "^0.3.5", + "scule": "^0.3.2", + "strip-literal": "^0.4.2", + "unplugin": "^0.10.2" + } + }, + "node_modules/unimport/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/unplugin": { + "version": "0.10.2", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-0.10.2.tgz", + "integrity": "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.4.5" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.4.tgz", + "integrity": "sha512-lh/bRDRYwgnb9Cm5ur8TlTMGxA1GRZvgzCvBIf0vyuVRy7ebWcWefFElpUDpr8vLl+ZRGsPVCOGiYJ8TCR625Q==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.6.0", + "@rollup/pluginutils": "^5.0.2", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "unimport": "^0.7.0", + "unplugin": "^0.10.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/unplugin-layui-vue-resolver": { + "version": "0.0.13", + "resolved": "https://registry.npmmirror.com/unplugin-layui-vue-resolver/-/unplugin-layui-vue-resolver-0.0.13.tgz", + "integrity": "sha512-x3a0981c8oWiAnin/7uJAqnH3o5zxAZC/3eBsBrHzcv8knf0aiZbWnEsLK9Td8kImBFuGCIv6//cng2R6xtBGA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/unplugin-vue-components": { + "version": "0.22.9", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.22.9.tgz", + "integrity": "sha512-qBvooq3EgpjtYicxeccRUGUBBQCCw9rJ0kHPZPOSJd8TBZViSv86vuKLTRDHPyjWtclwOIkVStZJfPdJFhYUMw==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.6.0", + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "minimatch": "^5.1.0", + "resolve": "^1.22.1", + "unplugin": "^0.10.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/unplugin-vue-components/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/unplugin/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/vite": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "dependencies": { + "esbuild": "^0.16.3", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vscode-css-languageservice": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz", + "integrity": "sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==", + "dev": true, + "dependencies": { + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz", + "integrity": "sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==", + "dev": true, + "dependencies": { + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/vscode-jsonrpc": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz", + "integrity": "sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.17.1" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", + "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.1.tgz", + "integrity": "sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==", + "dev": true + }, + "node_modules/vscode-pug-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz", + "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==", + "deprecated": "WARNING: This project has been renamed to @volar/pug-language-service. Install using @volar/pug-language-service instead.", + "dev": true, + "dependencies": { + "@volar/code-gen": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@volar/transforms": "0.29.8", + "pug-lexer": "^5.0.1", + "pug-parser": "^6.0.0", + "vscode-languageserver": "^8.0.0-next.2" + } + }, + "node_modules/vscode-typescript-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz", + "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==", + "deprecated": "WARNING: This project has been renamed to @volar/typescript-language-service. Install using @volar/typescript-language-service instead.", + "dev": true, + "dependencies": { + "@volar/shared": "0.29.8", + "semver": "^7.3.5", + "upath": "^2.0.1", + "vscode-languageserver": "^8.0.0-next.2", + "vscode-languageserver-textdocument": "^1.0.1" + } + }, + "node_modules/vscode-typescript-languageservice/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", + "dev": true + }, + "node_modules/vscode-vue-languageservice": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz", + "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==", + "deprecated": "WARNING: This project has been renamed to @volar/vue-language-service. Install using @volar/vue-language-service instead.", + "dev": true, + "dependencies": { + "@volar/code-gen": "0.29.8", + "@volar/html2pug": "0.29.8", + "@volar/shared": "0.29.8", + "@volar/source-map": "0.29.8", + "@volar/transforms": "0.29.8", + "@volar/vue-code-gen": "0.29.8", + "@vscode/emmet-helper": "^2.8.0", + "@vue/reactivity": "^3.2.21", + "@vue/shared": "^3.2.21", + "request-light": "^0.5.4", + "upath": "^2.0.1", + "vscode-css-languageservice": "^5.1.7", + "vscode-html-languageservice": "^4.1.0", + "vscode-json-languageservice": "^4.1.8", + "vscode-languageserver": "^8.0.0-next.2", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-pug-languageservice": "0.29.8", + "vscode-typescript-languageservice": "0.29.8" + } + }, + "node_modules/vue": { + "version": "3.2.45", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz", + "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/vue-i18n": { + "version": "9.1.10", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.1.10.tgz", + "integrity": "sha512-jpr7gV5KPk4n+sSPdpZT8Qx3XzTcNDWffRlHV/cT2NUyEf+sEgTTmLvnBAibjOFJ0zsUyZlVTAWH5DDnYep+1g==", + "dependencies": { + "@intlify/core-base": "9.1.10", + "@intlify/shared": "9.1.10", + "@intlify/vue-devtools": "9.1.10", + "@vue/devtools-api": "^6.0.0-beta.7" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-monaco-editor": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/vue-monaco-editor/-/vue-monaco-editor-0.0.19.tgz", + "integrity": "sha512-6tgCWkC1WDPp8K1xgZ9Fp7U4ww0DIQPZC/x9Ih8hEuKPfpekzcHo2r9DaWa1lvzFMeJPv5e4mFCYhmR9+SAl8A==", + "dependencies": { + "lodash.debounce": "^4.0.8", + "vue": "^2.1.0" + } + }, + "node_modules/vue-monaco-editor/node_modules/@babel/parser": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-monaco-editor/node_modules/@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "dependencies": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "node_modules/vue-monaco-editor/node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/vue-monaco-editor/node_modules/vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "dependencies": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-router": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.5.tgz", + "integrity": "sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ==", + "dependencies": { + "@vue/devtools-api": "^6.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz", + "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==", + "dev": true, + "dependencies": { + "@volar/shared": "0.29.8", + "vscode-vue-languageservice": "0.29.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/zrender": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz", + "integrity": "sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + }, "dependencies": { "@ant-design/colors": { "version": "4.0.5", @@ -312,9 +4797,9 @@ } }, "@antv/layout": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.13.tgz", - "integrity": "sha512-N5dNTH3EW2B1/gNUg38OuOvc7jtHMjvY8i5+BDZn4ejYAovyhPJeIvhIhdjOir6UTXWhvtzVYYDXYfpr8/mQtQ==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.14.tgz", + "integrity": "sha512-FkW7Y3UT8UqoeCH/HtyN2NQq+hcOyz6SLKW/Ba14GS6o5Qul87iyYNVpNAVbwyCT4pRaYP4DB8tGg/wX87k/PQ==", "requires": { "@antv/g-webgpu": "0.7.2", "@antv/graphlib": "^1.0.0", @@ -382,6 +4867,14 @@ } } }, + "@antv/vis-predict-engine": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@antv/vis-predict-engine/-/vis-predict-engine-0.1.1.tgz", + "integrity": "sha512-WMt/1auGn6KMubLOW3yoyhNrHUcEqlRETKcVkCnCP6StCLzBgjZqCFwbVz5vz0l7bWfYuXULth5lZ8q/JAYTOg==", + "requires": { + "@tensorflow/tfjs": "^2.7.0" + } + }, "@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", @@ -747,6 +5240,146 @@ "picomatch": "^2.3.1" } }, + "@tensorflow/tfjs": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.8.6.tgz", + "integrity": "sha512-/Hk3YCAreNicuQJsAIG32UGHaQj8UwX8y8ZrKVb/CrXOhrRyZmxGSZt9KMVe8MDoydenuGhZCqJUIaWdIKIA5g==", + "requires": { + "@tensorflow/tfjs-backend-cpu": "2.8.6", + "@tensorflow/tfjs-backend-webgl": "2.8.6", + "@tensorflow/tfjs-converter": "2.8.6", + "@tensorflow/tfjs-core": "2.8.6", + "@tensorflow/tfjs-data": "2.8.6", + "@tensorflow/tfjs-layers": "2.8.6", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } + } + }, + "@tensorflow/tfjs-backend-cpu": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.8.6.tgz", + "integrity": "sha512-x9WTTE9p3Pon2D0d6HH1UCIJsU1w3v9sF3vxJcp+YStrjDefWoW5pwxHCckEKTRra7GWg3CwMKK3Si2dat4H1A==", + "requires": { + "@types/seedrandom": "2.4.27", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + } + } + }, + "@tensorflow/tfjs-backend-webgl": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.8.6.tgz", + "integrity": "sha512-kPgm3Dim0Li5MleybYKSZVUCu91ipDjZtTA5RrJx/Dli115qwWdiRGOHYwsIEY61hZoE0m3amjWLUBxtwMW1Nw==", + "requires": { + "@tensorflow/tfjs-backend-cpu": "2.8.6", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "@types/webgl2": "0.0.5", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + } + } + }, + "@tensorflow/tfjs-converter": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.8.6.tgz", + "integrity": "sha512-Uv4YC66qjVC9UwBxz0IeLZ8KS2CReh63WlGRtHcSwDEYiwsa7cvp9H6lFSSPT7kiJmrK6JtHeJGIVcTuNnSt9w==", + "requires": {} + }, + "@tensorflow/tfjs-core": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-2.8.6.tgz", + "integrity": "sha512-jS28M1POUOjnWgx3jp1v5D45DUQE8USsAHHkL/01z75KnYCAAmgqJSH4YKLiYACg3eBLWXH/KTcSc6dHAX7Kfg==", + "requires": { + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "node-fetch": "~2.6.1", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==" + } + } + }, + "@tensorflow/tfjs-data": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-2.8.6.tgz", + "integrity": "sha512-zoDUfd5TfkYdviqu2bObwyJGXJiOvBckOTP9j36PUs6s+4DbTIDttyxdfeEaiiLX9ZUFU58CoW+3LI/dlFVyoQ==", + "requires": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1" + } + }, + "@tensorflow/tfjs-layers": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.8.6.tgz", + "integrity": "sha512-fdZ0i/R2dIKmy8OB5tBAsm5IbAHfJpI6AlbjxpgoU3aWj1HCdDo+pMji928MkDJhP01ISgFTgw/7PseGNaUflw==", + "requires": {} + }, "@types/d3-timer": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-2.0.1.tgz", @@ -763,12 +5396,38 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz", "integrity": "sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==" }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "@types/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==", "dev": true }, + "@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + }, "@types/qrcode": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.0.tgz", @@ -777,11 +5436,26 @@ "@types/node": "*" } }, + "@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ==" + }, "@types/web-bluetooth": { "version": "0.0.16", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" }, + "@types/webgl-ext": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + }, + "@types/webgl2": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.5.tgz", + "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==" + }, "@umijs/ssr-darkreader": { "version": "4.9.45", "resolved": "https://registry.npmjs.org/@umijs/ssr-darkreader/-/ssr-darkreader-4.9.45.tgz", @@ -791,7 +5465,8 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", - "dev": true + "dev": true, + "requires": {} }, "@volar/code-gen": { "version": "0.29.8", @@ -1000,7 +5675,8 @@ "vue-demi": { "version": "0.13.11", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "requires": {} } } }, @@ -1020,7 +5696,8 @@ "vue-demi": { "version": "0.13.11", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "requires": {} } } }, @@ -1053,6 +5730,14 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1139,6 +5824,15 @@ "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -1252,6 +5946,11 @@ "is-what": "^3.14.1" } }, + "core-js": { + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", + "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==" + }, "cropperjs": { "version": "1.5.12", "resolved": "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.5.12.tgz", @@ -1317,7 +6016,8 @@ "dagre-compound": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", - "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==" + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", + "requires": {} }, "dayjs": { "version": "1.11.3", @@ -1496,8 +6196,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { "version": "5.0.0", @@ -1652,6 +6351,11 @@ "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2041,6 +6745,14 @@ "sax": "^1.2.4" } }, + "node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2143,14 +6855,16 @@ "vue-demi": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", - "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==" + "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==", + "requires": {} } } }, "pinia-plugin-persistedstate": { "version": "3.0.2", "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.0.2.tgz", - "integrity": "sha512-84vPyUhPA/8Pr+1mT1ioNb2d8z4tvdgYRqMQf8xyauOVBKjo0ZcRBwPQBV7ZAJG43Kwar43nXG2jU+ZMvAFFRQ==" + "integrity": "sha512-84vPyUhPA/8Pr+1mT1ioNb2d8z4tvdgYRqMQf8xyauOVBKjo0ZcRBwPQBV7ZAJG43Kwar43nXG2jU+ZMvAFFRQ==", + "requires": {} }, "pkg-types": { "version": "0.3.6", @@ -2518,6 +7232,12 @@ "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", "dev": true }, + "seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "peer": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2553,6 +7273,11 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", @@ -2588,6 +7313,14 @@ } } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -2620,6 +7353,11 @@ "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", "dev": true }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -2629,7 +7367,7 @@ "version": "4.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "dev": true + "devOptional": true }, "ufo": { "version": "0.8.6", @@ -3027,6 +7765,11 @@ "vscode-vue-languageservice": "0.29.8" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -3039,6 +7782,15 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", diff --git a/dashboard/package.json b/dashboard/package.json index b9077dd..7ba33b7 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -10,6 +10,7 @@ "dependencies": { "@antv/g2": "v4.2.8", "@antv/g6": "^4.8.5", + "@antv/vis-predict-engine": "^0.1.1", "@layui/layui-vue": "1.8.4", "axios": "^1.2.1", "echarts": "^5.4.1", @@ -28,8 +29,8 @@ "@types/nprogress": "^0.2.0", "@vitejs/plugin-vue": "^4.0.0", "@vue/compiler-sfc": "^3.2.45", - "rollup-plugin-visualizer": "^5.8.3", "less": "^4.1.2", + "rollup-plugin-visualizer": "^5.8.3", "typescript": "^4.5.4", "unplugin-auto-import": "^0.11.2", "unplugin-layui-vue-resolver": "^0.0.13", diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index ec0fb02..ced883e 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -12,7 +12,6 @@ export default [ children: [ { path: "/engines/engines-history", - name: "历史记录", component: () => import('../../views/Engines/engine-history.vue'), meta: {title: '历史记录', requireAuth: true}, }, diff --git a/dashboard/src/views/ReportManager/metrics_detail.vue b/dashboard/src/views/ReportManager/metrics_detail.vue index 76e13f6..cf901aa 100644 --- a/dashboard/src/views/ReportManager/metrics_detail.vue +++ b/dashboard/src/views/ReportManager/metrics_detail.vue @@ -7,6 +7,8 @@ ")); } -- Gitee From 50599acb817dced112e979e4db03581284d716d9 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Sat, 11 Feb 2023 18:52:15 +0800 Subject: [PATCH 33/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8A=A8=E6=80=81=E6=B3=A8=E5=86=8C=E7=9F=AD=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/smartboot/flow/core/script/ScriptDetector.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/script/ScriptDetector.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/script/ScriptDetector.java index cf892fc..3f69015 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/script/ScriptDetector.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/script/ScriptDetector.java @@ -71,6 +71,14 @@ public class ScriptDetector { return javaTypes.get(type.trim().toLowerCase()); } + public void register(String phrase, Class javaType) { + AssertUtil.notBlank(phrase, "phrase must not blank"); + AssertUtil.notNull(javaType, "type must be null"); + AssertUtil.isTrue(ScriptCondition.class.isAssignableFrom(javaType), "type must be a subclass of ScriptCondition"); + AssertUtil.isTrue(ScriptCondition.class != (javaType), "type must be a subclass of ScriptCondition"); + javaTypes.put(phrase, javaType); + } + public String getPhrase(Class type) { AssertUtil.notNull(type, "type must not null"); for (Map.Entry> entry : javaTypes.entrySet()) { -- Gitee From 447475f62255a1246ca641cf6f7c59d34ae09bd2 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Sat, 11 Feb 2023 20:53:21 +0800 Subject: [PATCH 34/76] qinluo: - fix code style - fix scription condition bind custom variable --- .../org/smartboot/flow/manager/metric/DefaultMetrics.java | 1 + .../flow/manager/trace/ManagerExecutionListener.java | 8 ++++++-- .../condition/extension/groovy/GroovyScriptCondition.java | 2 +- .../condition/extension/ognl/OgnlScriptCondition.java | 2 +- .../extension/qlexpress/QlExpressScriptCondition.java | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java index d8ca163..99864e8 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/DefaultMetrics.java @@ -40,6 +40,7 @@ public class DefaultMetrics extends Metrics { return new Counter(); } + @Override public void reset() { COUNTERS.forEach((k, v) -> v.reset()); } diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index 49ae618..fcfaba7 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -69,7 +69,9 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { } ComponentData data = getComponentData(object, trace); - if (data == null) return; + if (data == null) { + return; + } data.setEscape(System.currentTimeMillis() - data.getStart()); data.setEx(context.getFatal()); @@ -87,7 +89,9 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { } ComponentData data = getComponentData(object, trace); - if (data == null) return; + if (data == null) { + return; + } data.setRollbackStart(System.currentTimeMillis()); } diff --git a/smart-flow-script-condition/smart-flow-script-groovy/src/main/java/org/smartboot/flow/condition/extension/groovy/GroovyScriptCondition.java b/smart-flow-script-condition/smart-flow-script-groovy/src/main/java/org/smartboot/flow/condition/extension/groovy/GroovyScriptCondition.java index cf3967c..475b0b6 100644 --- a/smart-flow-script-condition/smart-flow-script-groovy/src/main/java/org/smartboot/flow/condition/extension/groovy/GroovyScriptCondition.java +++ b/smart-flow-script-condition/smart-flow-script-groovy/src/main/java/org/smartboot/flow/condition/extension/groovy/GroovyScriptCondition.java @@ -36,7 +36,7 @@ public class GroovyScriptCondition extends ScriptCondition { data.put(ScriptConstants.CONTEXT, engineContext); data.put(ScriptConstants.CTX, engineContext); - Map variables = super.bindCustomized(engineContext); + Map variables = this.bindCustomized(engineContext); if (variables != null) { data.putAll(variables); } diff --git a/smart-flow-script-condition/smart-flow-script-ognl/src/main/java/org/smartboot/flow/condition/extension/ognl/OgnlScriptCondition.java b/smart-flow-script-condition/smart-flow-script-ognl/src/main/java/org/smartboot/flow/condition/extension/ognl/OgnlScriptCondition.java index 55dded9..796434a 100644 --- a/smart-flow-script-condition/smart-flow-script-ognl/src/main/java/org/smartboot/flow/condition/extension/ognl/OgnlScriptCondition.java +++ b/smart-flow-script-condition/smart-flow-script-ognl/src/main/java/org/smartboot/flow/condition/extension/ognl/OgnlScriptCondition.java @@ -29,7 +29,7 @@ public class OgnlScriptCondition extends ScriptCondition { context.put(ScriptConstants.CONTEXT, engineContext); context.put(ScriptConstants.CTX, engineContext); - Map variables = super.bindCustomized(engineContext); + Map variables = this.bindCustomized(engineContext); if (variables != null) { context.putAll(variables); } diff --git a/smart-flow-script-condition/smart-flow-script-qlexpress/src/main/java/org/smartboot/flow/condition/extension/qlexpress/QlExpressScriptCondition.java b/smart-flow-script-condition/smart-flow-script-qlexpress/src/main/java/org/smartboot/flow/condition/extension/qlexpress/QlExpressScriptCondition.java index a3bff74..b74f17b 100644 --- a/smart-flow-script-condition/smart-flow-script-qlexpress/src/main/java/org/smartboot/flow/condition/extension/qlexpress/QlExpressScriptCondition.java +++ b/smart-flow-script-condition/smart-flow-script-qlexpress/src/main/java/org/smartboot/flow/condition/extension/qlexpress/QlExpressScriptCondition.java @@ -30,7 +30,7 @@ public class QlExpressScriptCondition extends ScriptCondition { qlContext.put(ScriptConstants.CONTEXT, engineContext); qlContext.put(ScriptConstants.CTX, engineContext); - Map variables = super.bindCustomized(engineContext); + Map variables = this.bindCustomized(engineContext); if (variables != null) { qlContext.putAll(variables); } -- Gitee From 9c26d79f036889bd2d37dc51ab599dc349849ac1 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Sat, 11 Feb 2023 21:20:58 +0800 Subject: [PATCH 35/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20EngineInitia?= =?UTF-8?q?lizer=E7=A7=BB=E5=8A=A8=E5=88=B0spring=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/extension}/EngineInitializer.java | 6 ++- .../FlowInitializerConfiguration.java | 49 +------------------ 2 files changed, 6 insertions(+), 49 deletions(-) rename {smart-flow-manager/src/main/java/org/smartboot/flow/manager => smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension}/EngineInitializer.java (89%) diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/EngineInitializer.java b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/EngineInitializer.java similarity index 89% rename from smart-flow-manager/src/main/java/org/smartboot/flow/manager/EngineInitializer.java rename to smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/EngineInitializer.java index eac90d0..1cc239b 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/EngineInitializer.java +++ b/smart-flow-spring-extension/src/main/java/org/smartboot/flow/spring/extension/EngineInitializer.java @@ -1,8 +1,10 @@ -package org.smartboot.flow.manager; +package org.smartboot.flow.spring.extension; import org.smartboot.flow.core.exception.FlowException; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.manager.NullReloader; import org.smartboot.flow.manager.reload.Reloader; +import org.springframework.beans.factory.config.BeanPostProcessor; import java.util.List; import java.util.Map; @@ -13,7 +15,7 @@ import java.util.concurrent.ConcurrentHashMap; * @date 2023-01-05 19:42:58 * @since 1.0.0 */ -public class EngineInitializer { +public class EngineInitializer implements BeanPostProcessor { /** * Engine reloaders. diff --git a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowInitializerConfiguration.java b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowInitializerConfiguration.java index f042783..1f31f65 100644 --- a/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowInitializerConfiguration.java +++ b/smart-flow-springboot-starter/src/main/java/org/smartboot/flow/springboot/extension/FlowInitializerConfiguration.java @@ -1,11 +1,7 @@ package org.smartboot.flow.springboot.extension; -import org.smartboot.flow.manager.EngineInitializer; +import org.smartboot.flow.spring.extension.EngineInitializer; import org.smartboot.flow.manager.reload.Reloader; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -26,54 +22,13 @@ import java.util.Arrays; @ConfigurationProperties(prefix = "smart.flow.initialize") @ConditionalOnProperty(name = "smart.flow.initialize.engines") @AutoConfigureAfter(FlowReloadConfiguration.class) -public class FlowInitializerConfiguration implements BeanPostProcessor, BeanFactoryAware { +public class FlowInitializerConfiguration { /** * Initializer engines, multiple engine name split with , */ private String engines; - /** - * Ensure EngineInitializer#start execute in high order. - */ - private volatile boolean processed; - private BeanFactory beanFactory; - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - // Fire EngineInitializer#start - this.process(); - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - private void process() { - if (processed) { - return; - } - - processed = true; - - try { - beanFactory.getBean("springboot-engine-initializer"); - } catch (Exception ignored) { - try { - beanFactory.getBean(EngineInitializer.class); - } catch (Exception ignore) { - - } - } - } - - @Override - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { - this.beanFactory = beanFactory; - } - @Bean(value = "springboot-engine-initializer", initMethod = "start") @ConditionalOnBean(Reloader.class) @ConditionalOnMissingBean(EngineInitializer.class) -- Gitee From cb94bee3669a5a23fed0544ea1dfef2a104d4de7 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Sun, 12 Feb 2023 17:58:56 +0800 Subject: [PATCH 36/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E9=A1=B5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/views/Engines/engine-edit.vue | 38 ++++++++++++++++----- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/dashboard/src/views/Engines/engine-edit.vue b/dashboard/src/views/Engines/engine-edit.vue index 3ad2636..3be41c4 100644 --- a/dashboard/src/views/Engines/engine-edit.vue +++ b/dashboard/src/views/Engines/engine-edit.vue @@ -8,11 +8,13 @@ -
-
-
+
+
+
+ +
@@ -22,9 +24,6 @@
-
- -
@@ -38,14 +37,37 @@ } .engine_edit_form { - width: 50%; + width: 100%; height: 90%; } .engine_img_view { - width: 50%; + width: 100%; height: 90%; } + +.layout-edit-line { + display: flex; + height: 680px; + flex-direction: row; +} + +.layout-editor { + flex: 1 1 400px; + /* flex: 0 0 400px; */ +} + +.layout-preview-image { + width: 100%; +} + +.layout-preview { + /* flex: 0 0 50%; */ + flex: 1 1 400px; + overflow: scroll; + height: 680px; + margin-left: 12px; +} \ No newline at end of file diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java index 9e4fbc3..7dfb381 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/controller/ReportController.java @@ -13,6 +13,7 @@ import org.smartboot.flow.manager.trace.TraceReportRequest; import org.smartboot.smart.flow.admin.Result; import org.smartboot.smart.flow.admin.g6.G6EngineVisitor; import org.smartboot.smart.flow.admin.g6.MetricsEngineAnalyzer; +import org.smartboot.smart.flow.admin.g6.TraceEngineAnalyzer; import org.smartboot.smart.flow.admin.mapper.EngineMetricMapper; import org.smartboot.smart.flow.admin.mapper.EngineSnapshotMapper; import org.smartboot.smart.flow.admin.mapper.EngineTraceMapper; @@ -185,6 +186,39 @@ public class ReportController { return Result.ok(traces); } + @GetMapping("/trace_detail") + public String tradeDetail(@RequestParam("id") Long id) { + LOGGER.info("trace id = {}", id); + + EngineTrace trace = traceMapper.detail(id); + if (trace == null) { + return Result.fail(500, "cannot find trace"); + } + + EngineSnapshot snapshot = snapshotMapper.detail(trace.getEngineName(), trace.getMd5()); + + DefaultParser parser = new DefaultParser(); + parser.setObjectCreator(new FakeObjectCreator()); + + parser.parse(new ByteArrayInputStream(snapshot.getContent().getBytes(StandardCharsets.UTF_8))); + List engineNames = parser.getEngineNames(); + AssertUtil.isTrue(engineNames.size() == 1, "只允许存在一个engine"); + parser.getEngine(engineNames.get(0)).validate(); + + // ensure name. + RegisterEngineVisitor visitor = new RegisterEngineVisitor(); + parser.getEngine(engineNames.get(0)).visit(visitor); + + G6EngineVisitor g6Visitor = new G6EngineVisitor(); + g6Visitor.visit(parser.getEngine(engineNames.get(0))); + + TraceEngineAnalyzer analyzer = new TraceEngineAnalyzer(trace.getContent()); + g6Visitor.getResult().getNodes().forEach(analyzer::analyze); + g6Visitor.getResult().getCombos().forEach(analyzer::analyze); + + return Result.ok(g6Visitor.getResult()); + } + @PostMapping("/trace") public String receiveTrace(@RequestBody TraceReportRequest model) { LOGGER.info("receive \n {}", JSON.toJSONString(model)); diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Combo.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Combo.java index dc909a9..32d833d 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Combo.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Combo.java @@ -16,14 +16,14 @@ public class Combo { */ private ComponentInfo componentInfo; - private Object metrics; + private Object customData; - public Object getMetrics() { - return metrics; + public Object getCustomData() { + return customData; } - public void setMetrics(Object metrics) { - this.metrics = metrics; + public void setCustomData(Object customData) { + this.customData = customData; } public String getLabel() { diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/MetricsEngineAnalyzer.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/MetricsEngineAnalyzer.java index a2f386c..3b6696f 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/MetricsEngineAnalyzer.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/MetricsEngineAnalyzer.java @@ -32,12 +32,12 @@ public class MetricsEngineAnalyzer extends EngineAnalyzer { } JSONObject jsonObject = metricsMap.get(node.getId()); - node.setMetrics(jsonObject.get("metrics")); + node.setCustomData(jsonObject.get("metrics")); } @Override public void analyze(Combo combo) { JSONObject jsonObject = metricsMap.get(combo.getId()); - combo.setMetrics(jsonObject.get("metrics")); + combo.setCustomData(jsonObject.get("metrics")); } } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Node.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Node.java index debc2f6..38ee306 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Node.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/Node.java @@ -1,5 +1,7 @@ package org.smartboot.smart.flow.admin.g6; +import com.alibaba.fastjson.JSONObject; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -18,24 +20,25 @@ public class Node { private double x; private double y; private List> anchorPoints = new ArrayList<>(); + private final JSONObject style = new JSONObject(); /** * 组件信息 */ private ComponentInfo componentInfo; - private Object metrics; + private Object customData; public Node() { anchorPoints.add(Arrays.asList(0.5, 0d)); anchorPoints.add(Arrays.asList(0.5, 1d)); } - public Object getMetrics() { - return metrics; + public Object getCustomData() { + return customData; } - public void setMetrics(Object metrics) { - this.metrics = metrics; + public void setCustomData(Object customData) { + this.customData = customData; } public double getX() { @@ -101,4 +104,12 @@ public class Node { public void setComponentInfo(ComponentInfo componentInfo) { this.componentInfo = componentInfo; } + + public void addStyle(String key, String value) { + style.put(key, value); + } + + public JSONObject getStyle() { + return style; + } } diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java new file mode 100644 index 0000000..14da898 --- /dev/null +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java @@ -0,0 +1,47 @@ +package org.smartboot.smart.flow.admin.g6; + +import com.alibaba.fastjson.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author qinluo + * @date 2023/2/18 0:49 + * @since 1.0.0 + */ +public class TraceEngineAnalyzer extends EngineAnalyzer { + + private final Map traceDataMap; + + public TraceEngineAnalyzer(String content) { + this.traceDataMap = new HashMap<>(32); + List jsonArray = JSONObject.parseArray(content, JSONObject.class); + for (JSONObject item : jsonArray) { + traceDataMap.put(item.getString("name"), item); + } + + } + + @Override + public void analyze(Node node) { + if ("#start".equals(node.getId()) || "#end".equals(node.getId())) { + return; + } + + JSONObject jsonObject = traceDataMap.get(node.getId()); + node.setCustomData(jsonObject); + + // 可能没执行到此节点 + if (jsonObject != null && jsonObject.getString("ex") != null) { + node.addStyle("fill", "red"); + } + } + + @Override + public void analyze(Combo combo) { + JSONObject jsonObject = traceDataMap.get(combo.getId()); + combo.setCustomData(jsonObject); + } +} -- Gitee From 9f0fa779214928cb13237db45b72fbe9b5110468 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Mon, 20 Feb 2023 22:59:35 +0800 Subject: [PATCH 55/76] =?UTF-8?q?qinluo:=20=20=20=20=20=20-=20=E9=87=87?= =?UTF-8?q?=E9=9B=86=E9=93=BE=E8=B7=AF=E6=95=B0=E6=8D=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smartboot/flow/core/EngineContext.java | 6 +- .../flow/core/ExecutionListener.java | 49 +++++++++++++-- .../flow/core/ExecutionListenerSupport.java | 2 +- .../flow/core/ExecutionListeners.java | 4 +- .../org/smartboot/flow/core/Pipeline.java | 20 ++++-- .../flow/core/component/AdapterComponent.java | 13 +--- .../flow/core/component/ChooseComponent.java | 54 +++++++--------- .../flow/core/component/Component.java | 6 ++ .../flow/core/component/IfComponent.java | 35 ++++------- .../core/component/PipelineComponent.java | 7 +-- .../core/executable/ExecutableAdapter.java | 12 +--- .../smartboot/flow/core/invoker/Invoker.java | 2 +- .../flow/core/invoker/WrappedInvoker.java | 62 +++++++++++++++++++ .../core/parser/AbstractElementParser.java | 1 + .../metric/MetricExecutionListener.java | 4 +- .../trace/ManagerExecutionListener.java | 4 +- 16 files changed, 181 insertions(+), 100 deletions(-) create mode 100644 smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/WrappedInvoker.java diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java index 5d4b2b7..e41c913 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/EngineContext.java @@ -218,9 +218,13 @@ public class EngineContext{ } public void exit(Object obj) { + exit(obj, null); + } + + public void exit(Object obj, Throwable ex) { this.tracer.exit(); if (executing == EXECUTING) { - listener.afterExecute(this, obj); + listener.afterExecute(this, obj, ex); } else if (executing == ROLLBACK) { listener.afterRollback(this, obj); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListener.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListener.java index d9b624f..6d697c7 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListener.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListener.java @@ -7,11 +7,48 @@ package org.smartboot.flow.core; */ public interface ExecutionListener { - void start(EngineContext context); - void completed(EngineContext context); + /** + * 开始执行 + * @param ctx ctx 上下文 + */ + void start(EngineContext ctx); - void beforeExecute(EngineContext context, Object object); - void afterExecute(EngineContext context, Object object); - void beforeRollback(EngineContext context, Object object); - void afterRollback(EngineContext context, Object object); + /** + * 结束执行 + * @param ctx ctx 上下文 + */ + void completed(EngineContext ctx); + + /** + * 开始执行组件分支 + * + * @param ctx ctx 上下文 + * @param object 组件/分支 + */ + void beforeExecute(EngineContext ctx, Object object); + + /** + * 结束执行组件分支 + * + * @param ctx ctx 上下文 + * @param object 组件/分支 + * @param ex 执行错误信息 + */ + void afterExecute(EngineContext ctx, Object object, Throwable ex); + + /** + * 开始回滚组件分支 + * + * @param ctx ctx 上下文 + * @param object 组件/分支 + */ + void beforeRollback(EngineContext ctx, Object object); + + /** + * 结束执行组件分支 + * + * @param ctx ctx 上下文 + * @param object 组件/分支 + */ + void afterRollback(EngineContext ctx, Object object); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListenerSupport.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListenerSupport.java index c502bc0..a386172 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListenerSupport.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListenerSupport.java @@ -23,7 +23,7 @@ public class ExecutionListenerSupport implements ExecutionListener { } @Override - public void afterExecute(EngineContext context, Object object) { + public void afterExecute(EngineContext context, Object object, Throwable ex) { } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListeners.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListeners.java index e4eb249..5b89a16 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListeners.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/ExecutionListeners.java @@ -54,10 +54,10 @@ public class ExecutionListeners implements ExecutionListener { } @Override - public void afterExecute(EngineContext context, Object object) { + public void afterExecute(EngineContext context, Object object, Throwable ex) { for (ExecutionListener listener : listeners) { try { - listener.afterExecute(context, object); + listener.afterExecute(context, object, ex); } catch (Throwable e) { LOGGER.warn("execute listener {} failed", listener.getClass().getName(), e); } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java index 52b8505..48a8333 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/Pipeline.java @@ -5,7 +5,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smartboot.flow.core.component.Component; import org.smartboot.flow.core.invoker.InvokeListener; +import org.smartboot.flow.core.invoker.WrappedInvoker; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -41,7 +43,9 @@ public class Pipeline implements Rollback, Describable, Validator, M context.putExt(Key.of(this), executed); // Enter record track - context.enter(this); + if (!AuxiliaryUtils.isAnonymous(name)) { + context.enter(this); + } for (Component component : components) { if (context.isBroken()) { @@ -60,7 +64,9 @@ public class Pipeline implements Rollback, Describable, Validator, M } // Exit record track - context.exit(this); + if (!AuxiliaryUtils.isAnonymous(name)) { + context.exit(this); + } context.ensureFinished(); } @@ -72,19 +78,23 @@ public class Pipeline implements Rollback, Describable, Validator, M return; } - context.enter(this); + if (!AuxiliaryUtils.isAnonymous(name)) { + context.enter(this); + } // Execute rollback desc. for (int i = executed.size() - 1; i >= 0; i--) { Component component = executed.get(i); try { - component.rollback(context); + WrappedInvoker.rollback(context, component); } catch (Exception e) { LOGGER.error("{} rollback failed {}", this.name, component.describe()); } } - context.exit(this); + if (!AuxiliaryUtils.isAnonymous(name)) { + context.exit(this); + } } public boolean isRollbackable(EngineContext context) { diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java index 07ddbf1..c7c6345 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/AdapterComponent.java @@ -5,6 +5,7 @@ import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.Key; import org.smartboot.flow.core.common.ComponentType; import org.smartboot.flow.core.common.Pair; +import org.smartboot.flow.core.invoker.WrappedInvoker; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.ComponentVisitor; @@ -45,7 +46,7 @@ public class AdapterComponent extends Component { if (newContext == null) { return; } - component.rollback(newContext); + WrappedInvoker.rollback(newContext, component); } @Override @@ -62,8 +63,6 @@ public class AdapterComponent extends Component { @Override public int invoke(EngineContext context) throws Throwable { - context.enter(this); - // Convert. Pair pair = adapter.before(context); AssertUtil.notNull(pair, "adapter[" + getName() + "] result must not be null"); @@ -79,13 +78,7 @@ public class AdapterComponent extends Component { // Store converted objects. context.putExt(Key.of(this), newContext); - int invoke; - try { - invoke = component.invoke(newContext); - } finally { - context.exit(this); - } - + int invoke = WrappedInvoker.invoke(newContext, component); // Apply result to parent context. adapter.after(context, newContext); return invoke; diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java index 862af6d..b145564 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/ChooseComponent.java @@ -5,6 +5,7 @@ import org.smartboot.flow.core.Condition; import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.Key; import org.smartboot.flow.core.common.ComponentType; +import org.smartboot.flow.core.invoker.WrappedInvoker; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; @@ -50,34 +51,29 @@ public class ChooseComponent extends Component { @Override public int invoke(EngineContext context) throws Throwable { - context.enter(this); - try { - Object branch = condition.test(context); - Component execute = null; - - // Compatible - if (branch != null && allBranchWasString) { - branch = String.valueOf(branch); - } + Object branch = condition.test(context); + Component execute = null; - if (branch != null && branches.containsKey(branch)) { - execute = branches.get(branch); - } else if (defaultBranch != null) { - execute = defaultBranch; - branch = "default"; - } + // Compatible + if (branch != null && allBranchWasString) { + branch = String.valueOf(branch); + } - if (execute != null) { - context.putExt(Key.of(this), execute); - context.enter("branch##" + branch); - try { - execute.invoke(context); - } finally { - context.exit("branch##" + branch); - } + if (branch != null && branches.containsKey(branch)) { + execute = branches.get(branch); + } else if (defaultBranch != null) { + execute = defaultBranch; + branch = "default"; + } + + if (execute != null) { + context.putExt(Key.of(this), execute); + context.enter("branch##" + branch); + try { + WrappedInvoker.invoke(context, execute); + } finally { + context.exit("branch##" + branch); } - } finally { - context.exit(this); } return 1; @@ -96,13 +92,7 @@ public class ChooseComponent extends Component { return; } - context.enter(this); - try { - executed.rollback(context); - } finally { - context.exit(this); - } - + WrappedInvoker.rollback(context, executed); } @Override diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/Component.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/Component.java index 32363ec..0bb905c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/Component.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/Component.java @@ -114,6 +114,12 @@ public abstract class Component implements Rollback, Describable, Va public abstract int invoke(EngineContext context) throws Throwable; + /** + * Check current is rollbackable. + * + * @param context ctx + * @return true/false + */ public boolean isRollbackable(EngineContext context) { return rollback; } diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java index 89369f2..99d24f1 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/IfComponent.java @@ -5,6 +5,7 @@ import org.smartboot.flow.core.Condition; import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.Key; import org.smartboot.flow.core.common.ComponentType; +import org.smartboot.flow.core.invoker.WrappedInvoker; import org.smartboot.flow.core.util.AssertUtil; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.ConditionVisitor; @@ -42,24 +43,19 @@ public class IfComponent extends Component{ @Override public int invoke(EngineContext context) throws Throwable { - context.enter(this); - try { - Object test = condition.test(context); - Component execute = null; - - if (test != null && Boolean.parseBoolean(String.valueOf(test))) { - execute = this.thenComponent; - } else if (elseComponent != null) { - execute = this.elseComponent; - } + Object test = condition.test(context); + Component execute = null; + if (test != null && Boolean.parseBoolean(String.valueOf(test))) { + execute = this.thenComponent; + } else if (elseComponent != null) { + execute = this.elseComponent; + } - if (execute != null) { - context.putExt(Key.of(this), execute); - execute.invoke(context); - } - } finally { - context.exit(this); + + if (execute != null) { + context.putExt(Key.of(this), execute); + WrappedInvoker.invoke(context, execute); } return 1; @@ -78,12 +74,7 @@ public class IfComponent extends Component{ return; } - context.enter(this); - try { - executed.rollback(context); - } finally { - context.exit(this); - } + WrappedInvoker.rollback(context, executed); } @Override diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java index 7564a08..7764932 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/component/PipelineComponent.java @@ -5,6 +5,7 @@ import org.smartboot.flow.core.EngineContext; import org.smartboot.flow.core.Pipeline; import org.smartboot.flow.core.common.ComponentType; import org.smartboot.flow.core.util.AssertUtil; +import org.smartboot.flow.core.util.AuxiliaryUtils; import org.smartboot.flow.core.visitor.ComponentVisitor; import org.smartboot.flow.core.visitor.PipelineVisitor; @@ -41,7 +42,7 @@ public class PipelineComponent extends Component { subprocess.apply(); } - if (subprocess.getRollback() && !isAnonymous()) { + if (subprocess.getRollback() && !AuxiliaryUtils.isAnonymous(pipeline.describe())) { subprocess.setExecuting(EngineContext.ROLLBACK); this.rollback(subprocess); } @@ -53,10 +54,6 @@ public class PipelineComponent extends Component { return 1; } - private boolean isAnonymous() { - return pipeline.describe().contains("anonymous-pipeline"); - } - @Override public boolean isRollbackable(EngineContext context) { return pipeline.isRollbackable(context); diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/executable/ExecutableAdapter.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/executable/ExecutableAdapter.java index e11d123..f6dfadd 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/executable/ExecutableAdapter.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/executable/ExecutableAdapter.java @@ -32,8 +32,6 @@ public class ExecutableAdapter extends Component implements Rollback< @Override public int invoke(EngineContext context) { - context.enter(this); - try { executable.execute(context); } catch (Throwable e) { @@ -49,8 +47,6 @@ public class ExecutableAdapter extends Component implements Rollback< ((DegradeCallback) executable).doWithDegrade(context, e); } - } finally { - context.exit(this); } return 1; @@ -59,13 +55,7 @@ public class ExecutableAdapter extends Component implements Rollback< @Override public void rollback(EngineContext context) { - context.enter(this); - - try { - executable.rollback(context); - } finally { - context.exit(this); - } + executable.rollback(context); } @Override diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/Invoker.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/Invoker.java index 51ac717..cc0b094 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/Invoker.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/Invoker.java @@ -63,7 +63,7 @@ public class Invoker { Throwable fatal = null; try { - component.invoke(context); + WrappedInvoker.invoke(context, component); } catch (Throwable e) { fatal = e; } finally { diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/WrappedInvoker.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/WrappedInvoker.java new file mode 100644 index 0000000..ccfd059 --- /dev/null +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/invoker/WrappedInvoker.java @@ -0,0 +1,62 @@ +package org.smartboot.flow.core.invoker; + +import org.smartboot.flow.core.EngineContext; +import org.smartboot.flow.core.component.Component; +import org.smartboot.flow.core.component.PipelineComponent; + +/** + * @author qinluo + * @date 2023/2/20 22:06 + * @since 1.0.0 + */ +public class WrappedInvoker { + + public static int invoke(EngineContext context, Component component) throws Throwable { + delegateEnter(context, component); + + Throwable e = null; + + try { + return component.invoke(context); + } catch (Throwable ex) { + e = ex; + throw ex; + } finally { + delegateExit(context, component, e); + } + } + + public static void rollback(EngineContext context, Component component) { + // Enter + delegateEnter(context, component); + + Throwable e = null; + + try { + component.rollback(context); + } catch (Throwable ex) { + e = ex; + throw ex; + } finally { + delegateExit(context, component, e); + } + } + + private static void delegateEnter(EngineContext context, Component component) { + boolean isSubprocess = component instanceof PipelineComponent; + + if (!isSubprocess) { + // Enter + context.enter(component); + } + } + + private static void delegateExit(EngineContext context, Component component, Throwable ex) { + boolean isSubprocess = component instanceof PipelineComponent; + + if (!isSubprocess) { + // Enter + context.exit(component, ex); + } + } +} diff --git a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java index f44d2f8..ad4454c 100644 --- a/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java +++ b/smart-flow-core/src/main/java/org/smartboot/flow/core/parser/AbstractElementParser.java @@ -73,6 +73,7 @@ public abstract class AbstractElementParser implements ElementParser { // Wrap as pipeline. PipelineDefinition pipelineDef = new PipelineDefinition(); + pipelineDef.setName(pipelineIdentifier); pipelineDef.setIdentifier(pipelineIdentifier); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java index b27d33b..3a6e275 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/metric/MetricExecutionListener.java @@ -46,7 +46,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } @Override - public void afterExecute(EngineContext context, Object object) { + public void afterExecute(EngineContext context, Object object, Throwable ex) { if (!(object instanceof Measurable)) { return; } @@ -68,7 +68,7 @@ public class MetricExecutionListener extends ExecutionListenerSupport { } DefaultMetrics metrics = (DefaultMetrics) m; - if (context.getFatal() != null) { + if (ex != null) { metrics.addMetric(NamedMetrics.FAIL, 1); } long now = System.currentTimeMillis(); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java index fcfaba7..b583392 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/ManagerExecutionListener.java @@ -58,7 +58,7 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { } @Override - public void afterExecute(EngineContext context, Object object) { + public void afterExecute(EngineContext context, Object object, Throwable ex) { TraceData trace = context.getExt(TRACES); if (trace == null) { return; @@ -74,7 +74,7 @@ public class ManagerExecutionListener extends ExecutionListenerSupport { } data.setEscape(System.currentTimeMillis() - data.getStart()); - data.setEx(context.getFatal()); + data.setEx(ex); } @Override -- Gitee From fa467c20163107ca531669e83e46fe233142ae89 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Tue, 21 Feb 2023 14:23:22 +0800 Subject: [PATCH 56/76] =?UTF-8?q?qinluo:=20=E5=A0=86=E6=A0=88=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/ReportManager/trace_detail.vue | 16 +++++++++++++++ .../flow/admin/g6/TraceEngineAnalyzer.java | 8 ++++++++ .../flow/manager/trace/TraceReporter.java | 20 +++++++++++++------ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/dashboard/src/views/ReportManager/trace_detail.vue b/dashboard/src/views/ReportManager/trace_detail.vue index 22c4ce5..cf09522 100644 --- a/dashboard/src/views/ReportManager/trace_detail.vue +++ b/dashboard/src/views/ReportManager/trace_detail.vue @@ -133,6 +133,22 @@ export default { }); + graph.on("node:mouseover", (ev) => { + // node. + const item = ev.item; + const customData = item.getModel().customData; + + if (customData.ex) { + + layer.open({ + type: 4, + title: '错误报错', + content: customData.ex + }); + } + + }); + graph.data(data); // 读取 Step 2 中的数据源到图上 graph.render(); // 渲染图 }; diff --git a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java index 14da898..8455355 100644 --- a/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java +++ b/smart-flow-admin/src/main/java/org/smartboot/smart/flow/admin/g6/TraceEngineAnalyzer.java @@ -26,13 +26,21 @@ public class TraceEngineAnalyzer extends EngineAnalyzer { @Override public void analyze(Node node) { + node.addStyle("fill", "grey"); if ("#start".equals(node.getId()) || "#end".equals(node.getId())) { + node.addStyle("fill", "green"); return; } JSONObject jsonObject = traceDataMap.get(node.getId()); node.setCustomData(jsonObject); + if (jsonObject == null) { + node.addStyle("fill", "grey"); + } else { + node.addStyle("fill", "green"); + } + // 可能没执行到此节点 if (jsonObject != null && jsonObject.getString("ex") != null) { node.addStyle("fill", "red"); diff --git a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java index c628c86..cbd93c7 100644 --- a/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java +++ b/smart-flow-manager/src/main/java/org/smartboot/flow/manager/trace/TraceReporter.java @@ -102,11 +102,7 @@ public class TraceReporter { request.setEngineName(trace.getEngineName()); request.setSuccess(trace.getEx() == null); if (!request.getSuccess()) { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - PrintWriter writer = new PrintWriter(bos); - trace.getEx().printStackTrace(writer); - writer.flush(); - request.setEx(bos.toString()); + request.setEx(serialExToString(trace.getEx())); } if (flatEngine.getReportContent()) { @@ -121,7 +117,7 @@ public class TraceReporter { item.put("type", k.getType()); item.put("start", v.getStart()); item.put("escape", v.getEscape()); - item.put("ex", v.getEx()); + item.put("ex", serialExToString(v.getEx())); item.put("rollbackStart", v.getRollbackStart()); item.put("rollbackEnd", v.getRollbackEnd()); @@ -151,6 +147,18 @@ public class TraceReporter { } } + private String serialExToString(Throwable ex) { + if (ex == null) { + return null; + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + PrintWriter writer = new PrintWriter(bos); + ex.printStackTrace(writer); + writer.flush(); + return bos.toString(); + } + public void start() { URL parsedUrl; try { -- Gitee From 4aa667684388153a65b7f5266d36c1babcf28b75 Mon Sep 17 00:00:00 2001 From: qinluo <1558642210@qq.com> Date: Wed, 22 Feb 2023 19:39:06 +0800 Subject: [PATCH 57/76] =?UTF-8?q?qinluo:=20=E9=A1=B5=E9=9D=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/auto-imports.d.ts | 1 + dashboard/components.d.ts | 1 + dashboard/src/router/module/base-routes.ts | 12 +- dashboard/src/views/Engines/engine-edit.vue | 169 +++++++++--------- .../src/views/Engines/engine-history.vue | 60 +++---- dashboard/src/views/Engines/engine-list.vue | 6 +- .../src/views/Engines/history-detail.vue | 55 +++--- .../views/ReportManager/metrics_detail.vue | 12 +- .../views/ReportManager/report-metrics.vue | 2 +- .../src/views/ReportManager/report-trace.vue | 2 +- .../src/views/ReportManager/trace_detail.vue | 46 +++-- .../admin/controller/EnginesController.java | 49 +++-- .../flow/admin/g6/G6ComponentVisitor.java | 1 + .../flow/admin/g6/TraceEngineAnalyzer.java | 12 +- .../smart/flow/admin/mapper/EngineMapper.java | 12 +- .../main/resources/mapper/EngineMapper.xml | 14 +- .../flow/manager/ManagerConfiguration.java | 14 ++ .../flow/manager/trace/TraceReporter.java | 9 + 18 files changed, 275 insertions(+), 202 deletions(-) create mode 100644 smart-flow-manager/src/main/java/org/smartboot/flow/manager/ManagerConfiguration.java diff --git a/dashboard/auto-imports.d.ts b/dashboard/auto-imports.d.ts index 1d957a1..f59d056 100644 --- a/dashboard/auto-imports.d.ts +++ b/dashboard/auto-imports.d.ts @@ -1,5 +1,6 @@ // Generated by 'unplugin-auto-import' export {} declare global { + const LayLayer: typeof import('@layui/layer-vue')['LayLayer'] const layer: typeof import('@layui/layer-vue')['layer'] } diff --git a/dashboard/components.d.ts b/dashboard/components.d.ts index 438a5ea..7815348 100644 --- a/dashboard/components.d.ts +++ b/dashboard/components.d.ts @@ -45,6 +45,7 @@ declare module '@vue/runtime-core' { LayTab: typeof import('@layui/layui-vue')['LayTab'] LayTabItem: typeof import('@layui/layui-vue')['LayTabItem'] LayTable: typeof import('@layui/layui-vue')['LayTable'] + LayTextarea: typeof import('@layui/layui-vue')['LayTextarea'] LayTooltip: typeof import('@layui/layui-vue')['LayTooltip'] LayTransition: typeof import('@layui/layui-vue')['LayTransition'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/dashboard/src/router/module/base-routes.ts b/dashboard/src/router/module/base-routes.ts index 9205004..fce91c6 100644 --- a/dashboard/src/router/module/base-routes.ts +++ b/dashboard/src/router/module/base-routes.ts @@ -11,29 +11,29 @@ export default [ component: BaseLayout, children: [ { - path: "/engines/engines-history", + path: "/engines/engines-history/:id", component: () => import('../../views/Engines/engine-history.vue'), meta: {title: '历史记录', requireAuth: true}, }, { - path: "/engines/engines-edit", + path: "/engines/engines-edit/:id", component: () => import('../../views/Engines/engine-edit.vue'), meta: {title: '查看编辑', requireAuth: true}, }, { - path: "/engines/history-detail", + path: "/engines/history-detail/:id", component: () => import('../../views/Engines/history-detail.vue'), meta: {title: '历史详情', requireAuth: true}, }, { - path: "/report-manager/metrics-detail", + path: "/report-manager/metrics-detail/:id", component: () => import('../../views/ReportManager/metrics_detail.vue'), meta: {title: '数据详情', requireAuth: true}, }, { - path: "/report-manager/trace-detail", + path: "/report-manager/trace-detail/:id", component: () => import('../../views/ReportManager/trace_detail.vue'), - meta: {title: '数据详情', requireAuth: true}, + meta: {title: '链路详情', requireAuth: true}, } ] }, diff --git a/dashboard/src/views/Engines/engine-edit.vue b/dashboard/src/views/Engines/engine-edit.vue index 176b495..2b63ef3 100644 --- a/dashboard/src/views/Engines/engine-edit.vue +++ b/dashboard/src/views/Engines/engine-edit.vue @@ -1,28 +1,32 @@ + + \ No newline at end of file diff --git a/dashboard/src/views/ReportManager/trace_detail.vue b/dashboard/src/views/ReportManager/trace_detail.vue index c52cfa8..21d5cf9 100644 --- a/dashboard/src/views/ReportManager/trace_detail.vue +++ b/dashboard/src/views/ReportManager/trace_detail.vue @@ -95,8 +95,6 @@

wD30o3LX**RJIQt88fa^=+lMO0(JE{q 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 literal 0 HcmV?d00001 diff --git a/dashboard/resources/12.jpg b/dashboard/resources/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..363d76662c26610d727e43a3a712ff4822b93a33 GIT binary patch literal 102149 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 IAtxXIAKF-=cmMzZ literal 0 HcmV?d00001 diff --git a/dashboard/resources/13.jpg b/dashboard/resources/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cc3ea145e81087f558d5eb39159ec27a178311c GIT binary patch literal 121331 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Θ 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