diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..7803db6 --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,58 @@ +{ + "globals": { + "EffectScope": true, + "computed": true, + "createApp": true, + "customRef": true, + "defineAsyncComponent": true, + "defineComponent": true, + "effectScope": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "inject": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onUnmounted": true, + "onUpdated": true, + "provide": true, + "reactive": true, + "readonly": true, + "ref": true, + "resolveComponent": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "toRaw": true, + "toRef": true, + "toRefs": true, + "triggerRef": true, + "unref": true, + "useAttrs": true, + "useCssModule": true, + "useCssVars": true, + "useSlots": true, + "watch": true, + "watchEffect": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "ElMessageBox": true, + "ElMessage": true, + "ElNotification": true + } +} \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..6dc7f56 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + "env": { + "browser": true, + "es2021": true + }, + "parser": "vue-eslint-parser", + "extends": [ + "eslint:recommended", + "plugin:vue/vue3-essential", + "plugin:@typescript-eslint/recommended", + './.eslintrc-auto-import.json' + ], + "parserOptions": { + "ecmaVersion": "latest", + "parser": "@typescript-eslint/parser", + "sourceType": "module" + }, + "plugins": [ + "vue", + "@typescript-eslint" + ], + "rules": { + '@typescript-eslint/no-explicit-any': 0, + 'vue/multi-word-component-names': 0 + } +} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..9e19b88 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "printWidth": 200, + "tabWidth": 2, + "singleQuote": true, + "semi": false, + "trailingComma": "none", + "arrowParens": "avoid" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..30b15e2 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..6ac3b3e --- /dev/null +++ b/package.json @@ -0,0 +1,68 @@ +{ + "name": "main-web", + "version": "6.5.0", + "private": true, + "author": "Haijun Zhang ", + "scripts": { + "serve": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview", + "lint": "eslint src/**/*.{js,jsx,vue,ts,tsx} --fix", + "precommit": "lint-staged" + }, + "dependencies": { + "axios": "^0.27.2", + "clipboard": "^2.0.11", + "cmp-socket": "1.0.0", + "crypto-js": "^4.1.1", + "dayjs": "^1.11.4", + "element-plus": "^2.2.12", + "js-cookie": "^3.0.1", + "lodash-es": "^4.17.21", + "nprogress": "^0.2.0", + "path-to-regexp": "^6.2.1", + "qiankun": "^2.7.4", + "qs": "^6.11.0", + "vue": "^3.2.37", + "vue-router": "^4.1.3", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@commitlint/cli": "^17.0.3", + "@commitlint/config-conventional": "^17.0.3", + "@iconify-json/ep": "^1.1.6", + "@types/js-cookie": "^3.0.2", + "@types/node": "^18.6.2", + "@types/nprogress": "^0.2.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "@vitejs/plugin-vue": "^3.0.0", + "consola": "^2.15.3", + "eslint": "^8.21.0", + "eslint-plugin-vue": "^9.3.0", + "fast-glob": "^3.2.11", + "sass": "^1.54.0", + "typescript": "^4.6.4", + "unocss": "^0.45.1", + "unplugin-auto-import": "^0.10.2", + "unplugin-icons": "^0.14.7", + "unplugin-vue-components": "^0.21.2", + "vite": "^3.0.0", + "vite-plugin-eslint": "^1.7.0", + "vite-plugin-style-import": "^2.0.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^0.38.4" + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..da4856e --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4696 @@ +lockfileVersion: 5.3 + +specifiers: + '@commitlint/cli': ^17.0.3 + '@commitlint/config-conventional': ^17.0.3 + '@iconify-json/ep': ^1.1.6 + '@types/js-cookie': ^3.0.2 + '@types/node': ^18.6.2 + '@types/nprogress': ^0.2.0 + '@typescript-eslint/eslint-plugin': ^5.32.0 + '@typescript-eslint/parser': ^5.32.0 + '@vitejs/plugin-vue': ^3.0.0 + axios: ^0.27.2 + clipboard: ^2.0.11 + cmp-socket: 1.0.0 + consola: ^2.15.3 + crypto-js: ^4.1.1 + dayjs: ^1.11.4 + element-plus: ^2.2.12 + eslint: ^8.21.0 + eslint-plugin-vue: ^9.3.0 + fast-glob: ^3.2.11 + js-cookie: ^3.0.1 + lodash-es: ^4.17.21 + nprogress: ^0.2.0 + path-to-regexp: ^6.2.1 + qiankun: ^2.7.4 + qs: ^6.11.0 + sass: ^1.54.0 + typescript: ^4.6.4 + unocss: ^0.45.1 + unplugin-auto-import: ^0.10.2 + unplugin-icons: ^0.14.7 + unplugin-vue-components: ^0.21.2 + vite: ^3.0.0 + vite-plugin-eslint: ^1.7.0 + vite-plugin-style-import: ^2.0.0 + vite-plugin-svg-icons: ^2.0.1 + vue: ^3.2.37 + vue-router: ^4.1.3 + vue-tsc: ^0.38.4 + vuex: ^4.0.2 + +dependencies: + axios: 0.27.2 + clipboard: 2.0.11 + cmp-socket: 1.0.0 + crypto-js: 4.1.1 + dayjs: 1.11.4 + element-plus: 2.2.12_vue@3.2.37 + js-cookie: 3.0.1 + lodash-es: 4.17.21 + nprogress: 0.2.0 + path-to-regexp: 6.2.1 + qiankun: 2.7.4 + qs: 6.11.0 + vue: 3.2.37 + vue-router: 4.1.3_vue@3.2.37 + vuex: 4.0.2_vue@3.2.37 + +devDependencies: + '@commitlint/cli': 17.0.3 + '@commitlint/config-conventional': 17.0.3 + '@iconify-json/ep': 1.1.6 + '@types/js-cookie': 3.0.2 + '@types/node': 18.6.2 + '@types/nprogress': 0.2.0 + '@typescript-eslint/eslint-plugin': 5.32.0_43a51d9e2446a740dea4259743d3ab3e + '@typescript-eslint/parser': 5.32.0_eslint@8.21.0+typescript@4.7.4 + '@vitejs/plugin-vue': 3.0.1_vite@3.0.3+vue@3.2.37 + consola: 2.15.3 + eslint: 8.21.0 + eslint-plugin-vue: 9.3.0_eslint@8.21.0 + fast-glob: 3.2.11 + sass: 1.54.0 + typescript: 4.7.4 + unocss: 0.45.1_vite@3.0.3 + unplugin-auto-import: 0.10.2_vite@3.0.3 + unplugin-icons: 0.14.7_vite@3.0.3 + unplugin-vue-components: 0.21.2_vite@3.0.3+vue@3.2.37 + vite: 3.0.3_sass@1.54.0 + vite-plugin-eslint: 1.7.0_eslint@8.21.0+vite@3.0.3 + vite-plugin-style-import: 2.0.0_vite@3.0.3 + vite-plugin-svg-icons: 2.0.1_vite@3.0.3 + vue-tsc: 0.38.9_typescript@4.7.4 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.14 + dev: true + + /@antfu/install-pkg/0.1.0: + resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + dev: true + + /@antfu/utils/0.5.2: + resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/helper-validator-identifier/7.18.6: + resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + engines: {node: '>=6.9.0'} + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.18.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.18.9: + resolution: {integrity: sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.18.9 + + /@babel/runtime/7.18.9: + resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: false + + /@babel/types/7.18.9: + resolution: {integrity: sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.18.6 + to-fast-properties: 2.0.0 + + /@commitlint/cli/17.0.3: + resolution: {integrity: sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A==} + engines: {node: '>=v14'} + hasBin: true + dependencies: + '@commitlint/format': 17.0.0 + '@commitlint/lint': 17.0.3 + '@commitlint/load': 17.0.3 + '@commitlint/read': 17.0.0 + '@commitlint/types': 17.0.0 + execa: 5.1.1 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.5.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/config-conventional/17.0.3: + resolution: {integrity: sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A==} + engines: {node: '>=v14'} + dependencies: + conventional-changelog-conventionalcommits: 5.0.0 + dev: true + + /@commitlint/config-validator/17.0.3: + resolution: {integrity: sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.0.0 + ajv: 8.11.0 + dev: true + + /@commitlint/ensure/17.0.0: + resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.0.0 + lodash: 4.17.21 + dev: true + + /@commitlint/execute-rule/17.0.0: + resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/format/17.0.0: + resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.0.0 + chalk: 4.1.2 + dev: true + + /@commitlint/is-ignored/17.0.3: + resolution: {integrity: sha512-/wgCXAvPtFTQZxsVxj7owLeRf5wwzcXLaYmrZPR4a87iD4sCvUIRl1/ogYrtOyUmHwWfQsvjqIB4mWE/SqWSnA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.0.0 + semver: 7.3.7 + dev: true + + /@commitlint/lint/17.0.3: + resolution: {integrity: sha512-2o1fk7JUdxBUgszyt41sHC/8Nd5PXNpkmuOo9jvGIjDHzOwXyV0PSdbEVTH3xGz9NEmjohFHr5l+N+T9fcxong==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/is-ignored': 17.0.3 + '@commitlint/parse': 17.0.0 + '@commitlint/rules': 17.0.0 + '@commitlint/types': 17.0.0 + dev: true + + /@commitlint/load/17.0.3: + resolution: {integrity: sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.0.3 + '@commitlint/execute-rule': 17.0.0 + '@commitlint/resolve-extends': 17.0.3 + '@commitlint/types': 17.0.0 + '@types/node': 18.6.2 + chalk: 4.1.2 + cosmiconfig: 7.0.1 + cosmiconfig-typescript-loader: 2.0.2_1611b4c5cd7b2d49a7e7b69ba7ff579e + lodash: 4.17.21 + resolve-from: 5.0.0 + typescript: 4.7.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/message/17.0.0: + resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/parse/17.0.0: + resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.0.0 + conventional-changelog-angular: 5.0.13 + conventional-commits-parser: 3.2.4 + dev: true + + /@commitlint/read/17.0.0: + resolution: {integrity: sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/top-level': 17.0.0 + '@commitlint/types': 17.0.0 + fs-extra: 10.1.0 + git-raw-commits: 2.0.11 + dev: true + + /@commitlint/resolve-extends/17.0.3: + resolution: {integrity: sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.0.3 + '@commitlint/types': 17.0.0 + import-fresh: 3.3.0 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true + + /@commitlint/rules/17.0.0: + resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/ensure': 17.0.0 + '@commitlint/message': 17.0.0 + '@commitlint/to-lines': 17.0.0 + '@commitlint/types': 17.0.0 + execa: 5.1.1 + dev: true + + /@commitlint/to-lines/17.0.0: + resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/top-level/17.0.0: + resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} + engines: {node: '>=v14'} + dependencies: + find-up: 5.0.0 + dev: true + + /@commitlint/types/17.0.0: + resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} + engines: {node: '>=v14'} + dependencies: + chalk: 4.1.2 + dev: true + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@ctrl/tinycolor/3.4.1: + resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} + engines: {node: '>=10'} + dev: false + + /@element-plus/icons-vue/2.0.6_vue@3.2.37: + resolution: {integrity: sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew==} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.2.37 + dev: false + + /@eslint/eslintrc/1.3.0: + resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.3.3 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@floating-ui/core/0.7.3: + resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} + dev: false + + /@floating-ui/dom/0.5.4: + resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} + dependencies: + '@floating-ui/core': 0.7.3 + dev: false + + /@humanwhocodes/config-array/0.10.4: + resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/gitignore-to-minimatch/1.0.2: + resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@iconify-json/ep/1.1.6: + resolution: {integrity: sha512-EJNIHVsBOOfH6cuRqzPJT+zTnLPcLQGu3/WIENEXpWQ0wwIkaSWAewmPjS1ksvu4rf1lLJEgMimuivIrGSONKA==} + dependencies: + '@iconify/types': 1.1.0 + dev: true + + /@iconify/types/1.1.0: + resolution: {integrity: sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw==} + dev: true + + /@iconify/utils/1.0.33: + resolution: {integrity: sha512-vGeAqo7aGPxOQmGdVoXFUOuyN+0V7Lcrx2EvaiRjxUD1x6Om0Tvq2bdm7E24l2Pz++4S0mWMCVFXe/17EtKImQ==} + dependencies: + '@antfu/install-pkg': 0.1.0 + '@antfu/utils': 0.5.2 + '@iconify/types': 1.1.0 + debug: 4.3.4 + kolorist: 1.5.1 + local-pkg: 0.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.14: + resolution: {integrity: sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@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 + + /@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + 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 + + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@types/eslint/8.4.5: + resolution: {integrity: sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==} + dependencies: + '@types/estree': 1.0.0 + '@types/json-schema': 7.0.11 + dev: true + + /@types/estree/1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + dev: true + + /@types/js-cookie/3.0.2: + resolution: {integrity: sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==} + dev: true + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + + /@types/lodash-es/4.17.6: + resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==} + dependencies: + '@types/lodash': 4.14.182 + dev: false + + /@types/lodash/4.14.182: + resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==} + dev: false + + /@types/minimist/1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + + /@types/node/18.6.2: + resolution: {integrity: sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==} + dev: true + + /@types/normalize-package-data/2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/nprogress/0.2.0: + resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/svgo/2.6.3: + resolution: {integrity: sha512-5sP0Xgo0dXppY0tbYF6TevB/1+tzFLuu71XXxC/zGvQAn9PW7y+DwtDO81g0ZUPye00K6tPwtsLDOpARa0mFcA==} + dependencies: + '@types/node': 18.6.2 + dev: true + + /@types/web-bluetooth/0.0.14: + resolution: {integrity: sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==} + dev: false + + /@typescript-eslint/eslint-plugin/5.32.0_43a51d9e2446a740dea4259743d3ab3e: + resolution: {integrity: sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.32.0_eslint@8.21.0+typescript@4.7.4 + '@typescript-eslint/scope-manager': 5.32.0 + '@typescript-eslint/type-utils': 5.32.0_eslint@8.21.0+typescript@4.7.4 + '@typescript-eslint/utils': 5.32.0_eslint@8.21.0+typescript@4.7.4 + debug: 4.3.4 + eslint: 8.21.0 + functional-red-black-tree: 1.0.1 + ignore: 5.2.0 + regexpp: 3.2.0 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.32.0_eslint@8.21.0+typescript@4.7.4: + resolution: {integrity: sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.32.0 + '@typescript-eslint/types': 5.32.0 + '@typescript-eslint/typescript-estree': 5.32.0_typescript@4.7.4 + debug: 4.3.4 + eslint: 8.21.0 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.32.0: + resolution: {integrity: sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.32.0 + '@typescript-eslint/visitor-keys': 5.32.0 + dev: true + + /@typescript-eslint/type-utils/5.32.0_eslint@8.21.0+typescript@4.7.4: + resolution: {integrity: sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/utils': 5.32.0_eslint@8.21.0+typescript@4.7.4 + debug: 4.3.4 + eslint: 8.21.0 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.32.0: + resolution: {integrity: sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.32.0_typescript@4.7.4: + resolution: {integrity: sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.32.0 + '@typescript-eslint/visitor-keys': 5.32.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.32.0_eslint@8.21.0+typescript@4.7.4: + resolution: {integrity: sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@typescript-eslint/scope-manager': 5.32.0 + '@typescript-eslint/types': 5.32.0 + '@typescript-eslint/typescript-estree': 5.32.0_typescript@4.7.4 + eslint: 8.21.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.21.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.32.0: + resolution: {integrity: sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.32.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@unocss/cli/0.45.1: + resolution: {integrity: sha512-VdmX/iChUQh7s4sI9XOT/f2r1rjNjvJxHz2f04+YyTp8tYsYmIVR6GEQ3G4YL33LVmiyVBR5pU6jYMZA1fVfFw==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@unocss/config': 0.45.1 + '@unocss/core': 0.45.1 + '@unocss/preset-uno': 0.45.1 + cac: 6.7.12 + chokidar: 3.5.3 + colorette: 2.0.19 + consola: 2.15.3 + fast-glob: 3.2.11 + pathe: 0.3.2 + perfect-debounce: 0.1.3 + dev: true + + /@unocss/config/0.45.1: + resolution: {integrity: sha512-/yYlzu7t8J0QBclh5EHcodHcZL6yv38pwH6oDIoPkBX47S5nfTCXHsqN4MedcNO+9RWaeQhosnRmgaQybXQfvg==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.45.1 + unconfig: 0.3.5 + dev: true + + /@unocss/core/0.45.1: + resolution: {integrity: sha512-PRbpgWtXs+GnU8Mi6MAG3l/VCqmzn6s5k/QvQLG9J27AzN+ps651YKBfWKiGYrjMtt+0B41iq0w9fcNd8vQUpg==} + dev: true + + /@unocss/inspector/0.45.1: + resolution: {integrity: sha512-JSXw4VRve25YVjfkE+4j5BiNBHX/pNl6GWNLHUtC4dbxkly7dGyH+W/IWxUupLQu0L+hISKdWiqKYSpDOQK96w==} + dependencies: + gzip-size: 6.0.0 + sirv: 2.0.2 + dev: true + + /@unocss/preset-attributify/0.45.1: + resolution: {integrity: sha512-xA5t6+HRHVxn5p8IFTFrlnxMldhw8H82Wvrd/Gw8zAK5PeZlFrkyKo2uyfjR+AcO2QuiICZylLgLwoxNJmj57Q==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/preset-icons/0.45.1: + resolution: {integrity: sha512-pZVJLTnoqphJOCMtiiHeesCoqtafuRwAPQtlsr3M4es1i9Dsjbs5+pLFF3fjC1MhcVN8yIXFh4HSZiOIlqYFiw==} + dependencies: + '@iconify/utils': 1.0.33 + '@unocss/core': 0.45.1 + ohmyfetch: 0.4.18 + transitivePeerDependencies: + - supports-color + dev: true + + /@unocss/preset-mini/0.45.1: + resolution: {integrity: sha512-tlZf9E0jOVdEB9dmOPRME7CjL64oIYubowtibG+cHGMXb8QV9M9mpHMuuGnBbPOJQkSMkqBO7gl9yKqHEtWYrQ==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/preset-tagify/0.45.1: + resolution: {integrity: sha512-0IDihyDWJIQ23xkyQQjl28idRkHRrBG0MtprrE8uKs9j1ou3g+FzAIx34o4+tQ/CJ0pwCuCZ9ouEgOQ0HRv3CQ==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/preset-typography/0.45.1: + resolution: {integrity: sha512-tnvxmO2SlJmIfeDMuMZLaX4VQMIPhBvnB6a5/K+foK3+2/2pIW1QFS5f/cHvYxN0BqNWB+5tiiVjjB5TCvVMfg==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/preset-uno/0.45.1: + resolution: {integrity: sha512-AzYW4K3jMDqNNvf1zRJ8h+iiyvADEVbcrZVxh9EYtFf040HzylbdPHkX4TwsgIkdmAGnv43HsZpRlXbW+ge54A==} + dependencies: + '@unocss/core': 0.45.1 + '@unocss/preset-mini': 0.45.1 + '@unocss/preset-wind': 0.45.1 + dev: true + + /@unocss/preset-web-fonts/0.45.1: + resolution: {integrity: sha512-IfaQey27l544AB6QEOIlI18AHeQrcCfBYqvXu6w/oXdgwFLGihNaoE7hQ0XmFnFd6wDHbUOXYa8XpezDCJAPoQ==} + dependencies: + '@unocss/core': 0.45.1 + ohmyfetch: 0.4.18 + dev: true + + /@unocss/preset-wind/0.45.1: + resolution: {integrity: sha512-42EXlYndppz7bxv3q4J5CEV/SL+Oj51PXCbHLs1npufdsASFGOLkslDzB0lQlmk8RwoBCQSbodHzNhqOxaGjcA==} + dependencies: + '@unocss/core': 0.45.1 + '@unocss/preset-mini': 0.45.1 + dev: true + + /@unocss/reset/0.45.1: + resolution: {integrity: sha512-Dmz0/x2ION2noD4/t6Tjgwwp0R7lRP5QIkc3EuumYFXjdivU0gDRhNfcdM3yZUOsZRDreMkfiZoVKlypbNxD/g==} + dev: true + + /@unocss/scope/0.45.1: + resolution: {integrity: sha512-JVz/mW60DgImH5Mbc70tzoiGvK4kv/+1KAZPzjEPYR5sA2E9AhcF2/HcTFjYuwT4fzQRlNipUZ/c5fYcGpUCMw==} + dev: true + + /@unocss/transformer-attributify-jsx/0.45.1: + resolution: {integrity: sha512-aUkAhEDKEoa7FX/38bRDTxQaxYKBtvMNxk9zc7jwP9Ht7AA0QmdApDSmx5dqc8Za7DoCuJU8WGyglXWqRaPY+w==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/transformer-compile-class/0.45.1: + resolution: {integrity: sha512-GaVjiEyVRfGza1/NmMWyxnLQCVPY5vAm2wvc74nDf6Yn0goYjBmPviqmKGG533O/rl9zl78m+U7eP3ClPMLqQQ==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/transformer-directives/0.45.1: + resolution: {integrity: sha512-Wjb2JCn16dJXITIGgJ/T0DBshHT8bE4g5P8vqJDerHLBRxhhLHJWkjHl9OJLoqYJQ0/tu+dhzDppV0CZXBQ4Cg==} + dependencies: + '@unocss/core': 0.45.1 + css-tree: 2.1.0 + dev: true + + /@unocss/transformer-variant-group/0.45.1: + resolution: {integrity: sha512-NNHM81rf/oVg5CtXRK5ZitXoxsAJNsj93X76nY69ybuH5UHYJU0djJB1PlISOP+NE1WWtBdy3smVfj06NpilvQ==} + dependencies: + '@unocss/core': 0.45.1 + dev: true + + /@unocss/vite/0.45.1_vite@3.0.3: + resolution: {integrity: sha512-O5w8bIYFRBIO9MFc5Nca9FHHKh6vHu8OHNosfP5Ca0dq1TYMffR4qZ32QCudbdB1F7XQKhArgt/CJ2ADhhkBZw==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 + dependencies: + '@ampproject/remapping': 2.2.0 + '@rollup/pluginutils': 4.2.1 + '@unocss/config': 0.45.1 + '@unocss/core': 0.45.1 + '@unocss/inspector': 0.45.1 + '@unocss/scope': 0.45.1 + '@unocss/transformer-directives': 0.45.1 + magic-string: 0.26.2 + vite: 3.0.3_sass@1.54.0 + dev: true + + /@vitejs/plugin-vue/3.0.1_vite@3.0.3+vue@3.2.37: + resolution: {integrity: sha512-Ll9JgxG7ONIz/XZv3dssfoMUDu9qAnlJ+km+pBA0teYSXzwPCIzS/e1bmwNYl5dcQGs677D21amgfYAnzMl17A==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + vue: ^3.2.25 + dependencies: + vite: 3.0.3_sass@1.54.0 + vue: 3.2.37 + dev: true + + /@volar/code-gen/0.38.9: + resolution: {integrity: sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==} + dependencies: + '@volar/source-map': 0.38.9 + dev: true + + /@volar/source-map/0.38.9: + resolution: {integrity: sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==} + dev: true + + /@volar/vue-code-gen/0.38.9: + resolution: {integrity: sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==} + dependencies: + '@volar/code-gen': 0.38.9 + '@volar/source-map': 0.38.9 + '@vue/compiler-core': 3.2.37 + '@vue/compiler-dom': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@volar/vue-typescript/0.38.9: + resolution: {integrity: sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==} + dependencies: + '@volar/code-gen': 0.38.9 + '@volar/source-map': 0.38.9 + '@volar/vue-code-gen': 0.38.9 + '@vue/compiler-sfc': 3.2.37 + '@vue/reactivity': 3.2.37 + dev: true + + /@vue/compiler-core/3.2.37: + resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} + dependencies: + '@babel/parser': 7.18.9 + '@vue/shared': 3.2.37 + 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 + + /@vue/compiler-sfc/3.2.37: + resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} + dependencies: + '@babel/parser': 7.18.9 + '@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.14 + source-map: 0.6.1 + + /@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 + + /@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.9 + '@vue/compiler-core': 3.2.37 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + magic-string: 0.25.9 + + /@vue/reactivity/3.2.37: + resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} + dependencies: + '@vue/shared': 3.2.37 + + /@vue/runtime-core/3.2.37: + resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==} + dependencies: + '@vue/reactivity': 3.2.37 + '@vue/shared': 3.2.37 + dev: false + + /@vue/runtime-dom/3.2.37: + resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==} + dependencies: + '@vue/runtime-core': 3.2.37 + '@vue/shared': 3.2.37 + csstype: 2.6.20 + dev: false + + /@vue/server-renderer/3.2.37_vue@3.2.37: + resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==} + peerDependencies: + vue: 3.2.37 + dependencies: + '@vue/compiler-ssr': 3.2.37 + '@vue/shared': 3.2.37 + vue: 3.2.37 + dev: false + + /@vue/shared/3.2.37: + resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} + + /@vueuse/core/8.9.4_vue@3.2.37: + resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + '@types/web-bluetooth': 0.0.14 + '@vueuse/metadata': 8.9.4 + '@vueuse/shared': 8.9.4_vue@3.2.37 + vue: 3.2.37 + vue-demi: 0.13.6_vue@3.2.37 + dev: false + + /@vueuse/metadata/8.9.4: + resolution: {integrity: sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==} + dev: false + + /@vueuse/shared/8.9.4_vue@3.2.37: + resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==} + peerDependencies: + '@vue/composition-api': ^1.1.0 + vue: ^2.6.0 || ^3.2.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + vue: + optional: true + dependencies: + vue: 3.2.37 + vue-demi: 0.13.6_vue@3.2.37 + dev: false + + /JSONStream/1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /acorn-jsx/5.3.2_acorn@8.8.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.0 + dev: true + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv/8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + 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 + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-ify/1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /arrify/1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + 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 + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /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 + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.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 + + /cac/6.7.12: + resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} + engines: {node: '>=8'} + dev: true + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + 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: false + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.4.0 + dev: true + + /camelcase-keys/6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /capital-case/1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case-first: 2.0.2 + dev: true + + /chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /change-case/4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.4.0 + 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 + + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /clipboard/2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + dev: false + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /cmp-socket/1.0.0: + resolution: {integrity: sha512-2TdIGicSanZbxEwENDg77ZmvJhTGvyCUqdbfzcwgXjoLIj0JoAOGgoVfvQTVITo6eiHLmbd3mtHN42cYa0MT0g==} + dev: false + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + 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/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /compare-func/2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /consola/2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + dev: true + + /console/0.7.2: + resolution: {integrity: sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==} + dev: true + + /constant-case/3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case: 2.0.2 + dev: true + + /conventional-changelog-angular/5.0.13: + resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-conventionalcommits/5.0.0: + resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + dev: true + + /conventional-commits-parser/3.2.4: + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + is-text-path: 1.0.1 + JSONStream: 1.3.5 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /cors/2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: true + + /cosmiconfig-typescript-loader/2.0.2_1611b4c5cd7b2d49a7e7b69ba7ff579e: + resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@types/node': '*' + typescript: '>=3' + dependencies: + '@types/node': 18.6.2 + cosmiconfig: 7.0.1 + ts-node: 10.9.1_1611b4c5cd7b2d49a7e7b69ba7ff579e + typescript: 4.7.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /cosmiconfig/7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-js/4.1.1: + resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} + dev: false + + /css-select/4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-tree/2.1.0: + resolution: {integrity: sha512-PcysZRzToBbrpoUrZ9qfblRIRf8zbEAkU0AIpQFtgkFK0vSbzOmBCvdSAx2Zg7Xx5wiYJKUKk0NMP7kxevie/A==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.27 + source-map-js: 1.0.2 + dev: true + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + + /csstype/2.6.20: + resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} + dev: false + + /dargs/7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /dayjs/1.11.4: + resolution: {integrity: sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==} + dev: false + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + dependencies: + ms: 2.0.0 + dev: 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 + + /decamelize-keys/1.1.0: + resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decode-uri-component/0.2.0: + resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} + engines: {node: '>=0.10'} + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: true + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: true + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + + /defu/6.0.0: + resolution: {integrity: sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw==} + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /delegate/3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + dev: false + + /destr/1.1.1: + resolution: {integrity: sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg==} + dev: true + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + 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/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domhandler/2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + dependencies: + domelementtype: 1.3.1 + dev: true + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils/1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + 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 + + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /element-plus/2.2.12_vue@3.2.37: + resolution: {integrity: sha512-g/hIHj3b+dND2R3YRvyvCJtJhQvR7lWvXqhJaoxaQmajjNWedoe4rttxG26fOSv9YCC2wN4iFDcJHs70YFNgrA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@ctrl/tinycolor': 3.4.1 + '@element-plus/icons-vue': 2.0.6_vue@3.2.37 + '@floating-ui/dom': 0.5.4 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 + '@types/lodash': 4.14.182 + '@types/lodash-es': 4.17.6 + '@vueuse/core': 8.9.4_vue@3.2.37 + async-validator: 4.2.5 + dayjs: 1.11.4 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.2.37 + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /entities/1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-module-lexer/0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + dev: true + + /esbuild-android-64/0.14.51: + resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.51: + resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.51: + resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.51: + resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.51: + resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.51: + resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.51: + resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.51: + resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.51: + resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.51: + resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.51: + resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.51: + resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.51: + resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.51: + resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.51: + resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.51: + resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.51: + resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.51: + resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.51: + resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.51: + resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.51: + resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-64: 0.14.51 + esbuild-android-arm64: 0.14.51 + esbuild-darwin-64: 0.14.51 + esbuild-darwin-arm64: 0.14.51 + esbuild-freebsd-64: 0.14.51 + esbuild-freebsd-arm64: 0.14.51 + esbuild-linux-32: 0.14.51 + esbuild-linux-64: 0.14.51 + esbuild-linux-arm: 0.14.51 + esbuild-linux-arm64: 0.14.51 + esbuild-linux-mips64le: 0.14.51 + esbuild-linux-ppc64le: 0.14.51 + esbuild-linux-riscv64: 0.14.51 + esbuild-linux-s390x: 0.14.51 + esbuild-netbsd-64: 0.14.51 + esbuild-openbsd-64: 0.14.51 + esbuild-sunos-64: 0.14.51 + esbuild-windows-32: 0.14.51 + esbuild-windows-64: 0.14.51 + esbuild-windows-arm64: 0.14.51 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /eslint-plugin-vue/9.3.0_eslint@8.21.0: + resolution: {integrity: sha512-iscKKkBZgm6fGZwFt6poRoWC0Wy2dQOlwUPW++CiPoQiw1enctV2Hj5DBzzjJZfyqs+FAXhgzL4q0Ww03AgSmQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.21.0 + eslint-utils: 3.0.0_eslint@8.21.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.10 + semver: 7.3.7 + vue-eslint-parser: 9.0.3_eslint@8.21.0 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.21.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.21.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.21.0: + resolution: {integrity: sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.0 + '@humanwhocodes/config-array': 0.10.4 + '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.21.0 + eslint-visitor-keys: 3.3.0 + espree: 9.3.3 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.17.0 + globby: 11.1.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.3.3: + resolution: {integrity: sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.0 + acorn-jsx: 5.3.2_acorn@8.8.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + 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 + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + 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 + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.6 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.6: + resolution: {integrity: sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==} + 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 + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /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 + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /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==} + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + 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: false + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /git-raw-commits/2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-dirs/0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + dependencies: + ini: 1.3.8 + dev: true + + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /good-listener/1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + dependencies: + delegate: 3.2.0 + dev: false + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /hard-rejection/2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /has-flag/1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /header-case/2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.4.0 + dev: true + + /hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hosted-git-info/4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /htmlparser2/3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /image-size/0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /immutable/4.1.0: + resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-html-entry/1.12.0: + resolution: {integrity: sha512-wloMEMwupKJ8DWvKsEzJTXhHVieEH8ylu9ebeQg7T9JUsPTo0Zwa1EkuSKgKJvOiA2MxAFkeYYvd/E2pKiFtWQ==} + dependencies: + '@babel/runtime': 7.18.9 + dev: false + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: 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-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + dependencies: + has: 1.0.3 + dev: true + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true + + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + 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/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj/1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-text-path/1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + dependencies: + text-extensions: 1.9.0 + dev: true + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /jiti/1.14.0: + resolution: {integrity: sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A==} + hasBin: true + dev: true + + /js-base64/2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + dev: true + + /js-cookie/3.0.1: + resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==} + engines: {node: '>=12'} + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + + /jsonc-parser/3.1.0: + resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: true + + /jsonparse/1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kolorist/1.5.1: + resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} + dev: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /loader-utils/1.4.0: + resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.1 + dev: true + + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + + /lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd: + resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + dependencies: + '@types/lodash-es': 4.17.6 + lodash: 4.17.21 + lodash-es: 4.17.21 + dev: false + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.4.0 + 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 + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj/1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj/4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /mdn-data/2.0.27: + resolution: {integrity: sha512-kwqO0I0jtWr25KcfLm9pia8vLZ8qoAKhWZuZMbneJq3jjBD3gl5nZs8l8Tu3ZBlBAHVQtDur9rdDGyvtfVraHQ==} + dev: true + + /memoize-one/6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + + /meow/8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.0 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + + /merge-options/1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 1.0.0 + extend-shallow: 2.0.1 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 5.1.0 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + 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 + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /min-indent/1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch/5.1.0: + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist-options/4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mlly/0.5.5: + resolution: {integrity: sha512-2R4JT/SxRDPexomw4rmHYY/gWAGmL9Kkq1OR76Ua6w+P340a1aBDTWzKo2kAlxzrG82OdXs5VB9Lmcmyit0Obg==} + dependencies: + pathe: 0.3.2 + pkg-types: 0.3.3 + dev: true + + /mrmime/1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.4.0 + dev: true + + /node-fetch-native/0.1.4: + resolution: {integrity: sha512-10EKpOCQPXwZVFh3U1ptOMWBgKTbsN7Vvo6WVKt5pw4hp8zbv6ZVBZPlXw+5M6Tyi1oc1iD4/sNPd71KYA16tQ==} + dev: true + + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.1 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data/3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.9.0 + semver: 7.3.7 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-wheel-es/1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + dev: false + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /nprogress/0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect/1.12.2: + resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + dev: false + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /ohmyfetch/0.4.18: + resolution: {integrity: sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ==} + dependencies: + destr: 1.1.1 + node-fetch-native: 0.1.4 + ufo: 0.8.5 + undici: 5.8.0 + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.18.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-case/3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp/6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: false + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe/0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + dev: true + + /pathe/0.3.2: + resolution: {integrity: sha512-qhnmX0TOqlCvdWWTkoM83wh5J8fZ2yhbDEc9MlsnAEtEc+JCwxUKEwmd6pkY9hRe6JR1Uecbc14VcAKX2yFSTA==} + dev: true + + /perfect-debounce/0.1.3: + resolution: {integrity: sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==} + 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 + + /pkg-types/0.3.3: + resolution: {integrity: sha512-6AJcCMnjUQPQv/Wk960w0TOmjhdjbeaQJoSKWRQv9N3rgkessCu6J0Ydsog/nw1MbpnxHuPzYbfOn2KmlZO1FA==} + dependencies: + jsonc-parser: 3.1.0 + mlly: 0.5.5 + pathe: 0.3.2 + dev: true + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-prefix-selector/1.16.0_postcss@5.2.18: + resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} + peerDependencies: + postcss: '>4 <9' + dependencies: + postcss: 5.2.18 + dev: true + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss/5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + dev: true + + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /posthtml-parser/0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + dev: true + + /posthtml-rename-id/1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /posthtml-render/1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + dev: true + + /posthtml-svg-mode/1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + + /posthtml/0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /q/1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: true + + /qiankun/2.7.4: + resolution: {integrity: sha512-aihz6ue94CdalEBHBpJGD2UjY30Er0FEy8KxQuxCuEffOFvCXrvBsUm5UkfW32pu4AmAD/yB+lxad0Vzt6l5KQ==} + dependencies: + '@babel/runtime': 7.18.9 + import-html-entry: 1.12.0 + lodash: 4.17.21 + single-spa: 5.9.4 + tslib: 1.14.1 + dev: false + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /query-string/4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru/4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /read-pkg-up/7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg/5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /redent/3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: false + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-global/1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + dependencies: + global-dirs: 0.1.1 + dev: true + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.9.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup/2.77.2: + resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==} + 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 + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /sass/1.54.0: + resolution: {integrity: sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.1.0 + source-map-js: 1.0.2 + dev: true + + /scule/0.3.2: + resolution: {integrity: sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==} + dev: true + + /select/1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + dev: false + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: 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 + + /sentence-case/3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.0 + upper-case-first: 2.0.2 + dev: true + + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.2 + object-inspect: 1.12.2 + dev: false + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /single-spa/5.9.4: + resolution: {integrity: sha512-QkEoh0AzGuU82qnbUUk0ydF78QbU5wMKqKKJn7uUQfBiOYlRQEfIOpLM4m23Sab+kTOLI1kbYhYeiQ7fX5KVVw==} + dev: false + + /sirv/2.0.2: + resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.1 + totalist: 3.0.0 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /snake-case/3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.0 + dev: true + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /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==} + + /spdx-correct/3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-exceptions/2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-license-ids/3.0.11: + resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} + dev: true + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /split2/3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.0 + dev: true + + /stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /strict-uri-encode/1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-indent/3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal/0.4.0: + resolution: {integrity: sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA==} + dependencies: + acorn: 8.8.0 + dev: true + + /supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + + /supports-color/3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svg-baker/1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + dependencies: + bluebird: 3.7.2 + clone: 2.1.2 + he: 1.2.0 + image-size: 0.5.5 + loader-utils: 1.4.0 + merge-options: 1.0.1 + micromatch: 3.1.0 + postcss: 5.2.18 + postcss-prefix-selector: 1.16.0_postcss@5.2.18 + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.6 + dev: true + + /svgo/2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + + /text-extensions/1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /through2/4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.0 + dev: true + + /tiny-emitter/2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + dev: false + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + 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 + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /totalist/3.0.0: + resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} + engines: {node: '>=6'} + dev: true + + /traverse/0.6.6: + resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==} + dev: true + + /trim-newlines/3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + + /ts-node/10.9.1_1611b4c5cd7b2d49a7e7b69ba7ff579e: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.6.2 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.7.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib/2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /tsutils/3.21.0_typescript@4.7.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.7.4 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest/0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest/0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + 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 + + /unconfig/0.3.5: + resolution: {integrity: sha512-YMnPPUSfW0pT4Zzy4inM8tRHJZmhH+KcuFW/3qxkLKPhswEw18gQYe1jt57jY6ctFB0fnpiCpQ2Jtkbg4y/IPA==} + dependencies: + '@antfu/utils': 0.5.2 + defu: 6.0.0 + jiti: 1.14.0 + dev: true + + /undici/5.8.0: + resolution: {integrity: sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==} + engines: {node: '>=12.18'} + dev: true + + /unimport/0.6.4_vite@3.0.3: + resolution: {integrity: sha512-1cbSeTsC2EwzWeWAyQleajM354y+EYsymxE9p1wDbHKVTEe9XL6+e7vlEv2pj1Zk8YYFf+CBf9QG8My7aDKhag==} + dependencies: + '@rollup/pluginutils': 4.2.1 + escape-string-regexp: 5.0.0 + fast-glob: 3.2.11 + local-pkg: 0.4.2 + magic-string: 0.26.2 + mlly: 0.5.5 + pathe: 0.3.2 + scule: 0.3.2 + strip-literal: 0.4.0 + unplugin: 0.8.0_vite@3.0.3 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + dev: true + + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unocss/0.45.1_vite@3.0.3: + resolution: {integrity: sha512-PRPU8WIqEYN+cS7YbptGOJqeAcdDBllRnknUNiK6vzaK9YqomR+Gzk81zxcSW3A159QERmy3TdvpaxmDwO4ZCA==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.45.1 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + dependencies: + '@unocss/cli': 0.45.1 + '@unocss/core': 0.45.1 + '@unocss/preset-attributify': 0.45.1 + '@unocss/preset-icons': 0.45.1 + '@unocss/preset-mini': 0.45.1 + '@unocss/preset-tagify': 0.45.1 + '@unocss/preset-typography': 0.45.1 + '@unocss/preset-uno': 0.45.1 + '@unocss/preset-web-fonts': 0.45.1 + '@unocss/preset-wind': 0.45.1 + '@unocss/reset': 0.45.1 + '@unocss/transformer-attributify-jsx': 0.45.1 + '@unocss/transformer-compile-class': 0.45.1 + '@unocss/transformer-directives': 0.45.1 + '@unocss/transformer-variant-group': 0.45.1 + '@unocss/vite': 0.45.1_vite@3.0.3 + transitivePeerDependencies: + - supports-color + - vite + dev: true + + /unplugin-auto-import/0.10.2_vite@3.0.3: + resolution: {integrity: sha512-TtGWSN1GjXlfEuB7ALmQfW8EYIG99fASsChkMBvTqyWgfBebN0/9njoMZJ73c234vqduHJGgtRyveYNSYt8X0g==} + 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.4_vite@3.0.3 + unplugin: 0.8.0_vite@3.0.3 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + dev: true + + /unplugin-icons/0.14.7_vite@3.0.3: + resolution: {integrity: sha512-TrNnEdpaXMdiG5BsCgvU6cv/gSLYvIk1f8wGCGZmOo4wmi3nqYBuqIEuiXhmmyXdDZuRRpCaOzCnCYYZ5H7U8g==} + peerDependencies: + '@svgr/core': '>=5.5.0' + '@vue/compiler-sfc': ^3.0.2 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + dependencies: + '@antfu/install-pkg': 0.1.0 + '@antfu/utils': 0.5.2 + '@iconify/utils': 1.0.33 + debug: 4.3.4 + kolorist: 1.5.1 + local-pkg: 0.4.2 + unplugin: 0.7.2_vite@3.0.3 + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - vite + - webpack + dev: true + + /unplugin-vue-components/0.21.2_vite@3.0.3+vue@3.2.37: + resolution: {integrity: sha512-HBU+EuesDj/HRs7EtYH7gBACljVhqLylltrCLModRmCToIIrrNvMh54aylUt4AD4qiwylgOx4Vgb9sBlrIcRDw==} + 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.11 + local-pkg: 0.4.2 + magic-string: 0.26.2 + minimatch: 5.1.0 + resolve: 1.22.1 + unplugin: 0.7.2_vite@3.0.3 + vue: 3.2.37 + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - vite + - webpack + dev: true + + /unplugin/0.7.2_vite@3.0.3: + resolution: {integrity: sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ==} + peerDependencies: + esbuild: '>=0.13' + rollup: ^2.50.0 + vite: ^2.3.0 || ^3.0.0-0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + acorn: 8.8.0 + chokidar: 3.5.3 + vite: 3.0.3_sass@1.54.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.4 + dev: true + + /unplugin/0.8.0_vite@3.0.3: + resolution: {integrity: sha512-OzOkJ9XOPlD1Cph6qy/p4i/KSUbs76GToXjH/STHpfo6D7y+EqpfAL6G6HaoOw5QLkt9+KWwcxYUmPFkDf1upQ==} + peerDependencies: + esbuild: '>=0.13' + rollup: ^2.50.0 + vite: ^2.3.0 || ^3.0.0-0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + acorn: 8.8.0 + chokidar: 3.5.3 + vite: 3.0.3_sass@1.54.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.4 + dev: true + + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /upper-case-first/2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.4.0 + dev: true + + /upper-case/2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.4.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /vite-plugin-eslint/1.7.0_eslint@8.21.0+vite@3.0.3: + resolution: {integrity: sha512-Kz2HwBeAArmsE0QmWSm+e7CaEQrfMkEZpFw4hngoy6JmERjw7WUH8HLbG1OkreOKX4iIUReOss9N1Mkw4wEk8g==} + peerDependencies: + eslint: '>=7' + vite: '>=2' + dependencies: + '@rollup/pluginutils': 4.2.1 + '@types/eslint': 8.4.5 + eslint: 8.21.0 + rollup: 2.77.2 + vite: 3.0.3_sass@1.54.0 + dev: true + + /vite-plugin-style-import/2.0.0_vite@3.0.3: + resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + change-case: 4.1.2 + console: 0.7.2 + es-module-lexer: 0.9.3 + fs-extra: 10.1.0 + magic-string: 0.25.9 + pathe: 0.2.0 + vite: 3.0.3_sass@1.54.0 + dev: true + + /vite-plugin-svg-icons/2.0.1_vite@3.0.3: + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + '@types/svgo': 2.6.3 + cors: 2.8.5 + debug: 4.3.4 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 3.0.3_sass@1.54.0 + transitivePeerDependencies: + - supports-color + dev: true + + /vite/3.0.3_sass@1.54.0: + resolution: {integrity: sha512-sDIpIcl3mv1NUaSzZwiXGEy1ZoWwwC2vkxUHY6yiDacR6zf//ZFuBJrozO62gedpE43pmxnLATNR5IYUdAEkMQ==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.14.51 + postcss: 8.4.14 + resolve: 1.22.1 + rollup: 2.77.2 + sass: 1.54.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vue-demi/0.13.6_vue@3.2.37: + resolution: {integrity: sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ==} + 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.37 + dev: false + + /vue-eslint-parser/9.0.3_eslint@8.21.0: + resolution: {integrity: sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.21.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.3.0 + espree: 9.3.3 + esquery: 1.4.0 + lodash: 4.17.21 + semver: 7.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /vue-router/4.1.3_vue@3.2.37: + resolution: {integrity: sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.2.1 + vue: 3.2.37 + dev: false + + /vue-tsc/0.38.9_typescript@4.7.4: + resolution: {integrity: sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/vue-typescript': 0.38.9 + typescript: 4.7.4 + dev: true + + /vue/3.2.37: + resolution: {integrity: sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==} + dependencies: + '@vue/compiler-dom': 3.2.37 + '@vue/compiler-sfc': 3.2.37 + '@vue/runtime-dom': 3.2.37 + '@vue/server-renderer': 3.2.37_vue@3.2.37 + '@vue/shared': 3.2.37 + dev: false + + /vuex/4.0.2_vue@3.2.37: + resolution: {integrity: sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==} + peerDependencies: + vue: ^3.0.2 + dependencies: + '@vue/devtools-api': 6.2.1 + vue: 3.2.37 + 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.4: + resolution: {integrity: sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==} + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /xml-name-validator/4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.0.1: + resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} + engines: {node: '>=12'} + dev: true + + /yargs/17.5.1: + resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.0.1 + dev: true + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/public/cof-web/app.json b/public/cof-web/app.json new file mode 100644 index 0000000..d5f8118 --- /dev/null +++ b/public/cof-web/app.json @@ -0,0 +1,42 @@ +{ + "homePath": "/scr-web/dashboard", + "apps": [{ + "name": "cmp-web", + "hasPlugin": true + }, + { + "name": "cos-web" + }, + { + "name": "cms-web" + }, + { + "name": "sms-web" + }, + { + "name": "cop-web" + }, + { + "name": "ams-web" + }, + { + "name": "itsm-web" + }, + { + "name": "aos-web" + }, + { + "name": "oms-web" + }, + { + "name": "log-web" + }, + { + "name": "scr-web" + }, + { + "name": "ros-plugin", + "activeRule": "/cmp-web/ros-plugin" + } + ] +} diff --git a/public/cof-web/config.js b/public/cof-web/config.js new file mode 100644 index 0000000..368b23d --- /dev/null +++ b/public/cof-web/config.js @@ -0,0 +1,3 @@ +window.appConfigs = { + cscPort: 60008 +} diff --git a/public/img/jump/card_bg.png b/public/img/jump/card_bg.png new file mode 100644 index 0000000..b3e6220 Binary files /dev/null and b/public/img/jump/card_bg.png differ diff --git a/public/static/img/jump/card_bg.png b/public/static/img/jump/card_bg.png new file mode 100644 index 0000000..b3e6220 Binary files /dev/null and b/public/static/img/jump/card_bg.png differ diff --git a/public/static/img/jump/card_bg_select.png b/public/static/img/jump/card_bg_select.png new file mode 100644 index 0000000..f18d9da Binary files /dev/null and b/public/static/img/jump/card_bg_select.png differ diff --git a/public/static/img/jump/cmp.png b/public/static/img/jump/cmp.png new file mode 100644 index 0000000..003eb61 Binary files /dev/null and b/public/static/img/jump/cmp.png differ diff --git a/public/static/img/jump/paas.png b/public/static/img/jump/paas.png new file mode 100644 index 0000000..394d85f Binary files /dev/null and b/public/static/img/jump/paas.png differ diff --git a/public/static/img/jump/winhong.png b/public/static/img/jump/winhong.png new file mode 100644 index 0000000..ba590d8 Binary files /dev/null and b/public/static/img/jump/winhong.png differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..1a811b6 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/assets/jump_bg.png b/src/assets/jump_bg.png new file mode 100644 index 0000000..b439799 Binary files /dev/null and b/src/assets/jump_bg.png differ diff --git a/src/assets/vue.svg b/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts new file mode 100644 index 0000000..f61585c --- /dev/null +++ b/src/auto-imports.d.ts @@ -0,0 +1,56 @@ +// Generated by 'unplugin-auto-import' +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const ElNotification: typeof import('element-plus/es')['ElNotification'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const effectScope: typeof import('vue')['effectScope'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useSlots: typeof import('vue')['useSlots'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} diff --git a/src/components.d.ts b/src/components.d.ts new file mode 100644 index 0000000..735528f --- /dev/null +++ b/src/components.d.ts @@ -0,0 +1,54 @@ +// 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 { + ElAside: typeof import('element-plus/es')['ElAside'] + ElBadge: typeof import('element-plus/es')['ElBadge'] + ElButton: typeof import('element-plus/es')['ElButton'] + ElCard: typeof import('element-plus/es')['ElCard'] + ElCol: typeof import('element-plus/es')['ElCol'] + ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] + ElContainer: typeof import('element-plus/es')['ElContainer'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElDivider: typeof import('element-plus/es')['ElDivider'] + ElDropdown: typeof import('element-plus/es')['ElDropdown'] + ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] + ElForm: typeof import('element-plus/es')['ElForm'] + ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElHeader: typeof import('element-plus/es')['ElHeader'] + ElIcon: typeof import('element-plus/es')['ElIcon'] + ElInput: typeof import('element-plus/es')['ElInput'] + ElMain: typeof import('element-plus/es')['ElMain'] + ElMenu: typeof import('element-plus/es')['ElMenu'] + ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] + ElRow: typeof import('element-plus/es')['ElRow'] + ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] + ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] + Empty: typeof import('./components/empty/Empty.vue')['default'] + IconEpArrowDown: typeof import('~icons/ep/arrow-down')['default'] + IconEpArrowRight: typeof import('~icons/ep/arrow-right')['default'] + IconEpArrowRightBold: typeof import('~icons/ep/arrow-right-bold')['default'] + IconEpBell: typeof import('~icons/ep/bell')['default'] + IconEpClose: typeof import('~icons/ep/close')['default'] + IconEpHomeFilled: typeof import('~icons/ep/home-filled')['default'] + IconEpKey: typeof import('~icons/ep/key')['default'] + IconEpLock: typeof import('~icons/ep/lock')['default'] + IconEpMonitor: typeof import('~icons/ep/monitor')['default'] + IconEpPosition: typeof import('~icons/ep/position')['default'] + IconEpService: typeof import('~icons/ep/service')['default'] + IconEpSwitchButton: typeof import('~icons/ep/switch-button')['default'] + IconEpUploadFilled: typeof import('~icons/ep/upload-filled')['default'] + IconEpUser: typeof import('~icons/ep/user')['default'] + ImageCropper: typeof import('./components/image-cropper/index.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + SvgIcon: typeof import('./components/svg-icon/SvgIcon.vue')['default'] + } +} diff --git a/src/components/empty/Empty.vue b/src/components/empty/Empty.vue new file mode 100644 index 0000000..44ed9b9 --- /dev/null +++ b/src/components/empty/Empty.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/components/empty/index.ts b/src/components/empty/index.ts new file mode 100644 index 0000000..bd524f8 --- /dev/null +++ b/src/components/empty/index.ts @@ -0,0 +1,3 @@ +import Empty from './Empty.vue' + +export default Empty diff --git a/src/components/image-cropper/index.vue b/src/components/image-cropper/index.vue new file mode 100644 index 0000000..72fc4f5 --- /dev/null +++ b/src/components/image-cropper/index.vue @@ -0,0 +1,1441 @@ + + + + + diff --git a/src/components/image-cropper/utils/data2blob.js b/src/components/image-cropper/utils/data2blob.js new file mode 100644 index 0000000..84e382c --- /dev/null +++ b/src/components/image-cropper/utils/data2blob.js @@ -0,0 +1,19 @@ +/** + * database64文件格式转换为2进制 + * + * @param {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了 + * @param {[String]} mime [description] + * @return {[blob]} [description] + */ +export default function (data, mime) { + data = data.split(',')[1] + data = window.atob(data) + var ia = new Uint8Array(data.length) + for (var i = 0; i < data.length; i++) { + ia[i] = data.charCodeAt(i) + } + // canvas.toDataURL 返回的默认格式就是 image/png + return new Blob([ia], { + type: mime, + }) +} diff --git a/src/components/image-cropper/utils/effectRipple.js b/src/components/image-cropper/utils/effectRipple.js new file mode 100644 index 0000000..6edc26c --- /dev/null +++ b/src/components/image-cropper/utils/effectRipple.js @@ -0,0 +1,42 @@ +/** + * 点击波纹效果 + * + * @param {[event]} e [description] + * @param {[Object]} argOpts [description] + * @return {[bollean]} [description] + */ +export default function (e, argOpts) { + const opts = Object.assign( + { + ele: e.target, // 波纹作用元素 + type: 'hit', // hit点击位置扩散center中心点扩展 + bgc: 'rgba(0, 0, 0, 0.15)', // 波纹颜色 + }, + argOpts + ) + var target = opts.ele + if (target) { + const rect = target.getBoundingClientRect() + var ripple = target.querySelector('.e-ripple') + if (!ripple) { + ripple = document.createElement('span') + ripple.className = 'e-ripple' + ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px' + target.appendChild(ripple) + } else { + ripple.className = 'e-ripple' + } + switch (opts.type) { + case 'center': + ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + 'px' + ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + 'px' + break + default: + ripple.style.top = e.pageY - rect.top - ripple.offsetHeight / 2 - document.body.scrollTop + 'px' + ripple.style.left = e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft + 'px' + } + ripple.style.backgroundColor = opts.bgc + ripple.className = 'e-ripple z-active' + return false + } +} diff --git a/src/components/image-cropper/utils/language.js b/src/components/image-cropper/utils/language.js new file mode 100644 index 0000000..65f5bf7 --- /dev/null +++ b/src/components/image-cropper/utils/language.js @@ -0,0 +1,365 @@ +export default { + zh: { + hint: '点击,或拖动图片至此处', + loading: '正在上传……', + noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!', + success: '上传成功', + fail: '图片上传失败', + preview: '预览', + btn: { + off: '取消', + close: '关闭', + back: '上一步', + save: '保存', + }, + error: { + onlyImg: '仅限图片格式', + outOfSize: '单文件大小不能超过 ', + lowestPx: '图片最低像素为(宽*高):', + }, + }, + 'zh-tw': { + hint: '點擊,或拖動圖片至此處', + loading: '正在上傳……', + noSupported: '瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!', + success: '上傳成功', + fail: '圖片上傳失敗', + preview: '頭像預覽', + btn: { + off: '取消', + close: '關閉', + back: '上一步', + save: '保存', + }, + error: { + onlyImg: '僅限圖片格式', + outOfSize: '單文件大小不能超過 ', + lowestPx: '圖片最低像素為(寬*高):', + }, + }, + en: { + hint: 'Click or drag the file here to upload', + loading: 'Uploading…', + noSupported: 'Browser is not supported, please use IE10+ or other browsers', + success: 'Upload success', + fail: 'Upload failed', + preview: 'Preview', + btn: { + off: 'Cancel', + close: 'Close', + back: 'Back', + save: 'Save', + }, + error: { + onlyImg: 'Image only', + outOfSize: 'Image exceeds size limit: ', + lowestPx: "Image's size is too low. Expected at least: ", + }, + }, + ro: { + hint: 'Atinge sau trage fișierul aici', + loading: 'Se încarcă', + noSupported: 'Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.', + success: 'S-a încărcat cu succes', + fail: 'A apărut o problemă la încărcare', + preview: 'Previzualizează', + + btn: { + off: 'Anulează', + close: 'Închide', + back: 'Înapoi', + save: 'Salvează', + }, + + error: { + onlyImg: 'Doar imagini', + outOfSize: 'Imaginea depășește limita de: ', + loewstPx: 'Imaginea este prea mică; Minim: ', + }, + }, + ru: { + hint: 'Нажмите, или перетащите файл в это окно', + loading: 'Загружаю……', + noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры', + success: 'Загрузка выполнена успешно', + fail: 'Ошибка загрузки', + preview: 'Предпросмотр', + btn: { + off: 'Отменить', + close: 'Закрыть', + back: 'Назад', + save: 'Сохранить', + }, + error: { + onlyImg: 'Только изображения', + outOfSize: 'Изображение превышает предельный размер: ', + lowestPx: 'Минимальный размер изображения: ', + }, + }, + 'pt-br': { + hint: 'Clique ou arraste o arquivo aqui para carregar', + loading: 'Carregando…', + noSupported: 'Browser não suportado, use o IE10+ ou outro browser', + success: 'Sucesso ao carregar imagem', + fail: 'Falha ao carregar imagem', + preview: 'Pré-visualizar', + btn: { + off: 'Cancelar', + close: 'Fechar', + back: 'Voltar', + save: 'Salvar', + }, + error: { + onlyImg: 'Apenas imagens', + outOfSize: 'A imagem excede o limite de tamanho: ', + lowestPx: 'O tamanho da imagem é muito pequeno. Tamanho mínimo: ', + }, + }, + fr: { + hint: 'Cliquez ou glissez le fichier ici.', + loading: 'Téléchargement…', + noSupported: "Votre navigateur n'est pas supporté. Utilisez IE10 + ou un autre navigateur s'il vous plaît.", + success: 'Téléchargement réussit', + fail: 'Téléchargement echoué', + preview: 'Aperçu', + btn: { + off: 'Annuler', + close: 'Fermer', + back: 'Retour', + save: 'Enregistrer', + }, + error: { + onlyImg: 'Image uniquement', + outOfSize: "L'image sélectionnée dépasse la taille maximum: ", + lowestPx: "L'image sélectionnée est trop petite. Dimensions attendues: ", + }, + }, + nl: { + hint: 'Klik hier of sleep een afbeelding in dit vlak', + loading: 'Uploaden…', + noSupported: 'Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.', + success: 'Upload succesvol', + fail: 'Upload mislukt', + preview: 'Voorbeeld', + btn: { + off: 'Annuleren', + close: 'Sluiten', + back: 'Terug', + save: 'Opslaan', + }, + error: { + onlyImg: 'Alleen afbeeldingen', + outOfSize: 'De afbeelding is groter dan: ', + lowestPx: 'De afbeelding is te klein! Minimale afmetingen: ', + }, + }, + tr: { + hint: 'Tıkla veya yüklemek istediğini buraya sürükle', + loading: 'Yükleniyor…', + noSupported: 'Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın', + success: 'Yükleme başarılı', + fail: 'Yüklemede hata oluştu', + preview: 'Önizle', + btn: { + off: 'İptal', + close: 'Kapat', + back: 'Geri', + save: 'Kaydet', + }, + error: { + onlyImg: 'Sadece resim', + outOfSize: 'Resim yükleme limitini aşıyor: ', + lowestPx: 'Resmin boyutu çok küçük. En az olması gereken: ', + }, + }, + 'es-MX': { + hint: 'Selecciona o arrastra una imagen', + loading: 'Subiendo...', + noSupported: 'Tu navegador no es soportado, por favor usa IE10+ u otros navegadores más recientes', + success: 'Subido exitosamente', + fail: 'Sucedió un error', + preview: 'Vista previa', + btn: { + off: 'Cancelar', + close: 'Cerrar', + back: 'Atrás', + save: 'Guardar', + }, + error: { + onlyImg: 'Únicamente imágenes', + outOfSize: 'La imagen excede el tamaño maximo:', + lowestPx: 'La imagen es demasiado pequeña. Se espera por lo menos:', + }, + }, + de: { + hint: 'Klick hier oder zieh eine Datei hier rein zum Hochladen', + loading: 'Hochladen…', + noSupported: 'Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser', + success: 'Upload erfolgreich', + fail: 'Upload fehlgeschlagen', + preview: 'Vorschau', + btn: { + off: 'Abbrechen', + close: 'Schließen', + back: 'Zurück', + save: 'Speichern', + }, + error: { + onlyImg: 'Nur Bilder', + outOfSize: 'Das Bild ist zu groß: ', + lowestPx: 'Das Bild ist zu klein. Mindestens: ', + }, + }, + ja: { + hint: 'クリック・ドラッグしてファイルをアップロード', + loading: 'アップロード中...', + noSupported: 'このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。', + success: 'アップロード成功', + fail: 'アップロード失敗', + preview: 'プレビュー', + btn: { + off: 'キャンセル', + close: '閉じる', + back: '戻る', + save: '保存', + }, + error: { + onlyImg: '画像のみ', + outOfSize: '画像サイズが上限を超えています。上限: ', + lowestPx: '画像が小さすぎます。最小サイズ: ', + }, + }, + ua: { + hint: 'Натисніть, або перетягніть файл в це вікно', + loading: 'Завантажую……', + noSupported: 'Ваш браузер не підтримується, будь ласка скористайтесь IE10 + або іншими браузерами', + success: 'Завантаження виконано успішно', + fail: 'Помилка завантаження', + preview: 'Попередній перегляд', + btn: { + off: 'Відмінити', + close: 'Закрити', + back: 'Назад', + save: 'Зберегти', + }, + error: { + onlyImg: 'Тільки зображення', + outOfSize: 'Зображення перевищує граничний розмір: ', + lowestPx: 'Мінімальний розмір зображення: ', + }, + }, + it: { + hint: 'Clicca o trascina qui il file per caricarlo', + loading: 'Caricamento del file…', + noSupported: 'Browser non supportato, per favore usa IE10+ o un altro browser', + success: 'Caricamento completato', + fail: 'Caricamento fallito', + preview: 'Anteprima', + btn: { + off: 'Annulla', + close: 'Chiudi', + back: 'Indietro', + save: 'Salva', + }, + error: { + onlyImg: 'Sono accettate solo immagini', + outOfSize: "L'immagine eccede i limiti di dimensione: ", + lowestPx: "L'immagine è troppo piccola. Il requisito minimo è: ", + }, + }, + ar: { + hint: 'اضغط أو اسحب الملف هنا للتحميل', + loading: 'جاري التحميل...', + noSupported: 'المتصفح غير مدعوم ، يرجى استخدام IE10 + أو متصفح أخر', + success: 'تم التحميل بنجاح', + fail: 'فشل التحميل', + preview: 'معاينه', + btn: { + off: 'إلغاء', + close: 'إغلاق', + back: 'رجوع', + save: 'حفظ', + }, + error: { + onlyImg: 'صور فقط', + outOfSize: 'تتجاوز الصوره الحجم المحدد: ', + lowestPx: 'حجم الصورة صغير جدا. من المتوقع على الأقل: ', + }, + }, + ug: { + hint: 'مەزكۇر دائىرىنى چىكىپ رەسىم تاللاڭ ياكى رەسىمنى سۆرەپ ئەكىرىڭ', + loading: 'يوللىنىۋاتىدۇ...', + noSupported: 'تور كۆرگۈچ بۇ ئىقتىدارنى قوللىمايدۇ ، يۇقىرى نەشىردىكى تور كۆرگۈچنى ئىشلىتىڭ', + success: 'غەلبىلىك بولدى', + fail: 'مەغلۇب بولدى', + preview: 'ئۈنۈم رەسىم', + btn: { + off: 'بولدى قىلىش', + close: 'تاقاش', + back: 'ئالدىنقى قەدەم', + save: 'ساقلاش', + }, + error: { + onlyImg: 'پەقەت رەسىم فورماتىنىلا قوللايدۇ', + outOfSize: 'رەسىم چوڭ - كىچىكلىكى چەكتىن ئىشىپ كەتتى', + lowestPx: 'رەسىمنىڭ ئەڭ كىچىك ئۆلچىمى :', + }, + }, + th: { + hint: 'คลิ๊กหรือลากรูปมาที่นี่', + loading: 'กำลังอัพโหลด…', + noSupported: 'เบราเซอร์ไม่รองรับ, กรุณาใช้ IE เวอร์ชั่น 10 ขึ้นไป หรือใช้เบราเซอร์ตัวอื่น', + success: 'อัพโหลดสำเร็จ', + fail: 'อัพโหลดล้มเหลว', + preview: 'ตัวอย่าง', + btn: { + off: 'ยกเลิก', + close: 'ปิด', + back: 'กลับ', + save: 'บันทึก', + }, + error: { + onlyImg: 'ไฟล์ภาพเท่านั้น', + outOfSize: 'ไฟล์ใหญ่เกินกำหนด: ', + lowestPx: 'ไฟล์เล็กเกินไป. อย่างน้อยต้องมีขนาด: ', + }, + }, + mm: { + hint: 'ဖိုင်ကို ဤနေရာတွင် နှိပ်၍ (သို့) ဆွဲထည့်၍ တင်ပါ', + loading: 'တင်နေသည်…', + noSupported: 'ဤဘရောက်ဇာကို အထောက်အပံ့ မပေးပါ၊ ကျေးဇူးပြု၍ IE10+ သို့မဟုတ် အခြား ဘရောက်ဇာ ကို အသုံးပြုပါ', + success: 'ဖိုင်တင်နေမှု မပြီးမြောက်ပါ', + fail: 'ဖိုင်တင်နေမှု မအောင်မြင်ပါ', + preview: 'အစမ်းကြည့်', + btn: { + off: 'မလုပ်တော့ပါ', + close: 'ပိတ်မည်', + back: 'နောက်သို့', + save: 'သိမ်းမည်', + }, + error: { + onlyImg: 'ဓာတ်ပုံ သီးသန့်သာ', + outOfSize: 'ဓာတ်ပုံဆိုဒ် ကြီးလွန်းသည် ။ အများဆုံး ဆိုဒ် : ', + lowestPx: 'ဓာတ်ပုံဆိုဒ် သေးလွန်းသည်။ အနည်းဆုံး ဆိုဒ် : ', + }, + }, + se: { + hint: 'Klicka eller dra en fil hit för att ladda upp den', + loading: 'Laddar upp…', + noSupported: 'Din webbläsare stöds inte, vänligen använd IE10+ eller andra webbläsare', + success: 'Uppladdning lyckades', + fail: 'Uppladdning misslyckades', + preview: 'Förhandsgranska', + btn: { + off: 'Avbryt', + close: 'Stäng', + back: 'Tillbaka', + save: 'Spara', + }, + error: { + onlyImg: 'Endast bilder', + outOfSize: 'Bilden är större än max-gränsen: ', + lowestPx: 'Bilden är för liten. Minimum är: ', + }, + }, +} diff --git a/src/components/image-cropper/utils/mimes.js b/src/components/image-cropper/utils/mimes.js new file mode 100644 index 0000000..c44770e --- /dev/null +++ b/src/components/image-cropper/utils/mimes.js @@ -0,0 +1,7 @@ +export default { + jpg: 'image/jpeg', + png: 'image/png', + gif: 'image/gif', + svg: 'image/svg+xml', + psd: 'image/photoshop', +} diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..6a3da47 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,12 @@ +import Empty from './empty/Empty.vue' +import SvgIcon from './svg-icon/SvgIcon.vue' + +export const components: any = { + Empty, + SvgIcon +} +export default function registerComponent(app: any) { + Object.keys(components).forEach((key) => { + app.component(key, components[key]) + }) +} diff --git a/src/components/svg-icon/SvgIcon.vue b/src/components/svg-icon/SvgIcon.vue new file mode 100644 index 0000000..a253df2 --- /dev/null +++ b/src/components/svg-icon/SvgIcon.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/components/svg-icon/index.ts b/src/components/svg-icon/index.ts new file mode 100644 index 0000000..adbf9c1 --- /dev/null +++ b/src/components/svg-icon/index.ts @@ -0,0 +1,3 @@ +import SvgIcon from './SvgIcon.vue' + +export default SvgIcon diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..d6aa3f9 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,25 @@ +/** + * 启用缓存加载速度会变快,但是数据安全性和实时性降低 + */ +// 是否启用权限本地缓存 +export const enablePermissionStorage = false +// 本地缓存的菜单key值 +export const menuKey = 'cmcMenuData' +// 是否启用用户本地缓存 +export const enableUserStorage = false +// 本地缓存的用户key值 +export const userKey = 'cmcUserData' +// 本地存储的cookie kye值 +export const tokenKey = 'CMC_TOKEN' +// 最大缓存组件实例数 +export const cacheViewMax = 15 +export const formSetting = { + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + } +} diff --git a/src/core/actions.ts b/src/core/actions.ts new file mode 100644 index 0000000..b23b0f3 --- /dev/null +++ b/src/core/actions.ts @@ -0,0 +1,19 @@ +import { initGlobalState } from 'qiankun' +import type { MicroAppStateActions } from 'qiankun' +import store from '@/store' + +const initialState = { + name: 'main-web', + onmessage: (data: any) => console.log(data), + userData: null, + permissions: null +} +const actions: MicroAppStateActions = initGlobalState(initialState) + +actions.onGlobalStateChange((state) => { + // state: 变更后的状态; prev 变更前的状态 + // console.log('from:', state.name, 'current:', state, 'pre:', prev) + store.commit('SET_ONMESSAGE', state.onmessage) +}) + +export default actions diff --git a/src/core/config.ts b/src/core/config.ts new file mode 100644 index 0000000..6a795e6 --- /dev/null +++ b/src/core/config.ts @@ -0,0 +1,57 @@ +/* + * @Author: Haijun Zhang + * @Date: 2022-11-10 10:46:38 + * @LastEditTime: 2023-09-06 15:04:22 + * @LastEditors: Haijun Zhang + * @Description: + * @FilePath: \cmp-cored:\workspace\micro-web\main-web-qiankun\src\core\config.ts + */ +import mainRouter from '@/router/index' +import axios from 'axios' +import store from '../store' + +export type IDeployConfig = { + apps: IAppConfig[] + plugins: IAppConfig[] + deployAddress: string + deployPort: number | { [key: string]: number } + homePath: string +} +export type IAppConfig = { + name: string + entry?: string + hasPlugin?: boolean + activeRule?: string | string[] +} +function getAppDeployDir(name: string){ + if(name.includes('-plugin')) return 'plugins'; + return 'sub-app' +} +export async function getMicroApp() { + const { protocol, hostname, port } = location + const prefix = `${protocol}//${hostname}` + const { + data: { deployAddress = prefix, homePath = '/sms-web/resource_dashboard', deployPort = Number(port) || (protocol === 'https:' ? 443 : 80), apps } + }: { + data: IDeployConfig + } = await axios.get('/cof-web/app.json') + // const port: number = isNaN(deployPort as number) ? (deployPort as any)[hostname] : deployPort + const hasCos = Boolean(apps.find(item => item.name === 'cos-web')) + store.commit('SET_APP_CONFIGS', { hasCos, homePath }) + return apps.map((item: IAppConfig) => { + const { name, activeRule = `/${name}`, hasPlugin, entry = `${deployAddress}:${deployPort}/${getAppDeployDir(name)}/${name}/` } = item + return { + name, + entry, + container: '#subapp-viewport', + activeRule: (location: any) => { + if(hasPlugin && location.pathname.includes('-plugin')) return false + return location.pathname.startsWith(activeRule) + }, + props: { + appPath: entry, + mainRouter + } + } + }); +} diff --git a/src/core/register.ts b/src/core/register.ts new file mode 100644 index 0000000..f72f163 --- /dev/null +++ b/src/core/register.ts @@ -0,0 +1,70 @@ +/* + * @Author: Haijun Zhang + * @Date: 2022-11-10 10:46:38 + * @LastEditTime: 2022-11-17 18:37:12 + * @LastEditors: Haijun Zhang + * @Description: + * @FilePath: \main-web-qiankun\src\core\register.ts + */ +import { registerMicroApps, start, addGlobalUncaughtErrorHandler } from 'qiankun' +import NProgress from 'nprogress' +import store from '@/store' +import 'nprogress/nprogress.css' +import './actions' +import { getMicroApp } from './config' + +const startApp = async () => { + const apps = await getMicroApp() + registerMicroApps(apps, { + beforeLoad: [ + () => { + // 解决ros-plugin报错问题 + // if(window.Vue2){ + // window.Vue = window.Vue2; + // delete window.Vue2 + // }else if(app.name === 'ros-plugin'){ + // window.Vue2 = window.Vue; + // delete window.Vue; + // } + NProgress.start() + store.commit('SET_APP_LOADING', true) + // console.log('[LifeCycle] before load %c%s', 'color: green;', app.name) + return Promise.resolve() + } + ], + afterMount: [ + () => { + NProgress.done() + store.commit('SET_APP_LOADING', false) + // console.log('[LifeCycle] after mount %c%s', 'color: green;', app.name) + return Promise.resolve() + } + ], + afterUnmount: [ + () => { + // console.log('[LifeCycle] after unmount %c%s', 'color: green;', app.name) + return Promise.resolve() + } + ] + }); + // const prefetchList = apps.filter(item => item.name.includes('-web')).map(item => item.name) + start({ + prefetch: 'all', + // excludeAssetFilter(assetUrl:string){ + // 插件的静态资源不被qiankun劫持处理 + // return assetUrl.includes('/web-common-resource/') + // } + }) +} +/** + * 添加全局的未捕获异常处理器 + */ +addGlobalUncaughtErrorHandler((event: Event | string) => { + console.error(event) + const { message: msg } = event as any + // 加载失败时提示 + if (msg && msg.includes('died in status LOADING_SOURCE_CODE')) { + console.error('微应用加载失败,请检查应用是否可运行') + } +}) +export default startApp diff --git a/src/css/animate.scss b/src/css/animate.scss new file mode 100644 index 0000000..ab77336 --- /dev/null +++ b/src/css/animate.scss @@ -0,0 +1,22 @@ +@keyframes swing { + 20% { + transform: rotate3d(0, 0, 1, 15deg); + } + 40% { + transform: rotate3d(0, 0, 1, -10deg); + } + 60% { + transform: rotate3d(0, 0, 1, 5deg); + } + 80% { + transform: rotate3d(0, 0, 1, -5deg); + } + to { + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.animated { + animation-duration: 0.7s; + animation-fill-mode: both; +} \ No newline at end of file diff --git a/src/css/common-var.scss b/src/css/common-var.scss new file mode 100644 index 0000000..648db68 --- /dev/null +++ b/src/css/common-var.scss @@ -0,0 +1,5 @@ +/* Color +-------------------------- */ + +$--color-primary: '#1E54D5'; +$namesapce: 'czhj'; \ No newline at end of file diff --git a/src/css/common.scss b/src/css/common.scss new file mode 100644 index 0000000..e331517 --- /dev/null +++ b/src/css/common.scss @@ -0,0 +1,510 @@ +html, +body, +.main-app, +#master-container { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + font-size: 14px; + overflow-y: hidden !important; + font-family: Microsoft YaHei, Hiragino Sans GB; +} + +a { + text-decoration: none; +} + +.iconfont { + font-size: 13px; +} + + +/*边距共有样式*/ + +.text-center { + text-align: center; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.p-none { + padding: 0 !important; +} + +.m-xxs { + margin: 2px 4px; +} + +.m-xs { + margin: 5px; +} + +.m-sm { + margin: 10px; +} + +.m { + margin: 15px; +} + +.m-md { + margin: 20px; +} + +.m-lg { + margin: 30px; +} + +.m-xl { + margin: 50px; +} + +.m-n { + margin: 0 !important; +} + +.m-l-none { + margin-left: 0 !important; +} + +.m-l-xs { + margin-left: 5px; +} + +.m-l-sm { + margin-left: 10px !important; +} + +.m-l { + margin-left: 15px; +} + +.m-l-md { + margin-left: 20px; +} + +.m-l-lg { + margin-left: 30px; +} + +.m-l-xl { + margin-left: 40px; +} + +.m-l-xxl { + margin-left: 50px; +} + +.m-l-n-xxs { + margin-left: -1px; +} + +.m-l-n-xs { + margin-left: -5px; +} + +.m-l-n-sm { + margin-left: -10px; +} + +.m-l-n { + margin-left: -15px; +} + +.m-l-n-md { + margin-left: -20px; +} + +.m-l-n-lg { + margin-left: -30px; +} + +.m-l-n-xl { + margin-left: -40px; +} + +.m-l-n-xxl { + margin-left: -50px; +} + +.m-t-none { + margin-top: 0 !important; +} + +.m-t-xxs { + margin-top: 1px; +} + +.m-t-xs { + margin-top: 5px !important; +} + +.m-t-sm { + margin-top: 10px !important; +} + +.m-t { + margin-top: 15px; +} + +.m-t-md { + margin-top: 20px; +} + +.m-t-lg { + margin-top: 30px; +} + +.m-t-xl { + margin-top: 40px; +} + +.m-t-xxl { + margin-top: 50px; +} + +.m-t-n-xxs { + margin-top: -1px; +} + +.m-t-n-xs { + margin-top: -5px; +} + +.m-t-n-7 { + margin-top: -7px; +} + +.m-t-n-sm { + margin-top: -10px; +} + +.m-t-n { + margin-top: -15px; +} + +.m-t-n-md { + margin-top: -20px; +} + +.m-t-n-lg { + margin-top: -30px; +} + +.m-t-n-xl { + margin-top: -40px; +} + +.m-t-n-xxl { + margin-top: -50px; +} + +.m-t-n-xxxl { + margin-top: -60px; +} + +.m-r-none { + margin-right: 0 !important; +} + +.m-r-xxs { + margin-right: 1px; +} + +.m-r-xs { + margin-right: 5px; +} + +.m-r-sm { + margin-right: 10px !important; +} + +.m-r { + margin-right: 15px !important; +} + +.m-r-md { + margin-right: 20px; +} + +.m-r-lg { + margin-right: 30px; +} + +.m-r-xl { + margin-right: 40px; +} + +.m-r-xxl { + margin-right: 50px; +} + +.m-r-n-xxs { + margin-right: -1px; +} + +.m-r-n-xs { + margin-right: -5px; +} + +.m-r-n-sm { + margin-right: -10px; +} + +.m-r-n { + margin-right: -15px; +} + +.m-r-n-md { + margin-right: -20px; +} + +.m-r-n-lg { + margin-right: -30px; +} + +.m-r-n-xl { + margin-right: -40px; +} + +.m-r-n-xxl { + margin-right: -50px; +} + +.m-b-none { + margin-bottom: 0 !important; +} + +.m-b-xxs { + margin-bottom: 1px; +} + +.m-b-xs { + margin-bottom: 5px; +} + +.m-b-sm { + margin-bottom: 10px !important; +} + +.m-b { + margin-bottom: 15px !important; +} + +.m-b-md { + margin-bottom: 20px; +} + +.m-b-lg { + margin-bottom: 30px; +} + +.m-b-xl { + margin-bottom: 40px; +} + +.m-b-xxl { + margin-bottom: 50px; +} + +.m-b-n-xxs { + margin-bottom: -1px; +} + +.m-b-n-xs { + margin-bottom: -5px; +} + +.m-b-n-sm { + margin-bottom: -10px; +} + +.m-b-n { + margin-bottom: -15px; +} + +.m-b-n-md { + margin-bottom: -20px; +} + +.m-b-n-lg { + margin-bottom: -30px; +} + +.m-b-n-xl { + margin-bottom: -40px; +} + +.m-b-n-xxl { + margin-bottom: -50px; +} + + +/*颜色共有样式*/ + +.btn-info { + color: #ffffff !important; + background-color: #497edf; + border-color: #497edf; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff !important; + background-color: #2059c1; + border-color: #2059c1; +} + +.btn-success { + color: #ffffff !important; + background-color: #27c24c; + border-color: #27c24c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff !important; + background-color: #23ad44; + border-color: #20a03f; +} + +.btn-danger { + color: #ffffff !important; + background-color: #f05050; + border-color: #f05050; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff !important; + background-color: #ee3939; + border-color: #ed2a2a; +} + +.text-info { + color: #00aeef !important; +} + +.text-success { + color: #27c24c !important; +} + +.text-warning { + color: #fad733 !important; +} + +.text-danger { + color: #f05050; +} + +.text-white { + color: #FFF !important; +} + +.text-left { + text-align: left !important; +} + +.text-center { + text-align: center !important; +} + +.text-right { + text-align: right !important; +} + + +/*宽度样式*/ + +.w-xxs { + width: 60px; +} + +.w-xs { + width: 90px; +} + +.w-110 { + width: 110px; +} + +.w-ss { + width: 120px; +} + +.w-sm { + width: 150px; +} + +.w { + width: 200px; +} + +.w-md { + width: 240px; +} + +.w-lg { + width: 280px !important; +} + +.w-xl { + width: 320px; +} + +.w-xxl { + width: 360px; +} + +.w-full { + width: 100% !important; +} + +.w-auto { + width: auto; +} + +.upload-file-btn { + position: relative; + cursor: pointer; +} + +.upload-file-btn input[type=file] { + width: 100%; + height: 100%; + font-size: 300px; + opacity: 0; + filter: alpha(opacity=0); + cursor: pointer; + left: 0; + right: 0; + bottom: 0; + top: 0; + position: absolute; + padding: 0px; + margin: 0px; + overflow: hidden; +} + +.custom-dropdown-popper { + margin-top: 5px !important; + .czhj-popper__arrow { + display: none; + } +} \ No newline at end of file diff --git a/src/css/element-plus.scss b/src/css/element-plus.scss new file mode 100644 index 0000000..6f426b7 --- /dev/null +++ b/src/css/element-plus.scss @@ -0,0 +1,31 @@ +.#{$namespace}-dialog { + .#{$namespace}-dialog--middle { + width: 60%; + } + .#{$namespace}-dialog__header { + display: flex; + align-items: center; + padding: 14px 20px; + margin-right: 0; + font-weight: bold; + border-bottom: 1px solid #E0E0E0; + .#{$namespace}-dialog__title { + flex: 1; + color: #010033; + font-size: 14px; + } + .#{$namespace}-dialog__headerbtn { + position: static; + width: 16px; + height: 16px; + .#{$namespace}-dialog__close { + display: block; + } + } + } + .#{$namespace}-dialog__footer { + padding: 14px 20px; + text-align: right; + border-top: 1px solid #E0E0E0; + } +} \ No newline at end of file diff --git a/src/css/element-var.scss b/src/css/element-var.scss new file mode 100644 index 0000000..6d16565 --- /dev/null +++ b/src/css/element-var.scss @@ -0,0 +1,3 @@ +$--color-primary: #1E54D5; +@forward 'element-plus/theme-chalk/src/mixins/config.scss'with ($namespace: 'czhj'); +@forward 'element-plus/theme-chalk/src/common/var.scss'with ( $colors: ('primary': ('base': $--color-primary), ), $menu: ('base-level-padding': 12px, 'level-padding': 12px, 'item-height': 50px, 'sub-item-height': 48px)); \ No newline at end of file diff --git a/src/css/font.scss b/src/css/font.scss new file mode 100644 index 0000000..b1fc45c --- /dev/null +++ b/src/css/font.scss @@ -0,0 +1,23 @@ +$font-size: 16px; +$small-font-size: 14px; +.font-big { + font-size: $font-size; + .el-menu-item, + .el-submenu__title, + ul.header-menu li, + .el-tabs__item { + font-size: $font-size; + .iconfont { + font-size: $font-size; + } + } + .el-table--mini, + .el-table--small, + .el-table__expand-icon, + .app-levelbar, + .el-button--small, + .el-dropdown-link, + .common-detail .detail-body .basic-info .attr { + font-size: $font-size; + } +} \ No newline at end of file diff --git a/src/css/hack.scss b/src/css/hack.scss new file mode 100644 index 0000000..cbc2333 --- /dev/null +++ b/src/css/hack.scss @@ -0,0 +1,10 @@ +@media screen and (-ms-high-contrast:active), +(-ms-high-contrast:none) { + .el-table__header, + .el-table__body { + width: 100% !important; + } + /* .basic-form-item{ + height: 32.76px; + } */ +} \ No newline at end of file diff --git a/src/css/index.scss b/src/css/index.scss new file mode 100644 index 0000000..aefbeb3 --- /dev/null +++ b/src/css/index.scss @@ -0,0 +1,5 @@ +@import './common.scss'; +@import './hack.scss'; +@import './font.scss'; +@import './element-plus.scss'; +@import './animate.scss'; \ No newline at end of file diff --git a/src/hooks/useRouteItem.ts b/src/hooks/useRouteItem.ts new file mode 100644 index 0000000..62921b6 --- /dev/null +++ b/src/hooks/useRouteItem.ts @@ -0,0 +1,32 @@ +/* + * @Author: Haijun Zhang + * @Date: 2022-11-07 14:14:46 + * @LastEditTime: 2022-11-07 15:09:21 + * @LastEditors: Haijun Zhang + * @Description: + * @FilePath: \main-web\src\hooks\useRouteItem.ts + */ +import { unref } from 'vue' +import { useStore } from 'vuex' +import { useRoute } from 'vue-router' +import { pathToRegexp } from 'path-to-regexp' + +export default function () { + const store = useStore(); + const route = useRoute() + const routeMap = computed(() => store.state.permission.routeMap) + const routeItem = computed(() => { + // 找到直接返回,找不到正则匹配 + const item = unref(routeMap)[route.path] + if(item) return item; + for(const path in unref(routeMap)){ + const reg = pathToRegexp(path) + if(reg.exec(route.path)){ + return unref(routeMap)[path] + } + } + }) + return { + routeItem + } +} diff --git a/src/hooks/useSelection.js b/src/hooks/useSelection.js new file mode 100644 index 0000000..2ba9a94 --- /dev/null +++ b/src/hooks/useSelection.js @@ -0,0 +1,11 @@ +import { ref } from '@vue/composition-api' +export default function () { + const selectionIds = ref([]) + function handleSelectionChange(selections) { + selectionIds.value = selections.map((item) => item.id) + } + return { + selectionIds, + handleSelectionChange, + } +} diff --git a/src/hooks/useTable.ts b/src/hooks/useTable.ts new file mode 100644 index 0000000..a6488ab --- /dev/null +++ b/src/hooks/useTable.ts @@ -0,0 +1,86 @@ +import { ref, toRefs, reactive } from 'vue' +import { handleSearchParam } from 'cmp-element/utils' +import { ElMessage, ElMessageBox} from 'element-plus' + +interface IRemoveService { + (id: number): Promise +} +interface IConfigs { + getService: { + (params: Base.IListParams): Promise + } + removeService?: IRemoveService + listFormat?: { + (data: any): any[] + } + afterGetList?: { + (): void + } + rows?: number + params?: any + initParams?: any + deleteTipKey?: string +} + +export function useDelete(removeService: IRemoveService, getData: { (): void }, deleteTipKey = 'name') { + function handleDelete(record: any) { + ElMessageBox.confirm(`您确定要删除【${record[deleteTipKey]}】吗?`, '提示', { + confirmButtonClass: 'el-button--danger', + type: 'warning', + }) + .then(async () => { + const res = await removeService(record.id) + if (res.success) { + ElMessage.success(res.message) + getData() + } + }) + .catch((e: any) => { + console.error(e) + }) + } + return { + handleDelete, + } +} +export default function (configs: IConfigs) { + const { getService, removeService, listFormat, rows = 10, params = {}, afterGetList, initParams, deleteTipKey = 'name' } = configs + const loading = ref(false) + const state: Base.IListState = reactive({ + list: [], + total: 0, + params: { + page: 1, + rows, + ...params, + }, + }) + if (initParams) { + state.params.params = handleSearchParam(initParams) + } + async function getList() { + loading.value = true + try { + const data = await getService(state.params) + loading.value = false + if (data.success) { + if (listFormat) { + state.list = listFormat(data.data.rows) + } else { + state.list = data.data.rows + } + state.total = data.data.total + afterGetList && afterGetList() + } + } catch (e) { + loading.value = false + } + } + const { handleDelete } = useDelete(removeService as IRemoveService, getList, deleteTipKey) + return { + loading, + ...toRefs(state), + getList, + handleDelete, + } +} diff --git a/src/hooks/useWebsocket.ts b/src/hooks/useWebsocket.ts new file mode 100644 index 0000000..f07a39a --- /dev/null +++ b/src/hooks/useWebsocket.ts @@ -0,0 +1,23 @@ +import { onUnmounted } from 'vue' +import WebSocket from 'cmp-socket' +import { getToken } from 'utils/auth' +export default function (onmessage: { (data: any): void }, messageCommonFun?: any) { + const protocol = location.protocol === 'http:' ? 'ws' : 'wss' + let webSocket = new WebSocket({ + url: `${protocol}://${location.host}/api/sms/messageService`, + commonFun: messageCommonFun, + pingMsg: 'HeartBeat', + reConnectNum: 5, + params: getToken() + }) + if (onmessage && typeof onmessage === 'function') { + webSocket.onmessage = onmessage + } + onUnmounted(() => { + webSocket.Destroy() + webSocket = null + }) + return { + webSocket + } +} diff --git a/src/icons/svg/svg-about.svg b/src/icons/svg/svg-about.svg new file mode 100644 index 0000000..06e0426 --- /dev/null +++ b/src/icons/svg/svg-about.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-basic-resource.svg b/src/icons/svg/svg-basic-resource.svg new file mode 100644 index 0000000..89ebe8b --- /dev/null +++ b/src/icons/svg/svg-basic-resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-bill.svg b/src/icons/svg/svg-bill.svg new file mode 100644 index 0000000..1f1e243 --- /dev/null +++ b/src/icons/svg/svg-bill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-business.svg b/src/icons/svg/svg-business.svg new file mode 100644 index 0000000..96a259c --- /dev/null +++ b/src/icons/svg/svg-business.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-compute-resource.svg b/src/icons/svg/svg-compute-resource.svg new file mode 100644 index 0000000..4314add --- /dev/null +++ b/src/icons/svg/svg-compute-resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-copy.svg b/src/icons/svg/svg-copy.svg new file mode 100644 index 0000000..ce5f78a --- /dev/null +++ b/src/icons/svg/svg-copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-db.svg b/src/icons/svg/svg-db.svg new file mode 100644 index 0000000..51a8173 --- /dev/null +++ b/src/icons/svg/svg-db.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-disabled.svg b/src/icons/svg/svg-disabled.svg new file mode 100644 index 0000000..d74839d --- /dev/null +++ b/src/icons/svg/svg-disabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-dot.svg b/src/icons/svg/svg-dot.svg new file mode 100644 index 0000000..1b8463f --- /dev/null +++ b/src/icons/svg/svg-dot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-host.svg b/src/icons/svg/svg-host.svg new file mode 100644 index 0000000..ad6146b --- /dev/null +++ b/src/icons/svg/svg-host.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-image.svg b/src/icons/svg/svg-image.svg new file mode 100644 index 0000000..ddc41bd --- /dev/null +++ b/src/icons/svg/svg-image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-middle.svg b/src/icons/svg/svg-middle.svg new file mode 100644 index 0000000..1cb263b --- /dev/null +++ b/src/icons/svg/svg-middle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-network-resource.svg b/src/icons/svg/svg-network-resource.svg new file mode 100644 index 0000000..f452779 --- /dev/null +++ b/src/icons/svg/svg-network-resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-operate.svg b/src/icons/svg/svg-operate.svg new file mode 100644 index 0000000..bb6f80c --- /dev/null +++ b/src/icons/svg/svg-operate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-operation.svg b/src/icons/svg/svg-operation.svg new file mode 100644 index 0000000..c32d709 --- /dev/null +++ b/src/icons/svg/svg-operation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-ops-analysis.svg b/src/icons/svg/svg-ops-analysis.svg new file mode 100644 index 0000000..26c4eb0 --- /dev/null +++ b/src/icons/svg/svg-ops-analysis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-order.svg b/src/icons/svg/svg-order.svg new file mode 100644 index 0000000..a67b375 --- /dev/null +++ b/src/icons/svg/svg-order.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-permission.svg b/src/icons/svg/svg-permission.svg new file mode 100644 index 0000000..67182a7 --- /dev/null +++ b/src/icons/svg/svg-permission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-port.svg b/src/icons/svg/svg-port.svg new file mode 100644 index 0000000..b8b5a98 --- /dev/null +++ b/src/icons/svg/svg-port.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-product.svg b/src/icons/svg/svg-product.svg new file mode 100644 index 0000000..b2fc579 --- /dev/null +++ b/src/icons/svg/svg-product.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-repository.svg b/src/icons/svg/svg-repository.svg new file mode 100644 index 0000000..043a59e --- /dev/null +++ b/src/icons/svg/svg-repository.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-resource-interface.svg b/src/icons/svg/svg-resource-interface.svg new file mode 100644 index 0000000..a440486 --- /dev/null +++ b/src/icons/svg/svg-resource-interface.svg @@ -0,0 +1 @@ +画板 1 \ No newline at end of file diff --git a/src/icons/svg/svg-resource-manage.svg b/src/icons/svg/svg-resource-manage.svg new file mode 100644 index 0000000..b636fb0 --- /dev/null +++ b/src/icons/svg/svg-resource-manage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-resource-monitor.svg b/src/icons/svg/svg-resource-monitor.svg new file mode 100644 index 0000000..de2fd08 --- /dev/null +++ b/src/icons/svg/svg-resource-monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-resource-ops.svg b/src/icons/svg/svg-resource-ops.svg new file mode 100644 index 0000000..7631e8d --- /dev/null +++ b/src/icons/svg/svg-resource-ops.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-screen.svg b/src/icons/svg/svg-screen.svg new file mode 100644 index 0000000..1a18939 --- /dev/null +++ b/src/icons/svg/svg-screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-security.svg b/src/icons/svg/svg-security.svg new file mode 100644 index 0000000..649f460 --- /dev/null +++ b/src/icons/svg/svg-security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-service-ops.svg b/src/icons/svg/svg-service-ops.svg new file mode 100644 index 0000000..cd5d63c --- /dev/null +++ b/src/icons/svg/svg-service-ops.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-setting.svg b/src/icons/svg/svg-setting.svg new file mode 100644 index 0000000..5293a5d --- /dev/null +++ b/src/icons/svg/svg-setting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-storage-resource.svg b/src/icons/svg/svg-storage-resource.svg new file mode 100644 index 0000000..f8a773e --- /dev/null +++ b/src/icons/svg/svg-storage-resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-task-platform.svg b/src/icons/svg/svg-task-platform.svg new file mode 100644 index 0000000..9e3d0bc --- /dev/null +++ b/src/icons/svg/svg-task-platform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/svg-vm.svg b/src/icons/svg/svg-vm.svg new file mode 100644 index 0000000..e97a9ec --- /dev/null +++ b/src/icons/svg/svg-vm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/layouts/app.vue b/src/layouts/app.vue new file mode 100644 index 0000000..8b4333c --- /dev/null +++ b/src/layouts/app.vue @@ -0,0 +1,13 @@ + + diff --git a/src/layouts/blank.vue b/src/layouts/blank.vue new file mode 100644 index 0000000..b312b15 --- /dev/null +++ b/src/layouts/blank.vue @@ -0,0 +1,7 @@ + diff --git a/src/layouts/components/Header.vue b/src/layouts/components/Header.vue new file mode 100644 index 0000000..a826cc6 --- /dev/null +++ b/src/layouts/components/Header.vue @@ -0,0 +1,78 @@ +/** * Created by HaijunZhang on 2019/12/18. */ + + + + + diff --git a/src/layouts/components/HeaderMenu.vue b/src/layouts/components/HeaderMenu.vue new file mode 100644 index 0000000..4a54607 --- /dev/null +++ b/src/layouts/components/HeaderMenu.vue @@ -0,0 +1,169 @@ + + + diff --git a/src/layouts/components/HelpCenter.vue b/src/layouts/components/HelpCenter.vue new file mode 100644 index 0000000..2b3da66 --- /dev/null +++ b/src/layouts/components/HelpCenter.vue @@ -0,0 +1,397 @@ + + + + diff --git a/src/layouts/components/RightContent.vue b/src/layouts/components/RightContent.vue new file mode 100644 index 0000000..e9e4621 --- /dev/null +++ b/src/layouts/components/RightContent.vue @@ -0,0 +1,41 @@ +/** * Created by HaijunZhang on 2019/12/18. */ + + + + + diff --git a/src/layouts/components/ServiceOrder.vue b/src/layouts/components/ServiceOrder.vue new file mode 100644 index 0000000..71730c3 --- /dev/null +++ b/src/layouts/components/ServiceOrder.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/layouts/components/SiteMessage.vue b/src/layouts/components/SiteMessage.vue new file mode 100644 index 0000000..3170157 --- /dev/null +++ b/src/layouts/components/SiteMessage.vue @@ -0,0 +1,160 @@ + + + + diff --git a/src/layouts/components/SystemTip.vue b/src/layouts/components/SystemTip.vue new file mode 100644 index 0000000..1b2d792 --- /dev/null +++ b/src/layouts/components/SystemTip.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/layouts/components/TagsView/ScrollPanel.vue b/src/layouts/components/TagsView/ScrollPanel.vue new file mode 100644 index 0000000..34f3e22 --- /dev/null +++ b/src/layouts/components/TagsView/ScrollPanel.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/layouts/components/TagsView/SelectRound.vue b/src/layouts/components/TagsView/SelectRound.vue new file mode 100644 index 0000000..85bf575 --- /dev/null +++ b/src/layouts/components/TagsView/SelectRound.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/layouts/components/TagsView/index.vue b/src/layouts/components/TagsView/index.vue new file mode 100644 index 0000000..8967483 --- /dev/null +++ b/src/layouts/components/TagsView/index.vue @@ -0,0 +1,341 @@ + + + + + diff --git a/src/layouts/components/ThirdMenu.vue b/src/layouts/components/ThirdMenu.vue new file mode 100644 index 0000000..2acef9a --- /dev/null +++ b/src/layouts/components/ThirdMenu.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/layouts/components/personal/InfoDialog.vue b/src/layouts/components/personal/InfoDialog.vue new file mode 100644 index 0000000..12f2696 --- /dev/null +++ b/src/layouts/components/personal/InfoDialog.vue @@ -0,0 +1,165 @@ + + + diff --git a/src/layouts/components/personal/index.vue b/src/layouts/components/personal/index.vue new file mode 100644 index 0000000..a26ad13 --- /dev/null +++ b/src/layouts/components/personal/index.vue @@ -0,0 +1,219 @@ + + + diff --git a/src/layouts/components/personal/useTokenAndLock.ts b/src/layouts/components/personal/useTokenAndLock.ts new file mode 100644 index 0000000..481379a --- /dev/null +++ b/src/layouts/components/personal/useTokenAndLock.ts @@ -0,0 +1,52 @@ +import { computed, onMounted, onUnmounted } from 'vue' +import { useStore } from 'vuex' +import { useRouter, useRoute } from 'vue-router' + +export default function () { + const store = useStore() + const router = useRouter() + const route = useRoute() + + function init() { + store.commit('SET_OPERATETIME') + let lockData = localStorage.getItem('lockData') + if (lockData) { + lockData = JSON.parse(lockData) + if ((lockData as any).isLock) router.push({ name: 'LockMe' }) + } + } + init() + const operateTime = computed(() => store.state.app.operateTime) + const lockScreenTime = computed(() => store.getters.systemConfig.lockScreenTime) + + let timer: any = 0 + function clearTimer() { + clearInterval(timer) + timer = 0 + } + onMounted(() => { + timer = setInterval(() => { + // 锁屏 + const interval = 1000 * 60 * Number(lockScreenTime.value) + // checkUserStatus() + if (interval && new Date().getTime() - operateTime.value >= interval) { + lockScreen() + } + }, 1000 * 20) + }) + onUnmounted(clearTimer) + // 锁屏 + function lockScreen() { + localStorage.setItem( + 'lockData', + JSON.stringify({ + path: route.fullPath, + isLock: true + }) + ) + router.push({ name: 'LockMe' }) + } + return { + lockScreen + } +} diff --git a/src/layouts/components/sidebar/BaseMenu.vue b/src/layouts/components/sidebar/BaseMenu.vue new file mode 100644 index 0000000..2b22b0d --- /dev/null +++ b/src/layouts/components/sidebar/BaseMenu.vue @@ -0,0 +1,105 @@ + + + + diff --git a/src/layouts/components/sidebar/MenuItem.vue b/src/layouts/components/sidebar/MenuItem.vue new file mode 100644 index 0000000..f6a1e1d --- /dev/null +++ b/src/layouts/components/sidebar/MenuItem.vue @@ -0,0 +1,64 @@ + + + + diff --git a/src/layouts/components/sidebar/OperateBtn.vue b/src/layouts/components/sidebar/OperateBtn.vue new file mode 100644 index 0000000..75b597e --- /dev/null +++ b/src/layouts/components/sidebar/OperateBtn.vue @@ -0,0 +1,58 @@ + + + + diff --git a/src/layouts/components/sidebar/Sidebar.vue b/src/layouts/components/sidebar/Sidebar.vue new file mode 100644 index 0000000..af73502 --- /dev/null +++ b/src/layouts/components/sidebar/Sidebar.vue @@ -0,0 +1,120 @@ + + + + diff --git a/src/layouts/components/sidebar/SidebarItem.vue b/src/layouts/components/sidebar/SidebarItem.vue new file mode 100644 index 0000000..2edce88 --- /dev/null +++ b/src/layouts/components/sidebar/SidebarItem.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/layouts/components/sidebar/theme.scss b/src/layouts/components/sidebar/theme.scss new file mode 100644 index 0000000..b3a8eec --- /dev/null +++ b/src/layouts/components/sidebar/theme.scss @@ -0,0 +1,15 @@ +.sidebar-menu { + border: 0; + background: inherit; + :deep { + .el-menu { + background: inherit; + } + .el-menu-item, + .el-menu-item i, + .el-submenu__title, + .el-submenu__title i { + color: inherit; + } + } +} \ No newline at end of file diff --git a/src/layouts/components/sidebar/useBreakPoint.ts b/src/layouts/components/sidebar/useBreakPoint.ts new file mode 100644 index 0000000..07348d8 --- /dev/null +++ b/src/layouts/components/sidebar/useBreakPoint.ts @@ -0,0 +1,22 @@ +import { onMounted, onUnmounted } from 'vue' +import { debounce } from 'lodash-es' +const breakpointMap: any = { + xl: 1200 +} +export default function(breakpoint: string, emit: any){ + const resize = debounce(() => { + const width = document.body.clientWidth; + if(width <= breakpointMap[breakpoint]){ + emit("toggleCollapsed", true, 'resize'); + }else{ + emit("toggleCollapsed", false, 'resize'); + } + }, 10) + onMounted(() => { + // resize() + window.addEventListener('resize', resize) + }) + onUnmounted(() => { + window.removeEventListener('resize', resize) + }) +} \ No newline at end of file diff --git a/src/layouts/components/sidebar/useGlobalStyle.ts b/src/layouts/components/sidebar/useGlobalStyle.ts new file mode 100644 index 0000000..56dbdbf --- /dev/null +++ b/src/layouts/components/sidebar/useGlobalStyle.ts @@ -0,0 +1,35 @@ +import { onUnmounted, computed, unref } from 'vue' +import { useStore } from 'vuex' + +export default function () { + const store = useStore() + const pageConfigs = computed(() => store.getters.pageConfig) + const cssStyle: any = computed(() => { + const { menuBgColour, subMenuBgColour, menuFontColour, menuFontSelectColour, menuSelectColour } = pageConfigs.value + return { + '--custom-base-color-background': menuBgColour, + '--custom-base-color-background-sub': subMenuBgColour, + '--custom-base-color-text': menuFontColour, + '--custom-base-color-background-selected': menuSelectColour, + '--custom-base-color-text-selected': menuFontSelectColour + } + }) + const style = document.createElement('style') + style.setAttribute('type', 'text/css') + function generateCss() { + let str = '' + Object.keys(unref(cssStyle)).forEach((item: string) => { + str += `${item}:${cssStyle.value[item]};` + }) + return str + } + style.innerHTML = `:root{${generateCss()}}` + document.head.appendChild(style) + + onUnmounted(() => { + style && style.remove() + }) + return { + style: cssStyle + } +} diff --git a/src/layouts/components/sidebar/useLink.ts b/src/layouts/components/sidebar/useLink.ts new file mode 100644 index 0000000..78cf500 --- /dev/null +++ b/src/layouts/components/sidebar/useLink.ts @@ -0,0 +1,20 @@ +import { isExternalLink } from 'utils/resolvePath' +import { useRouter } from 'vue-router' +import type { Router } from 'vue-router' + +export function openWindow(url: string, opt?: { target?: '_self' | '_blank' }) { + const { target = '__blank' } = opt || {} + window.open(url, target) +} +export function useLink(_router?: Router) { + const { push } = _router || useRouter() + function goPage(url: string, query: any = {}) { + if (isExternalLink(url)) { + return openWindow(url) + } + push({path: url, query}).catch((e) => { + console.log(e) + }) + } + return goPage +} diff --git a/src/layouts/components/sidebar/useMenuColorConfig.ts b/src/layouts/components/sidebar/useMenuColorConfig.ts new file mode 100644 index 0000000..78d1938 --- /dev/null +++ b/src/layouts/components/sidebar/useMenuColorConfig.ts @@ -0,0 +1,18 @@ +import { computed } from 'vue' +import type { Ref } from 'vue' +import { useStore } from 'vuex' + +export default function () { + const store = useStore() + const menuColorConfig: Ref = computed(() => { + const { menuBgColour, menuFontColour, menuFontSelectColour } = store.getters.pageConfig; + return { + backgroundColor: menuBgColour, + textColor: menuFontColour, + activeTextColor: menuFontSelectColour, + }; + }) + return { + menuColorConfig + } +} \ No newline at end of file diff --git a/src/layouts/components/sidebar/useOpenKeys.ts b/src/layouts/components/sidebar/useOpenKeys.ts new file mode 100644 index 0000000..e626de4 --- /dev/null +++ b/src/layouts/components/sidebar/useOpenKeys.ts @@ -0,0 +1,45 @@ +import { ref, watch, computed, unref } from 'vue' +import { useRoute } from 'vue-router' +import { urlToList } from './utils' +import { useStore } from 'vuex' + +export default function (props: { mainMenu: boolean }) { + const route = useRoute() + const store = useStore() + function getDefaultOpenKeys(path: string) { + return urlToList(path) + } + const { mainMenu } = props + const collapsed = computed(() => store.state.app.isCollapsed) + const openKeys = ref(getDefaultOpenKeys(route.path)) + if (mainMenu) { + watch( + () => route.path, + () => { + if (unref(collapsed)) return + openKeys.value = getDefaultOpenKeys(route.path) + } + ) + watch(collapsed, () => { + if (!collapsed.value) openKeys.value = getDefaultOpenKeys(route.path) + }) + } + // 处理菜单数据,只保持一个子菜单展开 + const handleOpenChange = (openKey: string[]) => { + const result: string[] = [] + if (openKey.length) { + const lastOpenKey = [...openKey].pop() as string + openKey.forEach((item) => { + // 子菜单打开父菜单也需要展开 || 父菜单展开之前缓存的子菜单数据也要展开 + if (lastOpenKey.includes(item) || item.includes(lastOpenKey)) { + result.push(item) + } + }) + } + openKeys.value = result + } + return { + openKeys, + handleOpenChange, + } +} diff --git a/src/layouts/components/sidebar/utils.js b/src/layouts/components/sidebar/utils.js new file mode 100644 index 0000000..075703e --- /dev/null +++ b/src/layouts/components/sidebar/utils.js @@ -0,0 +1,31 @@ +/** + * Created by HaijunZhang on 2019/7/5. + */ +// 获取菜单数组 +export function getFlatMenuPath(menus) { + const paths = [] + menus.forEach((item) => { + paths.push(item.path) + if (item.children) { + paths.push(...getFlatMenuPath(item.children)) + } + }) + return paths +} +// /userinfo/2144/id => ['/userinfo','/useinfo/2144,'/userindo/2144/id'] +export function urlToList(url) { + const urllist = url.split('/').filter((i) => i) + return urllist.map((urlItem, index) => { + return `/${urllist.slice(0, index + 1).join('/')}` + }) +} +export const getIcon = (icon, iconMap) => { + if (iconMap) return iconMap[icon] + if (typeof icon !== 'string') return icon + // if (icon.indexOf('/') > -1) { + // return icon + // } + // if (icon.includes('iconfont')) { + // return + // } +} diff --git a/src/layouts/home.vue b/src/layouts/home.vue new file mode 100644 index 0000000..3349d98 --- /dev/null +++ b/src/layouts/home.vue @@ -0,0 +1,181 @@ + + + + diff --git a/src/layouts/redirect.vue b/src/layouts/redirect.vue new file mode 100644 index 0000000..103fb13 --- /dev/null +++ b/src/layouts/redirect.vue @@ -0,0 +1,12 @@ + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..9769753 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,20 @@ +/* + * @Author: Haijun Zhang + * @Date: 2022-11-10 10:46:38 + * @LastEditTime: 2022-11-14 18:01:42 + * @LastEditors: Haijun Zhang + * @Description: + * @FilePath: \main-web-qiankun\src\main.ts + */ +import { createApp } from 'vue' +import router from '@/router/index' +import store from '@/store' +import '@/permission' +import App from './App.vue' +import 'virtual:svg-icons-register' +import startApp from '@/core/register' +import 'uno.css' + +const application = createApp(App) +application.use(store).use(router).mount('#master-container') +startApp() diff --git a/src/mixins/getGlobalSocket.js b/src/mixins/getGlobalSocket.js new file mode 100644 index 0000000..cc9f32b --- /dev/null +++ b/src/mixins/getGlobalSocket.js @@ -0,0 +1,10 @@ +export default { + computed: { + $webSocket() { + return this.$store.state.app.$webSocket + } + }, + created() { + this.$webSocket.onmessage = this.onmessage + } +} diff --git a/src/mixins/selection.js b/src/mixins/selection.js new file mode 100644 index 0000000..a2f2fa0 --- /dev/null +++ b/src/mixins/selection.js @@ -0,0 +1,12 @@ +export default { + data() { + return { + selectionIds: [], + } + }, + methods: { + handleSelectionChange(selections) { + this.selectionIds = selections.map((item) => item.id) + }, + }, +} diff --git a/src/mixins/webSocket.js b/src/mixins/webSocket.js new file mode 100644 index 0000000..f61c3f5 --- /dev/null +++ b/src/mixins/webSocket.js @@ -0,0 +1,32 @@ +import WebSocket from 'cmp-socket' +import { getToken } from 'utils/auth' + +export default { + data() { + return { + webSocket: '', + } + }, + created() { + const protocol = location.protocol === 'http:' ? 'ws' : 'wss' + this.webSocket = new WebSocket({ + url: `${protocol}://${location.host}/api/sms/messageService`, + commonFun: this.messageCommonFun, + pingMsg: 'HeartBeat', + reConnectNum: 5, + params: getToken(), + }) + if (this.onmessage && typeof this.onmessage === 'function') { + this.webSocket.onmessage = this.onmessage + } + }, + destroyed() { + this.webSocket.Destroy() + this.webSocket = null + }, + methods: { + messageCommonFun() { + console.log('common function') + }, + }, +} diff --git a/src/models/user.d.ts b/src/models/user.d.ts new file mode 100644 index 0000000..8c082c3 --- /dev/null +++ b/src/models/user.d.ts @@ -0,0 +1,19 @@ +export interface IUser { + id?: number + account: string + name: string + status: string + isManager: boolean + sex: boolean + password: string + email: string + mobile: string + dingtalk: string + wechat: string + company: string + jobNumber: string + tenantId: number + remark: string + departId: number | undefined + departIds: number[] +} diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..904a73b --- /dev/null +++ b/src/permission.js @@ -0,0 +1,52 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ +import store from './store' +import router from './router' +import { getToken, setToken } from 'utils/auth' +import { getQuery } from 'utils' +import { isEmpty, assign } from 'lodash-es' + +const { token } = getQuery(location.hash) +if (token) { + setToken(token) +} + +const whiteList = ['/login', '/404', '/401', '/license', '/sso', '/jump'] +router.beforeEach(async (to, from, next) => { + if (isEmpty(history.state.current)) { + assign(history.state, { current: from.fullPath }) + } + if (getToken()) { + // 判断用户是否处于登录状态 + if (to.path === '/login') { + // 如果已经登录重定向到主页 + await store.dispatch('permission/ResetRoutes', false) + next('/login') + } else { + // 为null的场景: 刷新页面或者新开窗口; + const addRoutes = store.getters.addRoutes + if (addRoutes) { + next() + } else { + try { + await store.dispatch('permission/GenerateRoutes') + store.dispatch('GetUserInfo') + next({ ...to, replace: true }) + } catch (error) { + // remove token and go to login page to re-login + await store.dispatch('permission/ResetRoutes', false) + next('/login') + } + } + } + } else { + // 用户没有登录 + if (whiteList.includes(to.path)) { + // 在白名单里直接跳转 + next() + } else { + next('/login') + } + } +}) diff --git a/src/router/constant.ts b/src/router/constant.ts new file mode 100644 index 0000000..f34f9f9 --- /dev/null +++ b/src/router/constant.ts @@ -0,0 +1,44 @@ +import type { RouteRecordRaw } from 'vue-router' + +const routes: RouteRecordRaw[] = [ + { + name: 'Login', + path: '/login', + component: () => import('views/login/login.vue') + }, + { + path: '/sso', + component: () => import('views/login/sso.vue') + }, + { + path: '/jump', + component: () => import('views/login/JumpPage.vue') + }, + { + name: 'LockMe', + path: '/lockme', + component: () => import('views/login/lockme.vue') + }, + { + name: 'Redirect', + path: '/redirect', + meta: { noTag: true }, + component: () => import('@/layouts/redirect.vue') + }, + { + path: '/', + component: () => import('@/layouts/home.vue'), + redirect: '/sms-web/resource_dashboard', + meta: { + title: '主页' + }, + name: 'Home', + children: [] + }, + { + path: '/license', + name: 'License', + component: () => import('@/views/about/index.vue') + } +] +export default routes diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..3d7c515 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,20 @@ +import { createRouter, createWebHistory } from 'vue-router' +import routes from './constant' + +function createRoute() { + return createRouter({ + history: createWebHistory(), + routes, + }) +} +const router = createRoute() +export const asyncRouterMap = { + Home: () => import('@/layouts/home.vue'), + App: () => import('@/layouts/app.vue'), +} +export function resetRouter() { + // const newRouter = createRoute(); + // router.matcher = newRouter.matcher; // reset router +} + +export default router diff --git a/src/services/index.js b/src/services/index.js new file mode 100644 index 0000000..65e99db --- /dev/null +++ b/src/services/index.js @@ -0,0 +1,78 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +export function login(params) { + return request.post('/sms/v1/users/login', params) +} +export function getTokenInfo(params) { + return request.post('/sms/v1/sso/token/info', params) +} +export function getToken() { + return request.post('/sms/v1/sso/check') +} +export function getUserInfo() { + return request.get('/sms/v1/login/detail') +} +export function logout() { + return request.post('/sms/v1/users/logout') +} +export function getConfig(params) { + return request.get('/sms/v1/logo', { + params: wrapperParams(params), + }) +} +export function getDict(data) { + return request.get('/dict/children', { + params: wrapperParams(data), + }) +} +export function getSysconf() { + return request.get('/sms/v1/configs') +} +export function getSysconfCode(params) { + return request.get('/sms/v1/configs', { params }) +} +export function modifySysconf(data) { + return request.put('/sms/v1/configs', wrapperParams(data)) +} + +export function syncLdapApi() { + return request.post('/sms/v1/configs/syncLdap') +} +// 获取首页概览信息 +export function getPortal(params) { + return request.get('/ims/v1/portal/platform/stats', { params: wrapperParams(params) }) +} +export function getServiceQuota(tenantId, data) { + return request.get(`/cos/v1/tenants/${tenantId}/quotas`, { + params: wrapperParams(data), + }) +} +// 获取用户权限 +export function getUserPermissions() { + return request.get('/sms/v1/users/permissions') +} +// 获取系统配置信息 +export function getSystemConfigs(params) { + return request.get('/sms/v1/configs', { params }) +} +// 获取树状系统配置信息 +export function getSystemTreeConfigs(params) { + return request.get('/sms/v1/configs/tree', { params }) +} +// 更新系统配置信息 +export function updateSystemConfigs(params) { + return request.put('/sms/v1/system-configs', params, { + headers: { 'Content-Type': 'multipart/form-data', BsmAjaxHeader: true, options: { noSeri: true } }, + }) +} +// 测试连接 +export function testLinkApi(category) { + return request.get('/sms/v1/configs/test', { params: { category } }) +} +export function getWinhongToken() { + return request.get('/sms/v1/system/home/winhong/token') +} diff --git a/src/services/license.js b/src/services/license.js new file mode 100644 index 0000000..e1e8e56 --- /dev/null +++ b/src/services/license.js @@ -0,0 +1,26 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' + +const baseUrl = '/sms/v1/config' + +export function getStatus(params) { + return request.get(`${baseUrl}/status`, { + params, + }) +} +export function getSid() { + return request.get('/sms/v1/status/sids') +} +export function getServer(params) { + return request.get(`${baseUrl}/servers`, { + params, + }) +} +export function getLicense() { + return request.get(`${baseUrl}/license`) +} +export function installCaptcha(params) { + return request.post('/sms/v1/config/captcha/install', params) +} diff --git a/src/services/manager.ts b/src/services/manager.ts new file mode 100644 index 0000000..5bacd7b --- /dev/null +++ b/src/services/manager.ts @@ -0,0 +1,56 @@ +/* eslint-disable no-undef */ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils/index' +import type { IUser } from '@/models/user' + +const baseUrl = '/sms/v1/users' +export function getUser(params: Base.IListParams) { + return request.get>(baseUrl, { + params, + }) +} +export function getUserDetail(id: number) { + return request.get(`${baseUrl}/${id}`) +} +export function createUser(params: IUser) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyUser(params: IUser) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeUser(id: number) { + return request.delete(`${baseUrl}/${id}`) +} + +export function accreditManager(id: number, roleIds: number[]) { + return request.patch(`${baseUrl}/${id}/accredit`, roleIds) +} +export function resetManager(id: number, password: string) { + return request.patch(`${baseUrl}/${id}/reset`, { password }) +} +export function operateManager(id: number, action: string) { + return request.patch(`${baseUrl}/${id}`, { action }) +} +export function batchOperateManager(ids: number[], action: string) { + return request.patch(`${baseUrl}`, { action, ids }) +} +export function changePassword(id: number, params: { oldPassword: string; password: string }) { + return request.patch(`${baseUrl}/${id}/pwd`, params) +} +export function checkUser(id: number) { + return request.get(`${baseUrl}/${id}/status`) +} +export function getRolesByUser(id: number) { + return request.get(`${baseUrl}/${id}/roles`) +} +export function getTrack(params: Base.IListParams) { + return request.get(`${baseUrl}/track`, { + params, + }) +} +export function exportUser(params: Base.IListParams) { + downloadFile(`${baseUrl}/export`, params) +} diff --git a/src/services/message.js b/src/services/message.js new file mode 100644 index 0000000..2697c89 --- /dev/null +++ b/src/services/message.js @@ -0,0 +1,23 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' + +const baseUrl = '/sms/v1/messages' +export function getMessage(params) { + return request.get(baseUrl, { + params, + }) +} +export function getMessageStats() { + return request.get(`${baseUrl}/stats`) +} +export function getMessageDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function removeMessage(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function readAllMessage(params) { + return request.patch(`${baseUrl}`, params) +} diff --git a/src/services/user.js b/src/services/user.js new file mode 100644 index 0000000..35f5758 --- /dev/null +++ b/src/services/user.js @@ -0,0 +1,50 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils/index' + +const baseUrl = '/sms/v1/users' +export function getUser(params) { + return request.get(baseUrl, { + params, + }) +} +export function getUserDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createUser(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyUser(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeUser(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function getManager(id) { + return request.get(`/sms/v1/tenants/${id}`) +} +/* + * action取值为: + * lock active reset accredit change + */ +export function operateUser(id, action, params) { + return request.patch(`${baseUrl}/${id}`, { + action, + ...wrapperParams(params), + }) +} +export function checkStatus(data) { + const { accountCategory, id } = data + const url = accountCategory === 'User' ? baseUrl : '/sms/v1/tenants' + return request.get(`${url}/${id}/status`) +} +export function getRolesByUser(id) { + return request.get(`${baseUrl}/${id}/roles`) +} +export function getTrack(params) { + return request.get(`${baseUrl}/track`, { + params, + }) +} diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..5e1174b --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,11 @@ +const getters = { + addRoutes: (state) => state.permission.addRoutes, + routeMap: (state) => state.permission.routeMap, + userData: (state) => state.app.userData, + pageConfig: (state) => state.app.pageConfig, + systemConfig: (state) => state.app.systemConfig, + appLoading: (state) => state.app.appLoading, + appConfigs: (state) => state.app.appConfigs, + hasFms: (state) => state.app.hasFms, +} +export default getters diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 0000000..b48f11f --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,10 @@ +import { createStore } from 'vuex' +import getters from './getters' +import { getModules } from '@/utils/autoImport' + +const modulesMap: any = import.meta.globEager('./modules/*.js') +const modules = getModules(modulesMap) +export default createStore({ + modules, + getters +}) diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..76931b3 --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,136 @@ +/** + * Created by Zhang Haijun on 2018/6/15. + */ +import { getSystemConfigs, getUserInfo } from 'services' +import { userKey, enableUserStorage } from '@/config' +import { setBrowser, createGlobalStyle } from '../utils' +import actionStore from '@/core/actions' + +const state = { + isCollapsed: false, + sideMenuData: [], + pageConfig: {}, + systemConfig: {}, + userData: null, + operateTime: '', + basePath: '', + $webSocket: {}, + expire: false, + appLoading: false, + appConfigs: { + homePath: '', + hasCos: true, + }, + hasFms: true +} +const mutations = { + SET_EXPIRE(state, value) { + state.expire = value + }, + SET_APP_LOADING(state, value) { + state.appLoading = value + }, + SET_OPERATETIME(state) { + state.operateTime = new Date().getTime() + }, + SET_WEBSOCKET(state, value) { + state.$webSocket = value + }, + SET_ONMESSAGE(state, value) { + if (state.$webSocket) { + state.$webSocket.onmessage = value + } + }, + SET_USERDATA(state, userData = {}) { + state.userData = userData + actionStore.setGlobalState({ + userData + }) + }, + RESET_USER(state) { + state.userData = {} + if (enableUserStorage) { + localStorage.removeItem(userKey) + } + }, + TOGGLE_SIDEBAR(state) { + state.isCollapsed = !state.isCollapsed + }, + SET_COLLAPSED(state, value) { + state.isCollapsed = value + }, + SETTING_SIDE_MENU(state, data) { + state.sideMenuData = data + }, + SETTING_BASE_PATH(state, data) { + state.basePath = data + }, + SETTING_PAGE_CONFIG(state, data) { + const { browserIcon, browserTitle, menuBgColour, subMenuBgColour, menuFontColour, menuFontSelectColour, menuSelectColour } = data + setBrowser(browserIcon, browserTitle); + createGlobalStyle({ + '--custom-base-color-background': menuBgColour, + '--custom-base-color-background-sub': subMenuBgColour, + '--custom-base-color-text': menuFontColour, + '--custom-base-color-background-selected': menuSelectColour, + '--custom-base-color-text-selected': menuFontSelectColour + }) + state.pageConfig = data + }, + SETTING_SYSTEM_CONFIG(state, data) { + state.systemConfig = data + }, + SET_APP_CONFIGS(state, value){ + state.appConfigs = value + actionStore.setGlobalState({ + appConfigs: value + }) + }, + SETTING_HASFMS(state, value) { + state.hasFms = value + } +} +const actions = { + async GetUserInfo({ commit, state: { userData } }) { + // 如果启用了本地缓存,直接在缓存取数据 + if (enableUserStorage && !userData) { + const userData = JSON.parse(localStorage.getItem(userKey)) + if (userData) { + // 判断下菜单数据是否存在 + commit('SET_USERDATA', userData) + return + } + } + const data = await getUserInfo() + if (data.success) { + // 云桌面登录与系统登录返回值不同 + const { portrait, ...others } = data.data.Manager || {} + const result = { + ...others, + portrait: portrait || '/web-common-resource/img/avatar_default.png', + accountCategory: data.data.accountCategory + } + if (enableUserStorage) { + localStorage.setItem(userKey, JSON.stringify(result)) + } + commit('SET_USERDATA', result) + } + }, + async GetPageConfigs({ commit }) { + const data = await getSystemConfigs({ category: '界面配置' }) + if (data.success) { + commit('SETTING_PAGE_CONFIG', data.data) + } + }, + async GetSystemConfigs({ commit }) { + const data = await getSystemConfigs({ codes: 'pwdStrength,lockScreenTime' }) + if (data.success) { + commit('SETTING_SYSTEM_CONFIG', data.data) + } + } +} +export default { + state, + mutations, + actions +} diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js new file mode 100644 index 0000000..e1127be --- /dev/null +++ b/src/store/modules/permission.js @@ -0,0 +1,155 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ +import { resolvePath } from 'utils/resolvePath' +import { removeToken } from 'utils/auth' +import { getUserPermissions } from 'services' +import BlankView from '@/layouts/blank.vue' +import router, { resetRouter } from '@/router' +import { menuKey, enablePermissionStorage } from '@/config' +import actionStore from '@/core/actions' +import { trimStart } from 'lodash-es' + +const resultRoutes = [] +const createSubRoute = (permissions) => { + permissions.forEach(item => { + const { path } = item; + router.addRoute('Home',{ + name: trimStart(path, '/'), + path: `${path}/:page*`, + component: BlankView + }) + }) +} +// 对异步路由数据进行处理生成路由表 +const handleAsyncRouter = (routes, basePath = '/') => { + const res = [] + routes.forEach((route) => { + const { router, component, name, redirect, icon, id, category, meta, params } = route + // 生成meta对象 + const metaCache = {} + JSON.parse(meta).forEach((item) => { + metaCache[item.key] = item.value + }) + // 生成params对象 + const paramsCache = {} + JSON.parse(params).forEach((item) => { + paramsCache[item.key] = item.value + }) + const tmp = { + id, + path: resolvePath(basePath, route.path), + name: router, + component, + redirect, + hidden: category === 'view', + meta: { + ...metaCache, + title: name, + icon + }, + params: paramsCache + } + if (route.children) { + tmp.children = handleAsyncRouter(route.children, tmp.path) + } + res.push(tmp) + }) + return res +} +function getRouteMap(menus) { + let routerMap = {}; + menus.forEach((menuItem) => { + const { path, children } = menuItem; + if (children) { + routerMap = Object.assign(routerMap, getRouteMap(children)); + } + routerMap[path] = menuItem; + }); + + return routerMap; +} +const state = { + addRoutes: null, + buttons: [], + routeMap: {} +} +const mutations = { + SET_ROUTES: (state, routers) => { + state.addRoutes = routers + state.routeMap = getRouteMap(routers || []) + }, + SET_BUTTONS: (state) => { + state.buttons = JSON.parse(localStorage.getItem('buttonData')) + } +} +const actions = { + GenerateRoutes({ commit, state: { addRoutes } }) { + return new Promise((resolve) => { + const callback = (permissions) => { + resultRoutes.length = 0 + actionStore.setGlobalState({ + permissions + }) + createSubRoute(permissions) + const asyncRouter = handleAsyncRouter(permissions) + commit('SET_ROUTES', asyncRouter) + resolve(asyncRouter) + } + // 如果启用了本地缓存并且刷新界面进入,直接在缓存取数据,因为存在一种情况主动更新数据 + if (enablePermissionStorage && !addRoutes) { + const menuData = JSON.parse(localStorage.getItem(menuKey)) + if (menuData) { + // 判断下菜单数据是否存在 + callback(menuData) + return + } + } + getUserPermissions() + .then((data) => { + if (data.success) { + if (enablePermissionStorage) { + localStorage.setItem(menuKey, JSON.stringify(data.data)) + } + callback(data.data) + } + }) + .catch((err) => { + console.log(err) + }) + }) + }, + // 动态更新权限 + ChangeRoutes({ dispatch }) { + return new Promise((resolve) => { + resetRouter() + dispatch('GenerateRoutes').then(() => { + resolve() + }) + }) + }, + ResetRoutes({ commit, dispatch }, redirectToLogin = true) { + return new Promise((resolve) => { + resetRouter() + commit('SET_ROUTES', null) + if (enablePermissionStorage) { + localStorage.removeItem(menuKey) + } + // 重置用户信息 + commit('RESET_USER', null, { root: true }) + // 重置用户信息 + commit('SETTING_SIDE_MENU', [], { root: true }) + // 重置标签信息 + dispatch('tagsView/delAllViews', null, { root: true }) + removeToken() + if (redirectToLogin) window.location.href = '/login' + resolve() + }) + } +} +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js new file mode 100644 index 0000000..5e6c650 --- /dev/null +++ b/src/store/modules/tagsView.js @@ -0,0 +1,132 @@ +const state = { + visitedViews: [], + cachedViews: [], +} + +const mutations = { + ADD_VISITED_VIEW: (state, view) => { + const { + meta: { noTag, title }, + } = view + if (noTag || !title) return + if (state.visitedViews.some((v) => v.path === view.path)) return + state.visitedViews.push({ ...view, title }) + }, + ADD_CACHED_VIEW: (state, view) => { + if (state.cachedViews.includes(view.name)) return + if (view.name && !view.meta.noCache) { + state.cachedViews.push(view.name) + } + }, + + DEL_VISITED_VIEW: (state, view) => { + for (const [i, v] of state.visitedViews.entries()) { + if (v.path === view.path) { + state.visitedViews.splice(i, 1) + break + } + } + }, + DEL_CACHED_VIEW: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + if (index > -1) state.cachedViews.splice(index, 1) + }, + + DEL_OTHERS_VISITED_VIEWS: (state, view) => { + state.visitedViews = state.visitedViews.filter((v) => v.meta.fix || v.path === view.path) + }, + DEL_OTHERS_CACHED_VIEWS: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + if (index > -1) { + state.cachedViews = [view.name] + } else { + // if index = -1, there is no cached tags + state.cachedViews = [] + } + }, + DEL_LEFT_VISITED_VIEWS: (state, index) => { + const left = state.visitedViews.slice(0, index).filter((v) => v.meta.fix) + const right = state.visitedViews.slice(index) + state.visitedViews = [...left, ...right] + }, + DEL_RIGHT_VISITED_VIEWS: (state, index) => { + const left = state.visitedViews.slice(0, index + 1) + const right = state.visitedViews.slice(index + 1).filter((v) => v.meta.fix) + state.visitedViews = [...left, ...right] + }, + UPDATE_CACHE_VIEWS: (state) => { + state.cachedViews = state.visitedViews.filter((v) => !v.meta.noCache && v.name).map((v) => v.name) + }, + DEL_ALL_VISITED_VIEWS: (state) => { + // keep fix tags + const fixTags = state.visitedViews.filter((tag) => tag.meta.fix) + state.visitedViews = fixTags + }, + DEL_ALL_CACHED_VIEWS: (state) => { + state.cachedViews = [] + }, +} + +const actions = { + addView({ commit }, view) { + commit('ADD_VISITED_VIEW', view) + commit('ADD_CACHED_VIEW', view) + }, + delView({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_VISITED_VIEW', view) + commit('DEL_CACHED_VIEW', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delOthersViews({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_OTHERS_VISITED_VIEWS', view) + commit('DEL_OTHERS_CACHED_VIEWS', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delLeftViews({ commit, state }, { index }) { + return new Promise((resolve) => { + commit('DEL_LEFT_VISITED_VIEWS', index) + commit('UPDATE_CACHE_VIEWS') + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delRightViews({ commit, state }, { index }) { + return new Promise((resolve) => { + commit('DEL_RIGHT_VISITED_VIEWS', index) + commit('UPDATE_CACHE_VIEWS') + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delAllViews({ commit, state }) { + return new Promise((resolve) => { + commit('DEL_ALL_VISITED_VIEWS') + commit('DEL_ALL_CACHED_VIEWS') + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, +} + +export default { + namespaced: true, + state, + mutations, + actions, +} diff --git a/src/store/utils.js b/src/store/utils.js new file mode 100644 index 0000000..345f3d5 --- /dev/null +++ b/src/store/utils.js @@ -0,0 +1,27 @@ +export const setBrowser = (icon, title) => { + const head = document.getElementsByTagName('head')[0] + const linkTag = document.createElement('link') + linkTag.href = icon + linkTag.setAttribute('rel', 'shortcut icon') + linkTag.setAttribute('type', 'image/x-icon') + head.appendChild(linkTag) + document.title = title +} +// /system/configs/page -> [ '/system','/system/configs','/system/configs/page'] +export const urlToList = (url) => { + const urllist = url.split('/').filter((i) => i) + return urllist.map((urlItem, index) => `/${urllist.slice(0, index + 1).join('/')}`) +} +export function createGlobalStyle(cssStyle){ + const style = document.createElement('style') + style.setAttribute('type', 'text/css') + function generateCss() { + let str = '' + Object.keys(cssStyle).forEach((item) => { + str += `${item}:${cssStyle[item]};` + }) + return str + } + style.innerHTML = `:root{${generateCss()}}` + document.head.appendChild(style) +} \ No newline at end of file diff --git a/src/types/shims-ajax.d.ts b/src/types/shims-ajax.d.ts new file mode 100644 index 0000000..413445a --- /dev/null +++ b/src/types/shims-ajax.d.ts @@ -0,0 +1,21 @@ +import {} from 'axios' +declare module 'axios' { + export interface AxiosInstance { + (config: AxiosRequestConfig): AxiosPromise + (url: string, config?: AxiosRequestConfig): AxiosPromise + defaults: AxiosRequestConfig + interceptors: { + request: AxiosInterceptorManager + response: AxiosInterceptorManager + } + getUri(config?: AxiosRequestConfig): string + request>(config: AxiosRequestConfig): Promise + get>(url: string, config?: AxiosRequestConfig): Promise + delete>(url: string, config?: AxiosRequestConfig): Promise + head>(url: string, config?: AxiosRequestConfig): Promise + options>(url: string, config?: AxiosRequestConfig): Promise + post>(url: string, data?: any, config?: AxiosRequestConfig): Promise + put>(url: string, data?: any, config?: AxiosRequestConfig): Promise + patch>(url: string, data?: any, config?: AxiosRequestConfig): Promise + } +} diff --git a/src/types/shims-global.d.ts b/src/types/shims-global.d.ts new file mode 100644 index 0000000..40e23da --- /dev/null +++ b/src/types/shims-global.d.ts @@ -0,0 +1,53 @@ +declare namespace Base { + // ajax请求返回数据格式 + interface IResponseData { + success: boolean + failed: boolean + solution: string + message: string + errorMsg: string + data: T + status: string + } + // list接口返回数据格式 + interface IListData { + page: number + pages: number + total: number + rows: T[] + } + interface IResponseList extends IResponseData { + data: IListData + } + // 列表查询传参 + interface IListParams { + page?: number + rows?: number + simple?: boolean + params?: string + sorter?: string + } + // 模态框打开 + interface IDialog { + visible: boolean + record: T + } + // 搜索配置 + interface ISearchConfig { + label?: string + value: string + type: string + initValue?: string | number + sign?: string + data?: T[] + onChange?: { + (val: string, listQuery: any): void + } + } + // 列表 + type IListState = { + list: T[] + total: number + params: IListParams + } +} diff --git a/src/types/shims-tsx.d.ts b/src/types/shims-tsx.d.ts new file mode 100644 index 0000000..0f0e0c1 --- /dev/null +++ b/src/types/shims-tsx.d.ts @@ -0,0 +1,13 @@ +import Vue, { VNode } from 'vue' + +declare global { + namespace JSX { + // tslint:disable no-empty-interface + type Element = VNode + // tslint:disable no-empty-interface + type ElementClass = Vue + interface IntrinsicElements { + [elem: string]: any + } + } +} diff --git a/src/types/shims-vue.d.ts b/src/types/shims-vue.d.ts new file mode 100644 index 0000000..cb609c2 --- /dev/null +++ b/src/types/shims-vue.d.ts @@ -0,0 +1,10 @@ +import Vue from 'vue' + +declare module '*.vue' { + export default Vue +} +declare module 'vue/types/vue' { + interface Vue { + $tools: any + } +} diff --git a/src/types/shims.tools.d.ts b/src/types/shims.tools.d.ts new file mode 100644 index 0000000..8a9d43a --- /dev/null +++ b/src/types/shims.tools.d.ts @@ -0,0 +1,16 @@ +declare module 'cmp-basic' +declare module 'cmp-echarts' +declare module 'cmp-element' +declare module 'cmp-socket' +declare module 'cmp-element/utils' +declare module 'vite-plugin-svg-icons' +declare module 'services' +declare module 'v-viewer/src/component.vue' + +declare interface Window { + Vue: any + Vue2: any + appConfigs: { + homePath: string + } +} diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000..4b61c47 --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,16 @@ +/** + * Created by HaijunZhang on 2018/11/16. + */ +import { tokenKey } from '@/config' + +export function getToken() { + return sessionStorage.getItem(tokenKey) +} + +export function setToken(token: string) { + return sessionStorage.setItem(tokenKey, token) +} + +export function removeToken(){ + return sessionStorage.removeItem(tokenKey) +} \ No newline at end of file diff --git a/src/utils/autoImport.ts b/src/utils/autoImport.ts new file mode 100644 index 0000000..6bbf23f --- /dev/null +++ b/src/utils/autoImport.ts @@ -0,0 +1,30 @@ +// 同步加载 +export function getModules(files: any) { + // 当files为方法时为webapock,为对象时为vite + const isWebpack = typeof files === 'function' + // 路径包含compoennts的是内置组件不向外暴露 + const modules = (isWebpack ? files.keys() : Object.keys(files)) + .filter((item: string) => !item.includes('components')) + .reduce((modules: any, modulePath: string) => { + // set './app.vue' => 'app' + const moduleName = modulePath.replace(/^\.\S*\/(.*)\.\w+$/, '$1') + const value = isWebpack ? files(modulePath) : files[modulePath] + modules[moduleName] = value.default + return modules + }, {}) + return modules +} +// 异步加载 +export function getAsyncModules(files: any, asyncImport: any) { + // 当files为方法时为webapock,为对象时为vite + const isWebpack = typeof files === 'function' + const modules = (isWebpack ? files.keys() : Object.keys(files)) + .filter((item: string) => !item.includes('components')) + .reduce((modules: any, modulePath: string) => { + // set './app.vue' => 'app' + const moduleName = modulePath.replace(/^\.\S*\/(.*)\.\w+$/, '$1') + modules[moduleName] = isWebpack ? asyncImport(modulePath) : files[moduleName] + return modules + }, {}) + return modules +} diff --git a/src/utils/crypto.js b/src/utils/crypto.js new file mode 100644 index 0000000..af22977 --- /dev/null +++ b/src/utils/crypto.js @@ -0,0 +1,45 @@ +/** + * Created by HaijunZhang on 2018/11/19. + */ +import CryptoJS from 'crypto-js' + +// base64解码 +function decryptByBase64(word) { + const base64string = CryptoJS.enc.Base64.parse(word) + return CryptoJS.enc.Utf8.stringify(base64string) +} + +// base64编码 +function encryptByBase64(word) { + const src = CryptoJS.enc.Utf8.parse(word) + const base64string = CryptoJS.enc.Base64.stringify(src) + return base64string +} + +const defaultKey = CryptoJS.enc.Utf8.parse(decryptByBase64('Qm9jbG91ZENNUFY1ODchIQ==')) +const iv = CryptoJS.enc.Utf8.parse(decryptByBase64('QmV5b25kQ01QVjU4NyEhIQ==')) +const options = { + iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, +} + +// 加密方法 +export function encrypt(word, key = defaultKey) { + const srcs = CryptoJS.enc.Utf8.parse(typeof word === 'object' ? JSON.stringify(word) : word) + const encrypted = CryptoJS.AES.encrypt(srcs, key, options) + return encrypted.toString() +} + +// 解密方法 +export function decrypt(word, key = defaultKey) { + const decryptRes = CryptoJS.AES.decrypt(word, key, options) + return decryptRes.toString(CryptoJS.enc.Utf8) +} + +export default { + encrypt, + decrypt, + encryptByBase64, + decryptByBase64, +} diff --git a/src/utils/day.ts b/src/utils/day.ts new file mode 100644 index 0000000..37bf2f2 --- /dev/null +++ b/src/utils/day.ts @@ -0,0 +1,6 @@ +import dayjs from 'dayjs' +import 'dayjs/locale/zh-cn' + +dayjs.locale('zh-cn') + +export default dayjs diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..1e6e717 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,98 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import { getToken } from 'utils/auth' +import dayjs from './day' +import Clipboard from 'clipboard' + +export function wrapperParams(data) { + return data + // return { params: JSON.stringify(data) } +} +export const copyText = (text, event, successCallback, errorCallback) => { + const clipboard = new Clipboard(event.target, { + text: () => text + }) + clipboard.on('success', () => { + successCallback && successCallback() + clipboard.destroy() + }) + clipboard.on('error', () => { + errorCallback && errorCallback() + clipboard.destroy() + }) + clipboard.onClick(event) +} +export const formatEqParams = (params) => ({ page: 1, rows: 9999, params: JSON.stringify([{ param: params, sign: 'EQ' }]) }) +export const downloadFile = (url, params = {}) => { + let str = '' + Object.keys(params).forEach((item) => { + str += `&${item}=${params[item]}` + }) + window.location.href = encodeURI(`/api${url}?token=${getToken()}${str}`) +} +export const getQuery = (hash) => { + const queryArr = hash.split('?') + if (queryArr.length === 1) { + return {} + } + const query = {} + queryArr[1].split('&').forEach((item) => { + const [key, value] = item.split('=') + query[key] = value + }) + return query +} +// ip比较大小 +export const compareIp = (ip1, ip2) => { + const ip1Arr = ip1.split('.') + const ip2Arr = ip2.split('.') + let flag + for (let i = 0; i < 4; i += 1) { + if (Number(ip1Arr[i]) > Number(ip2Arr[i])) { + flag = 0 + break + } else if (Number(ip1Arr[i]) < Number(ip2Arr[i])) { + flag = 1 + } + } + return flag +} +export function makeTimeStamp() { + return dayjs().format('YYYYMMDDHHmmss') +} +export function handleSearchParam(params) { + // 设置参数 + const objParams = {} + function setParams(sign, key, value) { + if (objParams[sign]) { + objParams[sign][key] = value + } else { + objParams[sign] = { + [key]: value + } + } + } + // 将参数处理为对象 + for (const a in params) { + const value = params[a] + // 对参数进行处理,去除空参数 + if (value === '' || value === undefined || value === null) continue + // 对key值进行处理 + const [key, sign = 'EQ'] = a.split(':') + // 将sign全部转换为大写 + const signs = sign.toLocaleUpperCase() + if (signs === 'RANGE') { + const [first, second] = value + setParams('GET', key, first) + setParams('LET', key, second) + continue + } + setParams(signs, key, value) + } + const result = [] + for (const a in objParams) { + result.push({ param: objParams[a], sign: a }) + } + return JSON.stringify(result) +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..fde2894 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,121 @@ +/** + * Created by Zhang Haijun on 2017/8/24. + * axios#request(config) + * axios#get(url[, config]) + * axios#delete(url[, config]) + * axios#head(url[, config]) + * axios#options(url[, config]) + * axios#post(url[, data[, config]]) + * axios#put(url[, data[, config]]) + * axios#patch(url[, data[, config]]) + */ +import axios from 'axios' +import NProgress from 'nprogress' +import qs from 'qs' +import 'nprogress/nprogress.css' +import { getToken, setToken } from 'utils/auth' +import store from '@/store' +import { ElNotification } from 'element-plus' +import 'element-plus/es/components/notification/style/css' + +const codeMessage = { + 200: '服务器成功返回请求的数据。', + 201: '新建或修改数据成功。', + 202: '一个请求已经进入后台排队(异步任务)。', + 204: '删除数据成功。', + 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', + 401: '用户没有权限(令牌、用户名、密码错误)。', + 403: '用户得到授权,但是访问是被禁止的。', + 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', + 406: '请求的格式不可得。', + 410: '请求的资源被永久删除,且不会再得到的。', + 422: '当创建一个对象时,发生一个验证错误。', + 500: '服务器发生错误,请检查服务器。', + 502: '网关错误。', + 503: '服务不可用,服务器暂时过载或维护。', + 504: '网关超时。' +} +const axiosInstance = axios.create({ + baseURL: '/api', + headers: { 'Content-Type': 'application/json', BsmAjaxHeader: true }, + timeout: 20000, + paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'indices' }) +}) +// 请求完成回调 +const finishCallback = function () { + NProgress.done() +} +// 报错处理 +const handleError = function(response) { + if (!response) return // 容错处理 + let title = `请求错误 ${response.status}: ${response.config.url}` + let errorText = codeMessage[response.status] || response.statusText + const { data } = response + if (typeof data?.message == 'string') { + title = data.message + errorText = '' + } + Notification({ + type: 'error', + title, + message: errorText + }) + const error = new Error(errorText) + error.name = response.status + error.response = response + throw error +} +axiosInstance.interceptors.request.use( + (config) => { + const { + headers, + headers: { options = {} } + } = config + NProgress.start() + if (config.method === 'get') { + // 清除get缓存 + config.url = `${config.url}?t=${new Date().getTime()}` + } else if (headers['Content-Type'] === 'application/x-www-form-urlencoded') { + config.data = qs.stringify(config.data || {}) + } + config.headers.token = getToken() + delete config.headers.options + config.options = options + return config + }, + (error) => Promise.reject(error) +) +axiosInstance.interceptors.response.use( + (data) => { + // const requestKey = getRequestIdentify(data.config); + // removePending(requestKey); + finishCallback() + const { data: responseData, config: { options }, headers: { token }} = data + if(token) setToken(token) + if (!responseData.success) { + switch (responseData.status) { + case '402': + store.dispatch('permission/ResetRoutes') + window.location.href = '/license' + break + case '401': + case '509': + store.dispatch('permission/ResetRoutes') + break + default: + } + if (!options.ignoreError) { + ElNotification.error({ + message: responseData.message || responseData.data + }) + } + } + return responseData + }, + (error) => { + finishCallback() + handleError(error.response) + return Promise.reject(error) + } +) +export default axiosInstance diff --git a/src/utils/resolvePath.js b/src/utils/resolvePath.js new file mode 100644 index 0000000..63aca96 --- /dev/null +++ b/src/utils/resolvePath.js @@ -0,0 +1,22 @@ +/** + * Created by HaijunZhang on 2018/12/10. + */ +// import path from 'path'; +import { startsWith } from 'lodash-es' + +export function isExternalLink(path) { + return /^(http:|https:|mailto:|tel:)\/\//.test(path) +} +export function resolvePath(basePath, routePath) { + if (isExternalLink(routePath)) { + return routePath + } + // return path.resolve(basePath, routePath); + const basePathArr = basePath.split('/') + const routePathArr = routePath.split('/') + if (startsWith(routePath, '/')) { + return routePath + } + const res = [...basePathArr, ...routePathArr].filter((item) => item) + return `/${res.join('/')}` +} diff --git a/src/utils/uploadFile.js b/src/utils/uploadFile.js new file mode 100644 index 0000000..5e4e3d0 --- /dev/null +++ b/src/utils/uploadFile.js @@ -0,0 +1,89 @@ +// websocket文件上传 +import { getToken } from './auth' + +export default function uploadFile(item, callback, errorCallBack) { + const protocol = location.protocol === 'http:' ? 'ws' : 'wss' + item.isReady = true + const socket = new WebSocket(`${protocol}://${location.host}/api/sms/uploadService`, getToken()) + let i = 0 + let startSize = 0 + let endSize = 0 + const paragraph = 4 * 1024 * 1024 // 以4MB为一个分片 + const count = parseInt(item.file.size / paragraph) + 1 + socket.onopen = function () { + item.isUploading = true + socket.send( + JSON.stringify({ + filename: item.file.name, + upload: 'file', + }) + ) + // 取消上传 + item.cancel = function () { + item.progress = 0 + socket.send( + JSON.stringify({ + UPLOAD_CANCEL: 'UPLOAD_CANCEL', + }) + ) + item.isUploading = false + } + } + socket.onmessage = function (event) { + const sendFile = function () { + if (startSize < item.file.size) { + let blob + endSize += paragraph + if (item.file.webkitSlice) { + blob = item.file.webkitSlice(startSize, endSize) + } else if (item.file.mozSlice) { + blob = item.file.mozSlice(startSize, endSize) + } else { + blob = item.file.slice(startSize, endSize) + } + const reader = new FileReader() + reader.readAsArrayBuffer(blob) + + reader.onload = function loaded(evt) { + const { result } = evt.target + i++ + const isok = (i / count) * 100 + item.progress = parseInt(isok) + startSize = endSize + socket.send(result) + } + } else { + item.progress = 100 + socket.send( + JSON.stringify({ + sendover: 'sendover', + }) + ) + } + } + item.isUploading = true + item.isCancel = false + const obj = JSON.parse(event.data) + if (obj.category == 'UPLOAD_ACK') { + item.filePath = obj.content + sendFile() + } else if (obj.category == 'UPLOAD') { + if (obj.content == 'SAVE_FAILURE') { + item.isUploading = false + errorCallBack(item) + } else if (obj.content == 'SAVE_SUCCESS') { + sendFile() + } else if (obj.content == 'TRUE') { + callback(item) + item.isReady = true + item.isSuccess = true + item.isUploading = false + socket.close() + } + } else if (obj.category == 'UPLOAD_CANCEL') { + item.progress = 0 + item.isCancel = true + socket.close() + } + } +} diff --git a/src/validate/index.ts b/src/validate/index.ts new file mode 100644 index 0000000..17afe36 --- /dev/null +++ b/src/validate/index.ts @@ -0,0 +1,23 @@ +export const required = { required: true, message: '请输入内容' } +export const complexPassword = { + validator: (rule: any, value: string, callback: any) => { + const reg = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[~!@#¥%&*()$])[a-zA-Z\d~!@#¥%&*()$]{6,12}$/ + if (reg.test(value)) { + callback() + } else { + callback(new Error('密码必须由6-12位大小写字母数字和~!@#¥%&*()$组成')) + } + } +} +export const email = { type: 'email', message: '请输入正确的邮箱' } +// 手机 +export const mobile = { + validator: (rule: any, value: string) => { + const reg = /^(13[0123456789]|14[57]|15[012356789]|18[0123456789]|17[0,3,5-8]|166|198|199)[0-9]{8}$/ + if (reg.test(value) || !value) { + return Promise.resolve() + } else { + return Promise.reject('请输入正确的手机号') + } + } +} diff --git a/src/views/about/index.vue b/src/views/about/index.vue new file mode 100644 index 0000000..78cdc27 --- /dev/null +++ b/src/views/about/index.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/views/about/logActive.vue b/src/views/about/logActive.vue new file mode 100644 index 0000000..cc3abbb --- /dev/null +++ b/src/views/about/logActive.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/views/login/JumpPage.vue b/src/views/login/JumpPage.vue new file mode 100644 index 0000000..dc2c88e --- /dev/null +++ b/src/views/login/JumpPage.vue @@ -0,0 +1,169 @@ + + + diff --git a/src/views/login/lockme.vue b/src/views/login/lockme.vue new file mode 100644 index 0000000..016f537 --- /dev/null +++ b/src/views/login/lockme.vue @@ -0,0 +1,221 @@ + + + + + diff --git a/src/views/login/login.vue b/src/views/login/login.vue new file mode 100644 index 0000000..75ea680 --- /dev/null +++ b/src/views/login/login.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/login/sso.vue b/src/views/login/sso.vue new file mode 100644 index 0000000..6934bba --- /dev/null +++ b/src/views/login/sso.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/views/login/tools.ts b/src/views/login/tools.ts new file mode 100644 index 0000000..558bb2c --- /dev/null +++ b/src/views/login/tools.ts @@ -0,0 +1,15 @@ +import { setToken } from 'utils/auth' +import { enablePermissionStorage, menuKey, enableUserStorage, userKey } from '@/config' + +export default function setLoginData(data: any) { + const { accountCategory, manager = {}, servicePermissions } = data + if (enableUserStorage) { + localStorage.setItem(userKey, JSON.stringify({ ...manager, accountCategory })) + } + if (enablePermissionStorage) { + localStorage.setItem(menuKey, JSON.stringify(servicePermissions || [])) + } + localStorage.setItem('buttonData', JSON.stringify(data.buttons || [])) + localStorage.removeItem('lockData') + setToken(data.token) +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..0a87c24 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,8 @@ +/* eslint-disable @typescript-eslint/ban-types */ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..90b1f93 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "allowJs": true, + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "paths": { + "@/*": ["./src/*"], + "services/*": ["src/services/*"], + "utils/*": ["src/utils/*"], + "components/*": ["src/components/*"], + "hooks/*": ["src/hooks/*"], + "filters/*": ["src/filters/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..9137607 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts", "build/*.ts"] +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..4f60711 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,33 @@ +import { defineConfig } from 'vite' +import plugins from './build/plugin' +import css from './build/css' +import server from './build/server' +import path from 'path' + +function resolve(dir: string) { + return path.join(__dirname, dir) +} + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins, + resolve: { + alias: { + '@': resolve('src'), + assets: resolve('src/assets'), + services: resolve('src/services'), + utils: resolve('src/utils'), + interface: resolve('src/interface'), + components: resolve('src/components'), + hooks: resolve('src/hooks'), + filters: resolve('src/filters'), + views: resolve('src/views') + } + }, + server, + css, + build: { + outDir: 'cmc-web', + assetsDir: 'static' + } +})