commit a9cf567b08a4492a15f74081566eb4305fde4a37 Author: Hoshi <1196756653@qq.com> Date: Thu Mar 14 11:36:22 2024 +0800 init diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..9dee646 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 8 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7053c49 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..c9cf5e2 --- /dev/null +++ b/.env.development @@ -0,0 +1,4 @@ +/** + * Created by Zhang Haijun on 2018/8/13. + */ +VUE_APP_BASEURL = '/cop-web/' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..c9cf5e2 --- /dev/null +++ b/.env.production @@ -0,0 +1,4 @@ +/** + * Created by Zhang Haijun on 2018/8/13. + */ +VUE_APP_BASEURL = '/cop-web/' diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..da5b115 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +/src/common/fonts \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..400a293 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + root: true, + env: { + node: true + }, + extends: ['plugin:vue/essential', '@vue/standard', '@vue/typescript'], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-unused-vars': [ + 0, + { + vars: 'all', + args: 'none' + } + ], + semi: 0, + eqeqeq: 0, + 'one-var': 0, + camelcase: 0, + 'no-case-declarations': 0, + 'space-before-function-paren': 0, + 'vue/no-parsing-error': [2, { "x-invalid-end-tag": false }], + '@typescript-eslint/indent': ['error', 2] + }, + parserOptions: { + parser: '@typescript-eslint/parser' + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..020bf42 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +.DS_Store +node_modules +/cop-web +cop-web.tar.gz + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +#yarn3 +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..4142db7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 300, + "tabWidth": 2, + "singleQuote": true, + "semi": false +} diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..40d82e2 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,10 @@ +@Library('jgpl') _ +webPipeline([ + onBuildInstallShell:{-> + return """ + npm install url-loader --userconfig ${env.NPM_CONFIG_USERCONFIG} --no-package-lock + pnpm install -no-frozen-lockfile + pnpm run build || echo 'Ignore build error !!!' + """ + }, +]) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5683dfb --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# ts + +## Project setup +``` +yarn install +``` + +### Compiles and hot-reloads for development +``` +yarn serve +``` + +### Compiles and minifies for production +``` +yarn build +``` + +### Lints and fixes files +``` +yarn lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 0000000..395659d --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,6 @@ +// Generated by 'unplugin-auto-import' +// We suggest you to commit this file into source control +declare global { + const ElButton: typeof import('element-ui/lib/button')['ElButton'] +} +export {} diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..57c1e75 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: ['babel-plugin-transform-vite-meta-glob'], + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/backup/mongodb.json b/backup/mongodb.json new file mode 100644 index 0000000..2ea4ac0 --- /dev/null +++ b/backup/mongodb.json @@ -0,0 +1,37 @@ +{ + "deploy": { + "standalone": { + "icon": "mongodb", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "1" + }, + "cluster": { + "icon": "mongodb-cluster", + "topo": [{ + "role": "mongo_master", + "name": "主节点(1)", + "code": "task.software.mongodb", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主节点主机数量必须为1" + }, + { + "role": "mongo_replicas", + "name": "从节点(2)", + "code": "task.software.mongodb", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "主机数量必须为2" + }, + { + "role": "mongo_arbiter", + "name": "仲裁节点(1)", + "code": "task.software.mongodb", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "仲裁节点主机数量必须为1" + } + ] + } + } +} \ No newline at end of file diff --git a/backup/mysql.json b/backup/mysql.json new file mode 100644 index 0000000..d13d8d9 --- /dev/null +++ b/backup/mysql.json @@ -0,0 +1,91 @@ +{ + "limits": { + "cluster": { + "limits": "^[357]$", + "limits_message": "主机数量必须为3、5或者7" + }, + "standalone": { + "limits": "^[1-9][0-9]*$$", + "limits_message": "主机数量必须大于等于1" + } + }, + "deploy": { + "standalone": { + "icon": "mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^[1-9][0-9]*$", + "limits_message": "主机数量必须大于等于1" + }, + "cluster": { + "icon": "mysql-cluster", + "msv": [{ + "role": "mysql_master", + "name": "主节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主节点主机数量必须为1" + }, + { + "role": "mysql_slave", + "name": "从节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "从节点主机数量必须为1" + } + ], + "msb": [{ + "role": "mysql_master", + "name": "主节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主节点主机数量必须为1" + }, + { + "role": "mysql_slave", + "name": "从节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "从节点主机数量必须为1" + } + ], + "mha": [{ + "role": "mysql_master", + "name": "主节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主机连接数量必须为1" + }, + { + "role": "mysql_slave", + "name": "从节点(2)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "从节点主机连接数量必须为2" + } + ], + "mgr.single": [{ + "role": "mysql_master", + "name": "主节点(1)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主机连接数量必须为1" + }, + { + "role": "mysql_slave", + "name": "从节点(2)", + "code": "task.software.mysql", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "从节点主机连接数量必须为2" + } + ] + } + } +} \ No newline at end of file diff --git a/backup/redis.json b/backup/redis.json new file mode 100644 index 0000000..2d301d1 --- /dev/null +++ b/backup/redis.json @@ -0,0 +1,78 @@ +{ + "limits": { + "standalone": { + "limits": "^[1-9][0-9]*$$", + "limits_message": "主机数量必须大于等于1" + } + }, + "deploy": { + "standalone": { + "icon": "redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^[1-9][0-9]*$", + "limits_message": "主机数量必须大于等于1" + }, + "cluster": { + "icon": "redis-cluster", + "omts": [{ + "role": "redis_master", + "name": "主节点(1)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主节点主机数量必须为1" + }, + { + "role": "redis_slave", + "name": "从节点(2)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "从节点主机数量必须为2" + } + ], + "omtsts": [{ + "role": "redis_master", + "name": "主节点(1)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "主节点主机数量必须为1" + }, + { + "role": "redis_slave", + "name": "从节点(2)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "从节点主机数量必须为2" + }, + { + "role": "redis_sentinel", + "name": "哨兵节点(3)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^3$", + "limits_message": "哨兵节点主机数量必须为3" + } + ], + "tmts": [{ + "role": "redis_master", + "name": "主节点(3)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^3$", + "limits_message": "主机连接数量必须为3" + }, + { + "role": "redis_slave", + "name": "从节点(3)", + "code": "task.software.redis", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^3$", + "limits_message": "从节点主机连接数量必须为3" + } + ] + } + } +} \ No newline at end of file diff --git a/backup/test.json b/backup/test.json new file mode 100644 index 0000000..469a56f --- /dev/null +++ b/backup/test.json @@ -0,0 +1,25 @@ +{ + "deploy": { + "default": "cluster", + "cluster": { + "icon": "iscsi-cluster", + "topo": [{ + "role": "iscsi_servers", + "name": "Server(1)", + "code": "task.software.iscsi", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^1$", + "limits_message": "Server主机数量必须为1" + }, + { + "role": "iscsi_client", + "name": "Client(2)", + "code": "task.software.iscsi", + "depend": "^task[.]resource[.]cvm[.][a-z]{1,20}$", + "limits": "^2$", + "limits_message": "Client主机数量必须为2" + } + ] + } + } +} \ No newline at end of file diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..b5f58dc --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,4 @@ + +module.exports = { + extends: ['@commitlint/config-conventional'] +}; diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 0000000..c79caea --- /dev/null +++ b/components.d.ts @@ -0,0 +1,45 @@ +// generated by unplugin-vue-components +// We suggest you to commit this file into source control +// Read more: https://github.com/vuejs/vue-next/pull/3399 + +declare module 'vue' { + export interface GlobalComponents { + ElAlert: typeof import('element-ui/lib/alert')['default'] + ElBadge: typeof import('element-ui/lib/badge')['default'] + ElButton: typeof import('element-ui/lib/button')['default'] + ElCard: typeof import('element-ui/lib/card')['default'] + ElCascader: typeof import('element-ui/lib/cascader')['default'] + ElCol: typeof import('element-ui/lib/col')['default'] + ElDatePicker: typeof import('element-ui/lib/date-picker')['default'] + ElDialog: typeof import('element-ui/lib/dialog')['default'] + ElDivider: typeof import('element-ui/lib/divider')['default'] + ElDropdown: typeof import('element-ui/lib/dropdown')['default'] + ElDropdownItem: typeof import('element-ui/lib/dropdown-item')['default'] + ElDropdownMenu: typeof import('element-ui/lib/dropdown-menu')['default'] + ElForm: typeof import('element-ui/lib/form')['default'] + ElFormItem: typeof import('element-ui/lib/form-item')['default'] + ElInput: typeof import('element-ui/lib/input')['default'] + ElOption: typeof import('element-ui/lib/option')['default'] + ElPagination: typeof import('element-ui/lib/pagination')['default'] + ElProgress: typeof import('element-ui/lib/progress')['default'] + ElRadio: typeof import('element-ui/lib/radio')['default'] + ElRadioButton: typeof import('element-ui/lib/radio-button')['default'] + ElRadioGroup: typeof import('element-ui/lib/radio-group')['default'] + ElRow: typeof import('element-ui/lib/row')['default'] + ElScrollbar: typeof import('element-ui/lib/scrollbar')['default'] + ElSelect: typeof import('element-ui/lib/select')['default'] + ElStep: typeof import('element-ui/lib/step')['default'] + ElSteps: typeof import('element-ui/lib/steps')['default'] + ElSwitch: typeof import('element-ui/lib/switch')['default'] + ElTable: typeof import('element-ui/lib/table')['default'] + ElTableColumn: typeof import('element-ui/lib/table-column')['default'] + ElTabPane: typeof import('element-ui/lib/tab-pane')['default'] + ElTabs: typeof import('element-ui/lib/tabs')['default'] + ElTag: typeof import('element-ui/lib/tag')['default'] + ElTooltip: typeof import('element-ui/lib/tooltip')['default'] + ElTransfer: typeof import('element-ui/lib/transfer')['default'] + ElUpload: typeof import('element-ui/lib/upload')['default'] + } +} + +export { } diff --git a/package.json b/package.json new file mode 100644 index 0000000..c37f0d7 --- /dev/null +++ b/package.json @@ -0,0 +1,103 @@ +{ + "name": "cop-web", + "version": "5.6.0", + "private": true, + "author": "Haijun Zhang ", + "scripts": { + "dev": "vite", + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "fix": "vue-cli-service lint --fix", + "fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit", + "precommit": "lint-staged", + "upload": "node upload.js", + "deploy": "yarn build && yarn upload" + }, + "dependencies": { + "@vue/composition-api": "^1.0.0-rc.2", + "axios": "^0.21.1", + "clipboard": "^2.0.6", + "cmp-echarts": "2.0.0-5.6-release", + "cmp-element": "1.0.0-5.6-release", + "cmp-graph-editor": "1.0.0-5.6-release", + "cmp-socket": "1.0.0", + "core-js": "^3.3.2", + "crypto-js": "^3.1.9-1", + "dayjs": "^1.10.4", + "element-ui": "2.13.0", + "jquery": "^3.6.0", + "js-cookie": "^2.2.0", + "lodash-es": "^4.17.21", + "mergely": "4.0.15", + "nprogress": "^0.2.0", + "qs": "^6.7.0", + "sortablejs": "^1.8.4", + "vue": "2.6.14", + "vue-class-component": "^7.0.2", + "vue-code-diff": "^0.0.4", + "vue-i18n": "^8.15.0", + "vue-property-decorator": "^8.3.0", + "vue-router": "^3.3.4", + "vue2-animate": "^1.0.4", + "vuex": "^3.0.1" + }, + "devDependencies": { + "@commitlint/cli": "^11.0.0", + "@commitlint/config-conventional": "^11.0.0", + "@types/js-cookie": "^2.2.4", + "@types/lodash-es": "^4.17.5", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.5.3", + "@typescript-eslint/eslint-plugin": "^2.18.0", + "@typescript-eslint/parser": "^2.18.0", + "@vue/cli-plugin-babel": "~4.4.1", + "@vue/cli-plugin-eslint": "~4.4.1", + "@vue/cli-plugin-router": "~4.4.1", + "@vue/cli-plugin-typescript": "~4.4.1", + "@vue/cli-plugin-vuex": "~4.4.1", + "@vue/cli-service": "~4.4.1", + "@vue/eslint-config-standard": "^5.1.0", + "@vue/eslint-config-typescript": "^5.0.1", + "autoprefixer": "9.8.6", + "babel-plugin-transform-vite-meta-glob": "^1.0.3", + "chalk": "^4.1.1", + "compress-webpack-plugin": "^1.0.6", + "cross-env": "^5.2.0", + "eslint": "^6.7.2", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^6.1.2", + "husky": "^1.3.1", + "increase-memory-limit": "^1.0.6", + "lint-staged": "^8.1.5", + "ora": "^5.4.0", + "sass": "^1.19.0", + "sass-loader": "^8.0.0", + "svg-sprite-loader": "^6.0.2", + "typescript": "^4.4.4", + "unplugin-auto-import": "^0.6.1", + "unplugin-vue-components": "^0.17.21", + "vue-template-compiler": "2.6.14", + "webpack-cli": "^4.9.2" + }, + "eslintConfig": { + "parserOptions": { + "parser": "@typescript-eslint/parser" + } + }, + "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..c7ad978 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11220 @@ +lockfileVersion: 5.3 + +specifiers: + '@commitlint/cli': ^11.0.0 + '@commitlint/config-conventional': ^11.0.0 + '@types/js-cookie': ^2.2.4 + '@types/lodash-es': ^4.17.5 + '@types/nprogress': ^0.2.0 + '@types/qs': ^6.5.3 + '@typescript-eslint/eslint-plugin': ^2.18.0 + '@typescript-eslint/parser': ^2.18.0 + '@vue/cli-plugin-babel': ~4.4.1 + '@vue/cli-plugin-eslint': ~4.4.1 + '@vue/cli-plugin-router': ~4.4.1 + '@vue/cli-plugin-typescript': ~4.4.1 + '@vue/cli-plugin-vuex': ~4.4.1 + '@vue/cli-service': ~4.4.1 + '@vue/composition-api': ^1.0.0-rc.2 + '@vue/eslint-config-standard': ^5.1.0 + '@vue/eslint-config-typescript': ^5.0.1 + autoprefixer: 9.8.6 + axios: ^0.21.1 + babel-plugin-transform-vite-meta-glob: ^1.0.3 + chalk: ^4.1.1 + clipboard: ^2.0.6 + cmp-echarts: 2.0.0-5.6-release + cmp-element: 1.0.0-5.6-release + cmp-graph-editor: 1.0.0-5.6-release + cmp-socket: 1.0.0 + compress-webpack-plugin: ^1.0.6 + core-js: ^3.3.2 + cross-env: ^5.2.0 + crypto-js: ^3.1.9-1 + dayjs: ^1.10.4 + element-ui: 2.13.0 + eslint: ^6.7.2 + eslint-plugin-import: ^2.20.1 + eslint-plugin-node: ^11.0.0 + eslint-plugin-promise: ^4.2.1 + eslint-plugin-standard: ^4.0.0 + eslint-plugin-vue: ^6.1.2 + husky: ^1.3.1 + increase-memory-limit: ^1.0.6 + jquery: ^3.6.0 + js-cookie: ^2.2.0 + lint-staged: ^8.1.5 + lodash-es: ^4.17.21 + mergely: 4.0.15 + nprogress: ^0.2.0 + ora: ^5.4.0 + qs: ^6.7.0 + sass: ^1.19.0 + sass-loader: ^8.0.0 + sortablejs: ^1.8.4 + svg-sprite-loader: ^6.0.2 + typescript: ^4.4.4 + unplugin-auto-import: ^0.6.1 + unplugin-vue-components: ^0.17.21 + vue: 2.6.14 + vue-class-component: ^7.0.2 + vue-code-diff: ^0.0.4 + vue-i18n: ^8.15.0 + vue-property-decorator: ^8.3.0 + vue-router: ^3.3.4 + vue-template-compiler: 2.6.14 + vue2-animate: ^1.0.4 + vuex: ^3.0.1 + webpack-cli: ^4.9.2 + +dependencies: + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + axios: 0.21.1 + clipboard: 2.0.8 + cmp-echarts: 2.0.0-5.6-release + cmp-element: 1.0.0-5.6-release + cmp-graph-editor: 1.0.0-5.6-release + cmp-socket: 1.0.0 + core-js: 3.9.1 + crypto-js: 3.3.0 + dayjs: 1.10.4 + element-ui: 2.13.0_vue@2.6.14 + jquery: 3.6.0 + js-cookie: 2.2.1 + lodash-es: 4.17.21 + mergely: 4.0.15 + nprogress: 0.2.0 + qs: 6.10.0 + sortablejs: 1.13.0 + vue: 2.6.14 + vue-class-component: 7.2.6_vue@2.6.14 + vue-code-diff: 0.0.4 + vue-i18n: 8.24.1 + vue-property-decorator: 8.5.1_vue@2.6.14 + vue-router: 3.5.1 + vue2-animate: 1.0.4 + vuex: 3.6.2_vue@2.6.14 + +devDependencies: + '@commitlint/cli': 11.0.0 + '@commitlint/config-conventional': 11.0.0 + '@types/js-cookie': 2.2.6 + '@types/lodash-es': 4.17.5 + '@types/nprogress': 0.2.0 + '@types/qs': 6.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_9b5bef248a900d26c417a000ca8d09ca + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@4.4.4 + '@vue/cli-plugin-babel': 4.4.6_262e909b25749ced6d96ebaa764809cf + '@vue/cli-plugin-eslint': 4.4.6_7942f6781fa7b51ddfaf479ddc6fa90c + '@vue/cli-plugin-router': 4.4.6_@vue+cli-service@4.4.6 + '@vue/cli-plugin-typescript': 4.4.6_ab3788c76a150a0538ece267256a5d60 + '@vue/cli-plugin-vuex': 4.4.6_@vue+cli-service@4.4.6 + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/eslint-config-standard': 5.1.2_09d627da9b841d2aeb5408d614914b66 + '@vue/eslint-config-typescript': 5.1.0_f8b8c2e71389849a7113a6c8d1602ca4 + autoprefixer: 9.8.6 + babel-plugin-transform-vite-meta-glob: 1.0.3 + chalk: 4.1.1 + compress-webpack-plugin: 1.0.6 + cross-env: 5.2.1 + eslint: 6.8.0 + eslint-plugin-import: 2.22.1_eslint@6.8.0 + eslint-plugin-node: 11.1.0_eslint@6.8.0 + eslint-plugin-promise: 4.3.1 + eslint-plugin-standard: 4.1.0_eslint@6.8.0 + eslint-plugin-vue: 6.2.2_eslint@6.8.0 + husky: 1.3.1 + increase-memory-limit: 1.0.7 + lint-staged: 8.2.1 + ora: 5.4.0 + sass: 1.32.8 + sass-loader: 8.0.2_sass@1.32.8 + svg-sprite-loader: 6.0.2 + typescript: 4.4.4 + unplugin-auto-import: 0.6.1 + unplugin-vue-components: 0.17.21_vue@2.6.14 + vue-template-compiler: 2.6.14 + webpack-cli: 4.9.2 + +packages: + + /@ampproject/remapping/2.1.1: + resolution: {integrity: sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.4 + dev: true + + /@antfu/utils/0.4.0: + resolution: {integrity: sha512-gqkpvjkgFUu+s3kP+Ly33OKpo5zvVY3FDFhv5BIb98SncS3KD6DNxPfNDjwHIoyXbz1leWo1j8DtRLZ1D2Jv+Q==} + dependencies: + '@types/throttle-debounce': 2.1.0 + dev: true + + /@antfu/utils/0.5.0: + resolution: {integrity: sha512-MrAQ/MrPSxbh1bBrmwJjORfJymw4IqSHFBXqvxaga3ZdDM+/zokYF8DjyJpSjY2QmpmgQrajDUBJOWrYeARfzA==} + dev: true + + /@antv/x6-vue-shape/1.3.1_42523d19620c772ae264b936f9ca6e20: + resolution: {integrity: sha512-GD5GWRVN2i6RuI6DLPjaTPU1IPxhI9BTUzSwCWY8RgB44VMJhBB6WoEZC3aVUYbPBnuz2ECVrvV3kAhV+eKIyg==} + peerDependencies: + '@antv/x6': '>=1.0.0' + '@vue/composition-api': ^1.0.0-rc.6 + vue: ^2.6.12 || ^3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + '@antv/x6': 1.30.1 + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + vue: 2.6.14 + vue-demi: 0.7.5_754e46187ed83907f5ece86281f7cd16 + dev: false + + /@antv/x6/1.30.1: + resolution: {integrity: sha512-bdiiKqlHZyQiZ6MrpqE18cFNNO2aWt+ZwSkTE3UlxyPmkAr9JxISwkr771/Fwc10LOV1ImlTAUpfXd8fxYJaAQ==} + dependencies: + csstype: 3.0.9 + jquery: 3.6.0 + jquery-mousewheel: 3.1.13 + lodash-es: 4.17.21 + mousetrap: 1.6.5 + utility-types: 3.10.0 + dev: false + + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.16.10 + dev: true + + /@babel/compat-data/7.17.0: + resolution: {integrity: sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.17.2: + resolution: {integrity: sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.1.1 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.0 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helpers': 7.17.2 + '@babel/parser': 7.17.0 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + convert-source-map: 1.7.0 + debug: 4.3.3 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.17.0: + resolution: {integrity: sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/helper-annotate-as-pure/7.12.13: + resolution: {integrity: sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor/7.12.13: + resolution: {integrity: sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==} + dependencies: + '@babel/helper-explode-assignable-expression': 7.13.0 + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-compilation-targets/7.16.7_@babel+core@7.17.2: + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.2 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.19.1 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.14.3_@babel+core@7.17.2: + resolution: {integrity: sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-member-expression-to-functions': 7.13.12 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-replace-supers': 7.14.3 + '@babel/helper-split-export-declaration': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin/7.12.17_@babel+core@7.17.2: + resolution: {integrity: sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-annotate-as-pure': 7.12.13 + regexpu-core: 4.7.1 + dev: true + + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.17.2: + resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/traverse': 7.17.0 + debug: 4.3.3 + lodash.debounce: 4.0.8 + resolve: 1.22.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.16.7: + resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-explode-assignable-expression/7.13.0: + resolution: {integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-function-name/7.16.7: + resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': 7.16.7 + '@babel/template': 7.16.7 + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-get-function-arity/7.16.7: + resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-hoist-variables/7.16.7: + resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-member-expression-to-functions/7.13.12: + resolution: {integrity: sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-module-transforms/7.16.7: + resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.12.13: + resolution: {integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-plugin-utils/7.13.0: + resolution: {integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==} + dev: true + + /@babel/helper-remap-async-to-generator/7.13.0: + resolution: {integrity: sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==} + dependencies: + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-wrap-function': 7.13.0 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers/7.14.3: + resolution: {integrity: sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==} + dependencies: + '@babel/helper-member-expression-to-functions': 7.13.12 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.16.7: + resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers/7.12.1: + resolution: {integrity: sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-split-export-declaration/7.16.7: + resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function/7.13.0: + resolution: {integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==} + dependencies: + '@babel/helper-function-name': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers/7.17.2: + resolution: {integrity: sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.16.10: + resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.17.0: + resolution: {integrity: sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@babel/plugin-proposal-async-generator-functions/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-decorators/7.13.5_@babel+core@7.17.2: + resolution: {integrity: sha512-i0GDfVNuoapwiheevUOuSW67mInqJ8qw7uWfpjNVeHMn143kXblEy/bmL9AdZ/0yf/4BMQeWXezK0tQIvNPqag==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-decorators': 7.12.13_@babel+core@7.17.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-dynamic-import/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-export-namespace-from/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-json-strings/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-logical-assignment-operators/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-numeric-separator/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-object-rest-spread/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.2 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-optional-catch-binding/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-optional-chaining/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.2 + dev: true + + /@babel/plugin-proposal-private-methods/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-class-features-plugin': 7.14.3_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-unicode-property-regex/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.2: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-decorators/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-jsx/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.2: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.2: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.2: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-arrow-functions/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-async-to-generator/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-block-scoping/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-classes/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.14.3 + '@babel/helper-split-export-declaration': 7.16.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-destructuring/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-dotall-regex/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-duplicate-keys/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-exponentiation-operator/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-for-of/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-function-name/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-literals/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-modules-amd/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-simple-access': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs/7.13.8_@babel+core@7.17.2: + resolution: {integrity: sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-identifier': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-transforms': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.17.2 + dev: true + + /@babel/plugin-transform-new-target/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-object-super/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.14.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-property-literals/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-regenerator/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + regenerator-transform: 0.14.5 + dev: true + + /@babel/plugin-transform-reserved-words/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-runtime/7.13.10_@babel+core@7.17.2: + resolution: {integrity: sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.13.0 + babel-plugin-polyfill-corejs2: 0.1.10_@babel+core@7.17.2 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.2 + babel-plugin-polyfill-regenerator: 0.1.6_@babel+core@7.17.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-shorthand-properties/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-spread/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + dev: true + + /@babel/plugin-transform-sticky-regex/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-template-literals/7.13.0_@babel+core@7.17.2: + resolution: {integrity: sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-typeof-symbol/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-unicode-escapes/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/plugin-transform-unicode-regex/7.12.13_@babel+core@7.17.2: + resolution: {integrity: sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + + /@babel/preset-env/7.13.10_@babel+core@7.17.2: + resolution: {integrity: sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.2 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-proposal-async-generator-functions': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-class-properties': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-proposal-dynamic-import': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-export-namespace-from': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-proposal-json-strings': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-logical-assignment-operators': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-numeric-separator': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-proposal-object-rest-spread': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-optional-catch-binding': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-optional-chaining': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-proposal-private-methods': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.2 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-arrow-functions': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-async-to-generator': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-block-scoped-functions': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-block-scoping': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-classes': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-computed-properties': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-destructuring': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-duplicate-keys': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-exponentiation-operator': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-for-of': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-function-name': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-literals': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-member-expression-literals': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-modules-amd': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-modules-commonjs': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-transform-modules-systemjs': 7.13.8_@babel+core@7.17.2 + '@babel/plugin-transform-modules-umd': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-named-capturing-groups-regex': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-new-target': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-object-super': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-property-literals': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-regenerator': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-reserved-words': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-shorthand-properties': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-spread': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-sticky-regex': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-transform-typeof-symbol': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-unicode-escapes': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-unicode-regex': 7.12.13_@babel+core@7.17.2 + '@babel/preset-modules': 0.1.4_@babel+core@7.17.2 + '@babel/types': 7.17.0 + babel-plugin-polyfill-corejs2: 0.1.10_@babel+core@7.17.2 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.2 + babel-plugin-polyfill-regenerator: 0.1.6_@babel+core@7.17.2 + core-js-compat: 3.9.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules/0.1.4_@babel+core@7.17.2: + resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.17.2 + '@babel/types': 7.17.0 + esutils: 2.0.3 + dev: true + + /@babel/runtime/7.13.10: + resolution: {integrity: sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==} + dependencies: + regenerator-runtime: 0.13.7 + dev: true + + /@babel/template/7.16.7: + resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/parser': 7.17.0 + '@babel/types': 7.17.0 + dev: true + + /@babel/traverse/7.17.0: + resolution: {integrity: sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.0 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/parser': 7.17.0 + '@babel/types': 7.17.0 + debug: 4.3.3 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + to-fast-properties: 2.0.0 + dev: true + + /@commitlint/cli/11.0.0: + resolution: {integrity: sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g==} + engines: {node: '>=v10.22.0'} + hasBin: true + dependencies: + '@babel/runtime': 7.13.10 + '@commitlint/format': 11.0.0 + '@commitlint/lint': 11.0.0 + '@commitlint/load': 11.0.0 + '@commitlint/read': 11.0.0 + chalk: 4.1.0 + core-js: 3.9.1 + get-stdin: 8.0.0 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 15.4.1 + dev: true + + /@commitlint/config-conventional/11.0.0: + resolution: {integrity: sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA==} + engines: {node: '>=v10.22.0'} + dependencies: + conventional-changelog-conventionalcommits: 4.5.0 + dev: true + + /@commitlint/ensure/11.0.0: + resolution: {integrity: sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/types': 11.0.0 + lodash: 4.17.21 + dev: true + + /@commitlint/execute-rule/11.0.0: + resolution: {integrity: sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ==} + engines: {node: '>=v10.22.0'} + dev: true + + /@commitlint/format/11.0.0: + resolution: {integrity: sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/types': 11.0.0 + chalk: 4.1.1 + dev: true + + /@commitlint/is-ignored/11.0.0: + resolution: {integrity: sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/types': 11.0.0 + semver: 7.3.2 + dev: true + + /@commitlint/lint/11.0.0: + resolution: {integrity: sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/is-ignored': 11.0.0 + '@commitlint/parse': 11.0.0 + '@commitlint/rules': 11.0.0 + '@commitlint/types': 11.0.0 + dev: true + + /@commitlint/load/11.0.0: + resolution: {integrity: sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/execute-rule': 11.0.0 + '@commitlint/resolve-extends': 11.0.0 + '@commitlint/types': 11.0.0 + chalk: 4.1.0 + cosmiconfig: 7.0.0 + lodash: 4.17.21 + resolve-from: 5.0.0 + dev: true + + /@commitlint/message/11.0.0: + resolution: {integrity: sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA==} + engines: {node: '>=v10.22.0'} + dev: true + + /@commitlint/parse/11.0.0: + resolution: {integrity: sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A==} + engines: {node: '>=v10.22.0'} + dependencies: + conventional-changelog-angular: 5.0.12 + conventional-commits-parser: 3.2.1 + dev: true + + /@commitlint/read/11.0.0: + resolution: {integrity: sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/top-level': 11.0.0 + fs-extra: 9.1.0 + git-raw-commits: 2.0.10 + dev: true + + /@commitlint/resolve-extends/11.0.0: + resolution: {integrity: sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw==} + engines: {node: '>=v10.22.0'} + dependencies: + import-fresh: 3.3.0 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true + + /@commitlint/rules/11.0.0: + resolution: {integrity: sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA==} + engines: {node: '>=v10.22.0'} + dependencies: + '@commitlint/ensure': 11.0.0 + '@commitlint/message': 11.0.0 + '@commitlint/to-lines': 11.0.0 + '@commitlint/types': 11.0.0 + dev: true + + /@commitlint/to-lines/11.0.0: + resolution: {integrity: sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw==} + engines: {node: '>=v10.22.0'} + dev: true + + /@commitlint/top-level/11.0.0: + resolution: {integrity: sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA==} + engines: {node: '>=v10.22.0'} + dependencies: + find-up: 5.0.0 + dev: true + + /@commitlint/types/11.0.0: + resolution: {integrity: sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ==} + engines: {node: '>=v10.22.0'} + dev: true + + /@discoveryjs/json-ext/0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@hapi/address/2.1.4: + resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==} + deprecated: Moved to 'npm install @sideway/address' + dev: true + + /@hapi/bourne/1.3.2: + resolution: {integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==} + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + + /@hapi/hoek/8.5.1: + resolution: {integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==} + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + + /@hapi/joi/15.1.1: + resolution: {integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==} + deprecated: Switch to 'npm install joi' + dependencies: + '@hapi/address': 2.1.4 + '@hapi/bourne': 1.3.2 + '@hapi/hoek': 8.5.1 + '@hapi/topo': 3.1.6 + dev: true + + /@hapi/topo/3.1.6: + resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==} + deprecated: This version has been deprecated and is no longer supported or maintained + dependencies: + '@hapi/hoek': 8.5.1 + dev: true + + /@intervolga/optimize-cssnano-plugin/1.0.6_webpack@4.46.0: + resolution: {integrity: sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==} + peerDependencies: + webpack: ^4.0.0 + dependencies: + cssnano: 4.1.10 + cssnano-preset-default: 4.0.7 + postcss: 7.0.35 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /@jridgewell/resolve-uri/3.0.5: + resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.11: + resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} + dev: true + + /@jridgewell/trace-mapping/0.3.4: + resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} + dependencies: + '@jridgewell/resolve-uri': 3.0.5 + '@jridgewell/sourcemap-codec': 1.4.11 + dev: true + + /@mrmlnc/readdir-enhanced/2.2.1: + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} + engines: {node: '>=4'} + dependencies: + call-me-maybe: 1.0.1 + glob-to-regexp: 0.3.0 + 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/1.1.3: + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} + engines: {node: '>= 6'} + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@rollup/pluginutils/4.1.2: + resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.2.3 + dev: true + + /@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.6: + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + dependencies: + any-observable: 0.3.0 + rxjs: 6.6.6 + dev: true + + /@soda/friendly-errors-webpack-plugin/1.8.0_webpack@4.46.0: + resolution: {integrity: sha512-RLotfx6k1+nfLacwNCenj7VnTMPxVwYKoGOcffMFoJDKM8tXzBiCN0hMHFJNnoAojduYAsxuiMm0EOMixgiRow==} + engines: {node: '>=8.0.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + chalk: 2.4.2 + error-stack-parser: 2.0.6 + string-width: 2.1.1 + strip-ansi: 5.2.0 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /@soda/get-current-script/1.0.2: + resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==} + dev: true + + /@types/babel__core/7.1.18: + resolution: {integrity: sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==} + dependencies: + '@babel/parser': 7.17.0 + '@babel/types': 7.17.0 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.14.2 + dev: true + + /@types/babel__generator/7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.17.0 + '@babel/types': 7.17.0 + dev: true + + /@types/babel__traverse/7.14.2: + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@types/eslint-visitor-keys/1.0.0: + resolution: {integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==} + dev: true + + /@types/glob/7.1.3: + resolution: {integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==} + dependencies: + '@types/minimatch': 3.0.3 + '@types/node': 14.14.35 + dev: true + + /@types/js-cookie/2.2.6: + resolution: {integrity: sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==} + dev: true + + /@types/json-schema/7.0.7: + resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} + dev: true + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash-es/4.17.5: + resolution: {integrity: sha512-SHBoI8/0aoMQWAgUHMQ599VM6ZiSKg8sh/0cFqqlQQMyY9uEplc0ULU5yQNzcvdR4ZKa0ey8+vFmahuRbOCT1A==} + dependencies: + '@types/lodash': 4.14.170 + dev: true + + /@types/lodash/4.14.170: + resolution: {integrity: sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==} + dev: true + + /@types/minimatch/3.0.3: + resolution: {integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==} + dev: true + + /@types/minimist/1.2.1: + resolution: {integrity: sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==} + dev: true + + /@types/node/14.14.35: + resolution: {integrity: sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==} + dev: true + + /@types/normalize-package-data/2.4.0: + resolution: {integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==} + 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/q/1.5.4: + resolution: {integrity: sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==} + dev: true + + /@types/qs/6.9.6: + resolution: {integrity: sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==} + dev: true + + /@types/throttle-debounce/2.1.0: + resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} + dev: true + + /@types/webpack-env/1.16.0: + resolution: {integrity: sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw==} + dev: true + + /@typescript-eslint/eslint-plugin/2.34.0_9b5bef248a900d26c417a000ca8d09ca: + resolution: {integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + peerDependencies: + '@typescript-eslint/parser': ^2.0.0 + eslint: ^5.0.0 || ^6.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@4.4.4 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@4.4.4 + eslint: 6.8.0 + functional-red-black-tree: 1.0.1 + regexpp: 3.1.0 + tsutils: 3.21.0_typescript@4.4.4 + typescript: 4.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@4.4.4: + resolution: {integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@4.4.4 + eslint: 6.8.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@4.4.4: + resolution: {integrity: sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@types/eslint-visitor-keys': 1.0.0 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@4.4.4 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@4.4.4 + eslint: 6.8.0 + eslint-visitor-keys: 1.3.0 + typescript: 4.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree/2.34.0_typescript@4.4.4: + resolution: {integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + debug: 4.3.3 + eslint-visitor-keys: 1.3.0 + glob: 7.1.6 + is-glob: 4.0.1 + lodash: 4.17.21 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.4.4 + typescript: 4.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/babel-helper-vue-jsx-merge-props/1.2.1: + resolution: {integrity: sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==} + dev: true + + /@vue/babel-helper-vue-transform-on/1.0.2: + resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==} + dev: true + + /@vue/babel-plugin-jsx/1.0.3_@babel+core@7.17.2: + resolution: {integrity: sha512-+52ZQFmrM0yh61dQlgwQlfHZXmYbswbQEL25SOSt9QkjegAdfIGu87oELw0l8H6cuJYazZCiNjPR9eU++ZIbxg==} + dependencies: + '@babel/helper-module-imports': 7.16.7 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.0 + '@babel/types': 7.17.0 + '@vue/babel-helper-vue-transform-on': 1.0.2 + camelcase: 6.2.0 + html-tags: 3.1.0 + svg-tags: 1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.17.2: + resolution: {integrity: sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-module-imports': 7.16.7 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 + html-tags: 2.0.0 + lodash.kebabcase: 4.1.1 + svg-tags: 1.0.0 + dev: true + + /@vue/babel-preset-app/4.5.12_vue@2.6.14: + resolution: {integrity: sha512-8q67ORQ9O0Ms0nlqsXTVhaBefRBaLrzPxOewAZhdcO7onHwcO5/wRdWtHhZgfpCZlhY7NogkU16z3WnorSSkEA==} + peerDependencies: + vue: ^2 || ^3.0.0-0 + peerDependenciesMeta: + core-js: + optional: true + vue: + optional: true + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.2 + '@babel/helper-module-imports': 7.16.7 + '@babel/plugin-proposal-class-properties': 7.13.0_@babel+core@7.17.2 + '@babel/plugin-proposal-decorators': 7.13.5_@babel+core@7.17.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + '@babel/plugin-transform-runtime': 7.13.10_@babel+core@7.17.2 + '@babel/preset-env': 7.13.10_@babel+core@7.17.2 + '@babel/runtime': 7.13.10 + '@vue/babel-plugin-jsx': 1.0.3_@babel+core@7.17.2 + '@vue/babel-preset-jsx': 1.2.4_@babel+core@7.17.2 + babel-plugin-dynamic-import-node: 2.3.3 + core-js: 3.9.1 + core-js-compat: 3.9.1 + semver: 6.3.0 + vue: 2.6.14 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/babel-preset-jsx/1.2.4_@babel+core@7.17.2: + resolution: {integrity: sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 + '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.17.2 + '@vue/babel-sugar-composition-api-inject-h': 1.2.1_@babel+core@7.17.2 + '@vue/babel-sugar-composition-api-render-instance': 1.2.4_@babel+core@7.17.2 + '@vue/babel-sugar-functional-vue': 1.2.2_@babel+core@7.17.2 + '@vue/babel-sugar-inject-h': 1.2.2_@babel+core@7.17.2 + '@vue/babel-sugar-v-model': 1.2.3_@babel+core@7.17.2 + '@vue/babel-sugar-v-on': 1.2.3_@babel+core@7.17.2 + dev: true + + /@vue/babel-sugar-composition-api-inject-h/1.2.1_@babel+core@7.17.2: + resolution: {integrity: sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + dev: true + + /@vue/babel-sugar-composition-api-render-instance/1.2.4_@babel+core@7.17.2: + resolution: {integrity: sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + dev: true + + /@vue/babel-sugar-functional-vue/1.2.2_@babel+core@7.17.2: + resolution: {integrity: sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + dev: true + + /@vue/babel-sugar-inject-h/1.2.2_@babel+core@7.17.2: + resolution: {integrity: sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + dev: true + + /@vue/babel-sugar-v-model/1.2.3_@babel+core@7.17.2: + resolution: {integrity: sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 + '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.17.2 + camelcase: 5.3.1 + html-tags: 2.0.0 + svg-tags: 1.0.0 + dev: true + + /@vue/babel-sugar-v-on/1.2.3_@babel+core@7.17.2: + resolution: {integrity: sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.17.2 + '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.17.2 + camelcase: 5.3.1 + dev: true + + /@vue/cli-overlay/4.5.12: + resolution: {integrity: sha512-dCN0RzVpA8fp+MfjuVBROgM483MPObAb/je+APE/JhpCJyPQORYQEvNpmaorpN+9Cp6mrESVSzhh0qD4SFrlzg==} + dev: true + + /@vue/cli-plugin-babel/4.4.6_262e909b25749ced6d96ebaa764809cf: + resolution: {integrity: sha512-9cX9mN+4DIbcqw3rV6UBOA0t5zikIkrBLQloUzsOBOu5Xb7/UoD7inInFj7bnyHUflr5LqbdWJ+etCQcWAIIXA==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@vue/babel-preset-app': 4.5.12_vue@2.6.14 + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/cli-shared-utils': 4.5.12 + babel-loader: 8.2.2_60b7ed408fec1293d95f86d9ceaa88ca + cache-loader: 4.1.0_webpack@4.46.0 + thread-loader: 2.1.3_webpack@4.46.0 + webpack: 4.46.0_webpack-cli@4.9.2 + transitivePeerDependencies: + - supports-color + - vue + - webpack-cli + - webpack-command + dev: true + + /@vue/cli-plugin-eslint/4.4.6_7942f6781fa7b51ddfaf479ddc6fa90c: + resolution: {integrity: sha512-3a9rVpOKPQsDgAlRkhmBMHboGobivG/47BbQGE66Z8YJxrgF/AWikP3Jy67SmxtszRkyiWfw4aJFRV9r3MzffQ==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + eslint: '>= 1.6.0' + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/cli-shared-utils': 4.5.12 + eslint: 6.8.0 + eslint-loader: 2.2.1_eslint@6.8.0+webpack@4.46.0 + globby: 9.2.0 + inquirer: 7.3.3 + webpack: 4.46.0_webpack-cli@4.9.2 + yorkie: 2.0.0 + transitivePeerDependencies: + - webpack-cli + - webpack-command + dev: true + + /@vue/cli-plugin-router/4.4.6_@vue+cli-service@4.4.6: + resolution: {integrity: sha512-TkLdn0ZYo3zgn78Rk8doPlR+4UkGjGW2R1eGEaZEkue/mw2VhUWtTk9cKLZaYrw0eY8Ro/j+OV6mD+scyrairg==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/cli-shared-utils': 4.5.12 + dev: true + + /@vue/cli-plugin-router/4.5.12_@vue+cli-service@4.4.6: + resolution: {integrity: sha512-DYNz5AA3W7Ewt3aaiOLGdYFt4MX4w/HTEtep+kPzP9S9tAknzyoIJXkaYzhwu8ArpEYwhWgtuCcDZ8hR6++DbA==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/cli-shared-utils': 4.5.12 + dev: true + + /@vue/cli-plugin-typescript/4.4.6_ab3788c76a150a0538ece267256a5d60: + resolution: {integrity: sha512-FIIx9yqm19M62+2X4QwTrnlePdghsKnFbBPCHJawx3ULx30B11fL7X0uwmcq+kEAAHwAGBI6QyU7dgwPDRUCOw==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + typescript: '>=2' + dependencies: + '@types/webpack-env': 1.16.0 + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + '@vue/cli-shared-utils': 4.5.12 + cache-loader: 4.1.0_webpack@4.46.0 + fork-ts-checker-webpack-plugin: 3.1.1 + globby: 9.2.0 + thread-loader: 2.1.3_webpack@4.46.0 + ts-loader: 6.2.2_typescript@4.4.4 + tslint: 5.20.1_typescript@4.4.4 + typescript: 4.4.4 + webpack: 4.46.0_webpack-cli@4.9.2 + yorkie: 2.0.0 + transitivePeerDependencies: + - webpack-cli + - webpack-command + dev: true + + /@vue/cli-plugin-vuex/4.4.6_@vue+cli-service@4.4.6: + resolution: {integrity: sha512-Ho0YzUivn8BLPqFoFypntR8CMTEXYYHVr0GdnZW99XL+DbGw75f+tJfnrV9UFHDTfvZt7uewKiXDMlrzQ0l3Ug==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + dev: true + + /@vue/cli-plugin-vuex/4.5.12_@vue+cli-service@4.4.6: + resolution: {integrity: sha512-STgbvNv/3iHAKArc18b/qjN7RX1FTrfxPeHH26GOr/A8lJes7+CSluZZ8E5R7Zr/vL0zOqOkUVDAjFXVf4zWQA==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + dev: true + + /@vue/cli-service/4.4.6_21ebe8d0492bbd673057f6849a86c496: + resolution: {integrity: sha512-k5OFGh2NnvRymCyq9DfBiNJvECUuun3pl5KMm3557IZyA5E5csv+RHoSW3dX8HHe0zXq18g52VswP1llvR9POw==} + engines: {node: '>=8'} + hasBin: true + peerDependencies: + less-loader: '*' + pug-plain-loader: '*' + raw-loader: '*' + sass-loader: '*' + stylus-loader: '*' + vue-template-compiler: ^2.0.0 + peerDependenciesMeta: + less-loader: + optional: true + pug-plain-loader: + optional: true + raw-loader: + optional: true + sass-loader: + optional: true + stylus-loader: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@intervolga/optimize-cssnano-plugin': 1.0.6_webpack@4.46.0 + '@soda/friendly-errors-webpack-plugin': 1.8.0_webpack@4.46.0 + '@soda/get-current-script': 1.0.2 + '@vue/cli-overlay': 4.5.12 + '@vue/cli-plugin-router': 4.5.12_@vue+cli-service@4.4.6 + '@vue/cli-plugin-vuex': 4.5.12_@vue+cli-service@4.4.6 + '@vue/cli-shared-utils': 4.5.12 + '@vue/component-compiler-utils': 3.2.0 + '@vue/preload-webpack-plugin': 1.1.2_502c618fc8a7d35df07e93275324a2d0 + '@vue/web-component-wrapper': 1.3.0 + acorn: 7.4.1 + acorn-walk: 7.2.0 + address: 1.1.2 + autoprefixer: 9.8.6 + browserslist: 4.19.1 + cache-loader: 4.1.0_webpack@4.46.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + cli-highlight: 2.1.10 + clipboardy: 2.3.0 + cliui: 6.0.0 + copy-webpack-plugin: 5.1.2_webpack@4.46.0 + css-loader: 3.6.0_webpack@4.46.0 + cssnano: 4.1.10 + debug: 4.3.3 + default-gateway: 5.0.5 + dotenv: 8.2.0 + dotenv-expand: 5.1.0 + file-loader: 4.3.0_webpack@4.46.0 + fs-extra: 7.0.1 + globby: 9.2.0 + hash-sum: 2.0.0 + html-webpack-plugin: 3.2.0_webpack@4.46.0 + launch-editor-middleware: 2.2.1 + lodash.defaultsdeep: 4.6.1 + lodash.mapvalues: 4.6.0 + lodash.transform: 4.6.0 + mini-css-extract-plugin: 0.9.0_webpack@4.46.0 + minimist: 1.2.5 + pnp-webpack-plugin: 1.6.4_typescript@4.4.4 + portfinder: 1.0.28 + postcss-loader: 3.0.0 + sass-loader: 8.0.2_sass@1.32.8 + ssri: 7.1.0 + terser-webpack-plugin: 2.3.8_webpack@4.46.0 + thread-loader: 2.1.3_webpack@4.46.0 + url-loader: 2.3.0_file-loader@4.3.0+webpack@4.46.0 + vue-loader: 15.9.6_679359cdb69c218f2f8f476b2ba08796 + vue-style-loader: 4.1.3 + vue-template-compiler: 2.6.14 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-bundle-analyzer: 3.9.0 + webpack-chain: 6.5.1 + webpack-dev-server: 3.11.2_webpack-cli@4.9.2+webpack@4.46.0 + webpack-merge: 4.2.2 + transitivePeerDependencies: + - supports-color + - typescript + - webpack-cli + - webpack-command + dev: true + + /@vue/cli-shared-utils/4.5.12: + resolution: {integrity: sha512-qnIQPJ4XckMoqYh9fJ0Y91QKMIb4Hiibrm9+k4E15QHpk5RaokuOpf10SsOr2NLPCXSWsHOLo3hduZSwHPGY/Q==} + dependencies: + '@hapi/joi': 15.1.1 + chalk: 2.4.2 + execa: 1.0.0 + launch-editor: 2.2.1 + lru-cache: 5.1.1 + node-ipc: 9.1.4 + open: 6.4.0 + ora: 3.4.0 + read-pkg: 5.2.0 + request: 2.88.2 + semver: 6.3.0 + strip-ansi: 6.0.1 + dev: true + + /@vue/component-compiler-utils/3.2.0: + resolution: {integrity: sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==} + dependencies: + consolidate: 0.15.1 + hash-sum: 1.0.2 + lru-cache: 4.1.5 + merge-source-map: 1.1.0 + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + source-map: 0.6.1 + vue-template-es2015-compiler: 1.9.1 + optionalDependencies: + prettier: 1.19.1 + dev: true + + /@vue/composition-api/1.0.0-rc.6_vue@2.6.14: + resolution: {integrity: sha512-M3jsyDBozQFqAPYdM4GCoVZEljIHsTVdcq5fZx9axpKz9ChIlQngxNf1ziLVaJvWX7T+MO1rVTEx6Xjgg/gUcQ==} + peerDependencies: + vue: '>= 2.5 < 3' + dependencies: + tslib: 2.3.0 + vue: 2.6.14 + dev: false + + /@vue/eslint-config-standard/5.1.2_09d627da9b841d2aeb5408d614914b66: + resolution: {integrity: sha512-FTz0k77dIrj9r3xskt9jsZyL/YprrLiPRf4m3k7G6dZ5PKuD6OPqYrHR9eduUmHDFpTlRgFpTVQrq+1el9k3QQ==} + peerDependencies: + '@vue/cli-service': ^3.0.0 || ^4.0.0-0 + eslint: '>=6.2.2' + eslint-plugin-import: '>= 2.18.0' + eslint-plugin-node: '>= 9.1.0' + eslint-plugin-promise: '>= 4.2.1' + eslint-plugin-standard: '>= 4.0.0' + eslint-plugin-vue: '>= 6.1.2' + peerDependenciesMeta: + '@vue/cli-service': + optional: true + dependencies: + '@vue/cli-service': 4.4.6_21ebe8d0492bbd673057f6849a86c496 + eslint: 6.8.0 + eslint-config-standard: 14.1.1_86016a687bb9a3fc2cd0de7a3b1aede7 + eslint-import-resolver-node: 0.3.4 + eslint-import-resolver-webpack: 0.12.2_eslint-plugin-import@2.22.1 + eslint-plugin-import: 2.22.1_eslint@6.8.0 + eslint-plugin-node: 11.1.0_eslint@6.8.0 + eslint-plugin-promise: 4.3.1 + eslint-plugin-standard: 4.1.0_eslint@6.8.0 + eslint-plugin-vue: 6.2.2_eslint@6.8.0 + transitivePeerDependencies: + - webpack + dev: true + + /@vue/eslint-config-typescript/5.1.0_f8b8c2e71389849a7113a6c8d1602ca4: + resolution: {integrity: sha512-wFAdPMWegKZOdbQBEWV4/KbOKuX/6Q5db3304kiWNBK+6P7+CoMrsbaKzJFjuAZF7fQR2fJtZT9ciGWVVT//vw==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^2.7.0 + '@typescript-eslint/parser': ^2.7.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint-plugin-vue: ^5.2.3 || ^6.0.0 || ^7.0.0-0 + dependencies: + '@typescript-eslint/eslint-plugin': 2.34.0_9b5bef248a900d26c417a000ca8d09ca + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@4.4.4 + eslint: 6.8.0 + eslint-plugin-vue: 6.2.2_eslint@6.8.0 + vue-eslint-parser: 7.6.0_eslint@6.8.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/preload-webpack-plugin/1.1.2_502c618fc8a7d35df07e93275324a2d0: + resolution: {integrity: sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==} + engines: {node: '>=6.0.0'} + peerDependencies: + html-webpack-plugin: '>=2.26.0' + webpack: '>=4.0.0' + dependencies: + html-webpack-plugin: 3.2.0_webpack@4.46.0 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /@vue/web-component-wrapper/1.3.0: + resolution: {integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==} + dev: true + + /@webassemblyjs/ast/1.9.0: + resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} + dependencies: + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + dev: true + + /@webassemblyjs/floating-point-hex-parser/1.9.0: + resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} + dev: true + + /@webassemblyjs/helper-api-error/1.9.0: + resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} + dev: true + + /@webassemblyjs/helper-buffer/1.9.0: + resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} + dev: true + + /@webassemblyjs/helper-code-frame/1.9.0: + resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==} + dependencies: + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/helper-fsm/1.9.0: + resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==} + dev: true + + /@webassemblyjs/helper-module-context/1.9.0: + resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + dev: true + + /@webassemblyjs/helper-wasm-bytecode/1.9.0: + resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} + dev: true + + /@webassemblyjs/helper-wasm-section/1.9.0: + resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + dev: true + + /@webassemblyjs/ieee754/1.9.0: + resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128/1.9.0: + resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8/1.9.0: + resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} + dev: true + + /@webassemblyjs/wasm-edit/1.9.0: + resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/helper-wasm-section': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-opt': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/wasm-gen/1.9.0: + resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wasm-opt/1.9.0: + resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + dev: true + + /@webassemblyjs/wasm-parser/1.9.0: + resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wast-parser/1.9.0: + resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-code-frame': 1.9.0 + '@webassemblyjs/helper-fsm': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/wast-printer/1.9.0: + resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@webpack-cli/configtest/1.1.1_webpack-cli@4.9.2: + resolution: {integrity: sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + dependencies: + webpack-cli: 4.9.2 + dev: true + + /@webpack-cli/info/1.4.1_webpack-cli@4.9.2: + resolution: {integrity: sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==} + peerDependencies: + webpack-cli: 4.x.x + dependencies: + envinfo: 7.8.1 + webpack-cli: 4.9.2 + dev: true + + /@webpack-cli/serve/1.6.1_webpack-cli@4.9.2: + resolution: {integrity: sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.9.2 + dev: true + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /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 + + /abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: false + + /accepts/1.3.7: + resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.29 + negotiator: 0.6.2 + dev: true + + /acorn-jsx/5.3.1_acorn@7.4.1: + resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /address/1.1.2: + resolution: {integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==} + engines: {node: '>= 0.12.0'} + dev: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv-errors/1.0.1_ajv@6.12.6: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + 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 + + /alphanum-sort/1.0.2: + resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==} + dev: true + + /ansi-colors/3.2.4: + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} + dev: true + + /ansi-escapes/3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + dev: true + + /ansi-escapes/4.3.1: + resolution: {integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.11.0 + dev: true + + /ansi-html/0.0.7: + resolution: {integrity: sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==} + engines: {'0': node >= 0.8.0} + hasBin: true + 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/3.0.0: + resolution: {integrity: sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==} + engines: {node: '>=4'} + dev: true + + /ansi-regex/4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} + engines: {node: '>=6'} + 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 + + /any-observable/0.3.0: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + dev: true + + /any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch/2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + dev: true + + /anymatch/3.1.1: + resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.3 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.3 + dev: true + + /aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true + + /arch/2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: true + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + 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-find/1.0.0: + resolution: {integrity: sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==} + dev: true + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true + + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: true + + /array-ify/1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-includes/3.1.3: + resolution: {integrity: sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + get-intrinsic: 1.1.1 + is-string: 1.0.5 + dev: true + + /array-union/1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: true + + /array-uniq/1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.flat/1.2.4: + resolution: {integrity: sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + dev: true + + /arrify/1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + + /asn1/0.2.4: + resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /assert-plus/1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: true + + /assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /astral-regex/1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: true + + /async-each/1.0.3: + resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} + dev: true + + /async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: true + + /async-validator/1.8.5: + resolution: {integrity: sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==} + dependencies: + babel-runtime: 6.26.0 + dev: false + + /async/2.4.1: + resolution: {integrity: sha512-l4FGEG4ckq1nC3PSqULdowskm65HBAQfHPG4XH7VLRq0ZKsCWkcfLjVymfLrloqgrvijJrft/mPftclykhTA7w==} + dependencies: + lodash: 4.17.21 + dev: true + + /async/2.6.3: + resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==} + dependencies: + lodash: 4.17.21 + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /autoprefixer/9.8.6: + resolution: {integrity: sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==} + hasBin: true + dependencies: + browserslist: 4.19.1 + caniuse-lite: 1.0.30001312 + colorette: 1.2.2 + normalize-range: 0.1.2 + num2fraction: 1.2.2 + postcss: 7.0.35 + postcss-value-parser: 4.1.0 + dev: true + + /aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true + + /aws4/1.11.0: + resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} + dev: true + + /axios/0.21.1: + resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} + dependencies: + follow-redirects: 1.13.3 + transitivePeerDependencies: + - debug + dev: false + + /babel-code-frame/6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: true + + /babel-helper-vue-jsx-merge-props/2.0.3: + resolution: {integrity: sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==} + dev: false + + /babel-loader/8.2.2_60b7ed408fec1293d95f86d9ceaa88ca: + resolution: {integrity: sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.17.2 + find-cache-dir: 3.3.1 + loader-utils: 1.4.0 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /babel-plugin-dynamic-import-node/2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} + dependencies: + object.assign: 4.1.2 + dev: true + + /babel-plugin-polyfill-corejs2/0.1.10_@babel+core@7.17.2: + resolution: {integrity: sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.2 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.17.2: + resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.2 + core-js-compat: 3.9.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator/0.1.6_@babel+core@7.17.2: + resolution: {integrity: sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.2 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-transform-vite-meta-glob/1.0.3: + resolution: {integrity: sha512-JW3VnwUjJqpj0FM0vJFxrGdxSBcHOa0j5YMvvtXYPmFshroq53nbK9dqRETgjXlMrfIz0oU/6ki+u1GdVWdNHA==} + dependencies: + '@babel/runtime': 7.13.10 + '@types/babel__core': 7.1.18 + glob: 7.1.6 + dev: true + + /babel-runtime/6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: false + + /balanced-match/1.0.0: + resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==} + 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 + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: true + + /bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: true + + /bfj/6.1.2: + resolution: {integrity: sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==} + engines: {node: '>= 6.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 8.0.3 + hoopy: 0.1.4 + tryer: 1.0.1 + dev: true + + /big.js/3.2.0: + resolution: {integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==} + dev: true + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + requiresBuild: true + dependencies: + file-uri-to-path: 1.0.0 + dev: true + optional: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /bn.js/5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + dev: true + + /body-parser/1.19.0: + resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.0 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.7.0 + raw-body: 2.4.0 + type-is: 1.6.18 + dev: true + + /bonjour/3.5.0: + resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} + dependencies: + array-flatten: 2.1.2 + deep-equal: 1.1.1 + dns-equal: 1.0.0 + dns-txt: 2.0.2 + multicast-dns: 6.2.3 + multicast-dns-service-types: 1.1.0 + 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.0 + concat-map: 0.0.1 + 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.3 + 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 + + /brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.0 + randombytes: 2.1.0 + dev: true + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + + /browserslist/4.19.1: + resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001312 + electron-to-chromium: 1.4.68 + escalade: 3.1.1 + node-releases: 2.0.2 + picocolors: 1.0.0 + dev: true + + /buffer-from/1.1.1: + resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} + dev: true + + /buffer-indexof/1.1.1: + resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} + dev: true + + /buffer-json/2.0.0: + resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==} + dev: true + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-modules/1.1.1: + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} + engines: {node: '>=0.10.0'} + dev: true + + /builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + + /bytes/3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: true + + /bytes/3.1.0: + resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + engines: {node: '>= 0.8'} + dev: true + + /cacache/12.0.4: + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==} + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + figgy-pudding: 3.5.2 + glob: 7.1.6 + graceful-fs: 4.2.9 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + mississippi: 3.0.0 + mkdirp: 0.5.5 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1 + rimraf: 2.7.1 + ssri: 6.0.1 + unique-filename: 1.1.1 + y18n: 4.0.1 + dev: true + + /cacache/13.0.1: + resolution: {integrity: sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==} + engines: {node: '>= 8'} + dependencies: + chownr: 1.1.4 + figgy-pudding: 3.5.2 + fs-minipass: 2.1.0 + glob: 7.1.6 + graceful-fs: 4.2.9 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + minipass: 3.1.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 0.5.5 + move-concurrently: 1.0.1 + p-map: 3.0.0 + promise-inflight: 1.0.1 + rimraf: 2.7.1 + ssri: 7.1.0 + unique-filename: 1.1.1 + 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 + + /cache-loader/4.1.0_webpack@4.46.0: + resolution: {integrity: sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + buffer-json: 2.0.0 + find-cache-dir: 3.3.1 + loader-utils: 1.4.0 + mkdirp: 0.5.5 + neo-async: 2.6.2 + schema-utils: 2.7.1 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + + /call-me-maybe/1.0.1: + resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==} + dev: true + + /caller-callsite/2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: true + + /caller-path/2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: true + + /callsites/2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case/3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + 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.2.0 + quick-lru: 4.0.1 + dev: true + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.2.0: + resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + engines: {node: '>=10'} + dev: true + + /caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.19.1 + caniuse-lite: 1.0.30001312 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite/1.0.30001312: + resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} + dev: true + + /case-sensitive-paths-webpack-plugin/2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: true + + /caseless/0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + 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.0: + resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk/4.1.1: + resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chardet/0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /check-types/8.0.3: + resolution: {integrity: sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==} + dev: true + + /chokidar/2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0 + async-each: 1.0.3 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.1 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + dev: true + + /chokidar/3.5.1: + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.1 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.5.0 + optionalDependencies: + fsevents: 2.3.2 + 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.1 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chrome-trace-event/1.0.2: + resolution: {integrity: sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==} + engines: {node: '>=6.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /ci-info/1.6.0: + resolution: {integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==} + dev: true + + /ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + 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 + + /clean-css/4.2.3: + resolution: {integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-cursor/2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + dependencies: + restore-cursor: 2.0.0 + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-highlight/2.1.10: + resolution: {integrity: sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: 4.1.1 + highlight.js: 10.7.1 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + dev: true + + /cli-spinners/2.6.0: + resolution: {integrity: sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==} + engines: {node: '>=6'} + dev: true + + /cli-truncate/0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + dev: true + + /cli-width/3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /clipboard/2.0.8: + resolution: {integrity: sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==} + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + dev: false + + /clipboardy/2.3.0: + resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} + engines: {node: '>=8'} + dependencies: + arch: 2.2.0 + execa: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /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-deep/4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /clone/1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /cmp-echarts/2.0.0-5.6-release: + resolution: {integrity: sha512-xq2EuFiOQWTIWO9RVqVrfiruveZC0aaQOcAhhXjV6KJj9Ja9NihBnrBEsPe54r+Ah35pXKT5jnVtnaz8V2kNoA==} + dependencies: + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + core-js: 3.9.1 + echarts: 5.3.1 + echarts-liquidfill: 3.1.0_echarts@5.3.1 + element-ui: 2.15.6_vue@2.6.14 + lodash-es: 4.17.21 + vue: 2.6.14 + vue-router: 3.5.1 + dev: false + + /cmp-element/1.0.0-5.6-release: + resolution: {integrity: sha512-zVv228zaO5n5iI3FOSysJnnEur2sJ2GaHfPhoXY8vWohPyj+u/Y6qBUfbR5PsNpwo3Dm8naFt1rApT8WD7BRBA==} + dependencies: + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + codemirror: 5.60.0 + core-js: 3.9.1 + element-ui: 2.15.6_vue@2.6.14 + lodash-es: 4.17.21 + vue: 2.6.14 + vue-router: 3.5.1 + vuedraggable: 2.24.3 + dev: false + + /cmp-graph-editor/1.0.0-5.6-release: + resolution: {integrity: sha512-PJn3mHDXTD1yMyctm6yQjX05kopYdVkMKRpgX5c+FQqZCmW/zdGDmONMoRon1KaA2qq7sTZYqp3Oy4ghRlwr+Q==} + dependencies: + '@antv/x6': 1.30.1 + '@antv/x6-vue-shape': 1.3.1_42523d19620c772ae264b936f9ca6e20 + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + core-js: 3.9.1 + element-ui: 2.13.0_vue@2.6.14 + lodash-es: 4.17.21 + vue: 2.6.14 + dev: false + + /cmp-socket/1.0.0: + resolution: {integrity: sha512-2TdIGicSanZbxEwENDg77ZmvJhTGvyCUqdbfzcwgXjoLIj0JoAOGgoVfvQTVITo6eiHLmbd3mtHN42cYa0MT0g==} + dev: false + + /coa/2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.4 + chalk: 2.4.2 + q: 1.5.1 + dev: true + + /code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true + + /codemirror/5.60.0: + resolution: {integrity: sha512-AEL7LhFOlxPlCL8IdTcJDblJm8yrAGib7I+DErJPdZd4l6imx8IMgKK3RblVgBQqz3TZJR4oknQ03bz+uNjBYA==} + 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 + + /color-string/1.5.5: + resolution: {integrity: sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + + /color/3.1.3: + resolution: {integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==} + dependencies: + color-convert: 1.9.3 + color-string: 1.5.5 + dev: true + + /colorette/1.2.2: + resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} + dev: true + + /colorette/2.0.16: + resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/2.17.1: + resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==} + dev: true + + /commander/2.19.0: + resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + 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 + + /compress-webpack-plugin/1.0.6: + resolution: {integrity: sha512-BEnN7bzKUGHK2pnGr7mo56Tw6rldaJr6CVTR30oL9FHcjdgu//cSTkWwYAT/p+18qF/Dtujtvzs5uVyL5sllsw==} + engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} + dependencies: + async: 2.4.1 + webpack-sources: 1.4.3 + dev: true + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.46.0 + dev: true + + /compression/1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.7 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: true + + /connect-history-api-fallback/1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + dev: true + + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /consolidate/0.15.1: + resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==} + engines: {node: '>= 0.10.0'} + dependencies: + bluebird: 3.7.2 + dev: true + + /constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + + /contains-path/0.1.0: + resolution: {integrity: sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==} + engines: {node: '>=0.10.0'} + dev: true + + /content-disposition/0.5.3: + resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /content-type/1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + dev: true + + /conventional-changelog-angular/5.0.12: + resolution: {integrity: sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-conventionalcommits/4.5.0: + resolution: {integrity: sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + dev: true + + /conventional-commits-parser/3.2.1: + resolution: {integrity: sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==} + 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 + trim-off-newlines: 1.0.1 + dev: true + + /convert-source-map/1.7.0: + resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true + + /cookie/0.4.0: + resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} + engines: {node: '>= 0.6'} + dev: true + + /copy-concurrently/1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} + dependencies: + aproba: 1.2.0 + fs-write-stream-atomic: 1.0.10 + iferr: 0.1.5 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /copy-webpack-plugin/5.1.2_webpack@4.46.0: + resolution: {integrity: sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + glob-parent: 3.1.0 + globby: 7.1.1 + is-glob: 4.0.1 + loader-utils: 1.4.0 + minimatch: 3.0.4 + normalize-path: 3.0.0 + p-limit: 2.3.0 + schema-utils: 1.0.0 + serialize-javascript: 4.0.0 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-log: 2.0.0 + dev: true + + /core-js-compat/3.9.1: + resolution: {integrity: sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==} + dependencies: + browserslist: 4.19.1 + semver: 7.0.0 + dev: true + + /core-js/2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: false + + /core-js/3.9.1: + resolution: {integrity: sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==} + requiresBuild: true + + /core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true + + /cosmiconfig/5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: true + + /cosmiconfig/7.0.0: + resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} + 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-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /cross-env/5.2.1: + resolution: {integrity: sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + cross-spawn: 6.0.5 + dev: true + + /cross-spawn/5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.1 + shebang-command: 1.2.0 + which: 1.3.1 + 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-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.1 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + + /crypto-js/3.3.0: + resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} + dev: false + + /css-color-names/0.0.4: + resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==} + dev: true + + /css-declaration-sorter/4.0.1: + resolution: {integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==} + engines: {node: '>4'} + dependencies: + postcss: 7.0.35 + timsort: 0.3.0 + dev: true + + /css-loader/3.6.0_webpack@4.46.0: + resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + camelcase: 5.3.1 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 1.4.0 + normalize-path: 3.0.0 + postcss: 7.0.35 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.1.0 + schema-utils: 2.7.1 + semver: 6.3.0 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /css-select-base-adapter/0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: true + + /css-select/2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: true + + /css-tree/1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: true + + /css-tree/1.1.2: + resolution: {integrity: sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-what/3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cssnano-preset-default/4.0.7: + resolution: {integrity: sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==} + engines: {node: '>=6.9.0'} + dependencies: + css-declaration-sorter: 4.0.1 + cssnano-util-raw-cache: 4.0.1 + postcss: 7.0.35 + postcss-calc: 7.0.5 + postcss-colormin: 4.0.3 + postcss-convert-values: 4.0.1 + postcss-discard-comments: 4.0.2 + postcss-discard-duplicates: 4.0.2 + postcss-discard-empty: 4.0.1 + postcss-discard-overridden: 4.0.1 + postcss-merge-longhand: 4.0.11 + postcss-merge-rules: 4.0.3 + postcss-minify-font-values: 4.0.2 + postcss-minify-gradients: 4.0.2 + postcss-minify-params: 4.0.2 + postcss-minify-selectors: 4.0.2 + postcss-normalize-charset: 4.0.1 + postcss-normalize-display-values: 4.0.2 + postcss-normalize-positions: 4.0.2 + postcss-normalize-repeat-style: 4.0.2 + postcss-normalize-string: 4.0.2 + postcss-normalize-timing-functions: 4.0.2 + postcss-normalize-unicode: 4.0.1 + postcss-normalize-url: 4.0.1 + postcss-normalize-whitespace: 4.0.2 + postcss-ordered-values: 4.1.2 + postcss-reduce-initial: 4.0.3 + postcss-reduce-transforms: 4.0.2 + postcss-svgo: 4.0.2 + postcss-unique-selectors: 4.0.1 + dev: true + + /cssnano-util-get-arguments/4.0.0: + resolution: {integrity: sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==} + engines: {node: '>=6.9.0'} + dev: true + + /cssnano-util-get-match/4.0.0: + resolution: {integrity: sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==} + engines: {node: '>=6.9.0'} + dev: true + + /cssnano-util-raw-cache/4.0.1: + resolution: {integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /cssnano-util-same-parent/4.0.1: + resolution: {integrity: sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==} + engines: {node: '>=6.9.0'} + dev: true + + /cssnano/4.1.10: + resolution: {integrity: sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==} + engines: {node: '>=6.9.0'} + dependencies: + cosmiconfig: 5.2.1 + cssnano-preset-default: 4.0.7 + is-resolvable: 1.1.0 + postcss: 7.0.35 + dev: true + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.2 + dev: true + + /csstype/3.0.9: + resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==} + dev: false + + /cyclist/1.0.1: + resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==} + dev: true + + /dargs/7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /dashdash/1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: true + + /date-fns/1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + dev: true + + /dayjs/1.10.4: + resolution: {integrity: sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==} + dev: false + + /de-indent/1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + dependencies: + ms: 2.1.3 + dev: true + + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug/4.3.3_supports-color@6.1.0: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 6.1.0 + 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 + + /dedent/0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /deep-equal/1.1.1: + resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} + dependencies: + is-arguments: 1.1.0 + is-date-object: 1.0.2 + is-regex: 1.1.2 + object-is: 1.1.5 + object-keys: 1.1.1 + regexp.prototype.flags: 1.3.1 + dev: true + + /deep-is/0.1.3: + resolution: {integrity: sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==} + dev: true + + /deepmerge/1.3.2: + resolution: {integrity: sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==} + engines: {node: '>=0.10.0'} + dev: true + + /deepmerge/1.5.2: + resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==} + engines: {node: '>=0.10.0'} + + /default-gateway/4.2.0: + resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} + engines: {node: '>=6'} + dependencies: + execa: 1.0.0 + ip-regex: 2.1.0 + dev: true + + /default-gateway/5.0.5: + resolution: {integrity: sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==} + engines: {node: ^8.12.0 || >=9.7.0} + dependencies: + execa: 3.4.0 + dev: true + + /defaults/1.0.3: + resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + dependencies: + clone: 1.0.4 + dev: true + + /define-properties/1.1.3: + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + engines: {node: '>= 0.4'} + dependencies: + object-keys: 1.1.1 + 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 + + /del/3.0.0: + resolution: {integrity: sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==} + engines: {node: '>=4'} + dependencies: + globby: 6.1.0 + is-path-cwd: 1.0.0 + is-path-in-cwd: 1.0.1 + p-map: 1.2.0 + pify: 3.0.0 + rimraf: 2.7.1 + dev: true + + /del/4.1.1: + resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.1.3 + globby: 6.1.0 + is-path-cwd: 2.2.0 + is-path-in-cwd: 2.1.0 + p-map: 2.1.0 + pify: 4.0.1 + rimraf: 2.7.1 + dev: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /delegate/3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + dev: false + + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: true + + /des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /destroy/1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + dev: true + + /detect-node/2.0.5: + resolution: {integrity: sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==} + dev: true + + /diff/3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: false + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + /diff2html/2.12.2: + resolution: {integrity: sha512-G/Zn1KyG/OeC+67N/P26WHsQpjrjUiRyWGvg29ypy3MxSsBmF0bzsU/Irq70i2UAg+f/MzmLx4v/Nkt01TOU3g==} + engines: {node: '>=4'} + dependencies: + diff: 4.0.2 + hogan.js: 3.0.2 + merge: 1.2.1 + whatwg-fetch: 3.6.2 + dev: false + + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + + /dir-glob/2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} + dependencies: + path-type: 3.0.0 + dev: true + + /dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: true + + /dns-packet/1.3.1: + resolution: {integrity: sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==} + dependencies: + ip: 1.1.5 + safe-buffer: 5.2.1 + dev: true + + /dns-txt/2.0.2: + resolution: {integrity: sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==} + dependencies: + buffer-indexof: 1.1.1 + dev: true + + /doctrine/1.5.0: + resolution: {integrity: sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + isarray: 1.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-converter/0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: true + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.2.0 + entities: 2.2.0 + dev: true + + /domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + /domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype/2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + dev: true + + /domhandler/2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + dependencies: + domelementtype: 1.3.1 + dev: true + + /domready/1.0.8: + resolution: {integrity: sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==} + 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 + + /dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /dotenv-expand/5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: true + + /dotenv/8.2.0: + resolution: {integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==} + engines: {node: '>=8'} + dev: true + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: true + + /easy-stack/1.0.1: + resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==} + engines: {node: '>=6.0.0'} + dev: true + + /ecc-jsbn/0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: true + + /echarts-liquidfill/3.1.0_echarts@5.3.1: + resolution: {integrity: sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==} + peerDependencies: + echarts: ^5.0.1 + dependencies: + echarts: 5.3.1 + dev: false + + /echarts/5.3.1: + resolution: {integrity: sha512-nWdlbgX3OVY0hpqncSvp0gDt1FRSKWn7lsWEH+PHmfCuvE0QmSw17pczQvm8AvawnLEkmf1Cts7YwQJZNC0AEQ==} + dependencies: + tslib: 2.3.0 + zrender: 5.3.1 + dev: false + + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true + + /ejs/2.7.4: + resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: true + + /electron-to-chromium/1.4.68: + resolution: {integrity: sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==} + dev: true + + /elegant-spinner/1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + dev: true + + /element-ui/2.13.0_vue@2.6.14: + resolution: {integrity: sha512-KYsHWsBXYbLELS8cdfvgJTOMSUby3UEjvsPV1V1VmgJ/DdkOAS4z3MiOrPxrT9w2Cc5lZ4eVSQiGhYFR5NVChw==} + peerDependencies: + vue: ^2.5.17 + dependencies: + async-validator: 1.8.5 + babel-helper-vue-jsx-merge-props: 2.0.3 + deepmerge: 1.5.2 + normalize-wheel: 1.0.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 1.1.0 + vue: 2.6.14 + dev: false + + /element-ui/2.15.6_vue@2.6.14: + resolution: {integrity: sha512-rcYXEKd/j2G0AgficAOk1Zd1AsnHRkhmrK4yLHmNOiimU2JfsywgfKUjMoFuT6pQx0luhovj8lFjpE4Fnt58Iw==} + peerDependencies: + vue: ^2.5.17 + dependencies: + async-validator: 1.8.5 + babel-helper-vue-jsx-merge-props: 2.0.3 + deepmerge: 1.5.2 + normalize-wheel: 1.0.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 1.1.0 + vue: 2.6.14 + dev: false + + /elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emojis-list/2.1.0: + resolution: {integrity: sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==} + engines: {node: '>= 0.10'} + dev: true + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enhanced-resolve/0.9.1: + resolution: {integrity: sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.9 + memory-fs: 0.2.0 + tapable: 0.1.10 + dev: true + + /enhanced-resolve/4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + dependencies: + graceful-fs: 4.2.9 + memory-fs: 0.5.0 + tapable: 1.1.3 + 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 + + /envinfo/7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /error-stack-parser/2.0.6: + resolution: {integrity: sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==} + dependencies: + stackframe: 1.2.0 + dev: true + + /es-abstract/1.18.0: + resolution: {integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + is-callable: 1.2.3 + is-negative-zero: 2.0.1 + is-regex: 1.1.2 + is-string: 1.0.5 + object-inspect: 1.9.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.0 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.3 + is-date-object: 1.0.2 + is-symbol: 1.0.3 + 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: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /eslint-config-standard/14.1.1_86016a687bb9a3fc2cd0de7a3b1aede7: + resolution: {integrity: sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==} + peerDependencies: + eslint: '>=6.2.2' + eslint-plugin-import: '>=2.18.0' + eslint-plugin-node: '>=9.1.0' + eslint-plugin-promise: '>=4.2.1' + eslint-plugin-standard: '>=4.0.0' + dependencies: + eslint: 6.8.0 + eslint-plugin-import: 2.22.1_eslint@6.8.0 + eslint-plugin-node: 11.1.0_eslint@6.8.0 + eslint-plugin-promise: 4.3.1 + eslint-plugin-standard: 4.1.0_eslint@6.8.0 + dev: true + + /eslint-import-resolver-node/0.3.4: + resolution: {integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==} + dependencies: + debug: 2.6.9 + resolve: 1.22.0 + dev: true + + /eslint-import-resolver-webpack/0.12.2_eslint-plugin-import@2.22.1: + resolution: {integrity: sha512-7Jnm4YAoNNkvqPaZkKdIHsKGmv8/uNnYC5QsXkiSodvX4XEEfH2AKOna98FK52fCDXm3q4HzuX+7pRMKkJ64EQ==} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + webpack: '>=1.11.0' + dependencies: + array-find: 1.0.0 + debug: 2.6.9 + enhanced-resolve: 0.9.1 + eslint-plugin-import: 2.22.1_eslint@6.8.0 + find-root: 1.1.0 + has: 1.0.3 + interpret: 1.4.0 + lodash: 4.17.21 + node-libs-browser: 2.2.1 + resolve: 1.22.0 + semver: 5.7.1 + dev: true + + /eslint-loader/2.2.1_eslint@6.8.0+webpack@4.46.0: + resolution: {integrity: sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==} + deprecated: This loader has been deprecated. Please use eslint-webpack-plugin + peerDependencies: + eslint: '>=1.6.0 <7.0.0' + webpack: '>=2.0.0 <5.0.0' + dependencies: + eslint: 6.8.0 + loader-fs-cache: 1.0.3 + loader-utils: 1.4.0 + object-assign: 4.1.1 + object-hash: 1.3.1 + rimraf: 2.7.1 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /eslint-module-utils/2.6.0: + resolution: {integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==} + engines: {node: '>=4'} + dependencies: + debug: 2.6.9 + pkg-dir: 2.0.0 + dev: true + + /eslint-plugin-es/3.0.1_eslint@6.8.0: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 6.8.0 + eslint-utils: 2.1.0 + regexpp: 3.1.0 + dev: true + + /eslint-plugin-import/2.22.1_eslint@6.8.0: + resolution: {integrity: sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + dependencies: + array-includes: 3.1.3 + array.prototype.flat: 1.2.4 + contains-path: 0.1.0 + debug: 2.6.9 + doctrine: 1.5.0 + eslint: 6.8.0 + eslint-import-resolver-node: 0.3.4 + eslint-module-utils: 2.6.0 + has: 1.0.3 + minimatch: 3.0.4 + object.values: 1.1.3 + read-pkg-up: 2.0.0 + resolve: 1.20.0 + tsconfig-paths: 3.9.0 + dev: true + + /eslint-plugin-node/11.1.0_eslint@6.8.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 6.8.0 + eslint-plugin-es: 3.0.1_eslint@6.8.0 + eslint-utils: 2.1.0 + ignore: 5.1.8 + minimatch: 3.0.4 + resolve: 1.20.0 + semver: 6.3.0 + dev: true + + /eslint-plugin-promise/4.3.1: + resolution: {integrity: sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-standard/4.1.0_eslint@6.8.0: + resolution: {integrity: sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 6.8.0 + dev: true + + /eslint-plugin-vue/6.2.2_eslint@6.8.0: + resolution: {integrity: sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==} + engines: {node: '>=8.10'} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 + dependencies: + eslint: 6.8.0 + natural-compare: 1.4.0 + semver: 5.7.1 + vue-eslint-parser: 7.6.0_eslint@6.8.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope/4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + 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-utils/1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils/2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint/6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + hasBin: true + dependencies: + '@babel/code-frame': 7.16.7 + ajv: 6.12.6 + chalk: 2.4.2 + cross-spawn: 6.0.5 + debug: 4.3.3 + doctrine: 3.0.0 + eslint-scope: 5.1.1 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.4.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + inquirer: 7.3.3 + is-glob: 4.0.1 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.3.0 + lodash: 4.17.21 + minimatch: 3.0.4 + mkdirp: 0.5.5 + natural-compare: 1.4.0 + optionator: 0.8.3 + progress: 2.0.3 + regexpp: 2.0.1 + semver: 6.3.0 + strip-ansi: 5.2.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.1_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.2.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.2.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.2.0: + resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /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 + + /event-pubsub/4.3.0: + resolution: {integrity: sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==} + engines: {node: '>=4.0.0'} + dev: true + + /eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /eventsource/1.1.0: + resolution: {integrity: sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==} + engines: {node: '>=0.12.0'} + dependencies: + original: 1.0.2 + dev: true + + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + + /execa/0.8.0: + resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.3 + strip-eof: 1.0.0 + dev: true + + /execa/1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.3 + strip-eof: 1.0.0 + dev: true + + /execa/3.4.0: + resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==} + engines: {node: ^8.12.0 || >=9.7.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + p-finally: 2.0.1 + signal-exit: 3.0.3 + strip-final-newline: 2.0.0 + 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.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.3 + 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 + + /express/4.17.1: + resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.0 + content-disposition: 0.5.3 + content-type: 1.0.4 + cookie: 0.4.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.6 + qs: 6.7.0 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.17.1 + serve-static: 1.14.1 + setprototypeof: 1.1.1 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.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 + + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + + /external-editor/3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + 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 + + /extsprintf/1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: true + + /extsprintf/1.4.0: + resolution: {integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==} + engines: {'0': node >=0.6.0} + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/2.2.7: + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} + engines: {node: '>=4.0.0'} + dependencies: + '@mrmlnc/readdir-enhanced': 2.2.1 + '@nodelib/fs.stat': 1.1.3 + glob-parent: 3.1.0 + is-glob: 4.0.1 + merge2: 1.4.1 + micromatch: 3.1.10 + 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.4 + 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 + + /fastest-levenshtein/1.0.12: + resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /faye-websocket/0.11.3: + resolution: {integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + + /figgy-pudding/3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} + dev: true + + /figures/1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + dev: true + + /figures/2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache/5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + dependencies: + flat-cache: 2.0.1 + dev: true + + /file-loader/4.3.0_webpack@4.46.0: + resolution: {integrity: sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + loader-utils: 1.4.0 + schema-utils: 2.7.1 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + requiresBuild: true + dev: true + optional: true + + /filesize/3.6.1: + resolution: {integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==} + engines: {node: '>= 0.4.0'} + 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 + + /finalhandler/1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + dev: true + + /find-cache-dir/0.1.1: + resolution: {integrity: sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==} + engines: {node: '>=0.10.0'} + dependencies: + commondir: 1.0.1 + mkdirp: 0.5.5 + pkg-dir: 1.0.0 + dev: true + + /find-cache-dir/2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: true + + /find-cache-dir/3.3.1: + resolution: {integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-root/1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true + + /find-up/1.1.2: + resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} + engines: {node: '>=0.10.0'} + dependencies: + path-exists: 2.1.0 + pinkie-promise: 2.0.1 + dev: true + + /find-up/2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: true + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + 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/2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + dev: true + + /flatted/2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + dev: true + + /flush-write-stream/1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /fn-name/2.0.1: + resolution: {integrity: sha512-oIDB1rXf3BUnn00bh2jVM0byuqr94rBh6g7ZfdKcbmp1we2GQtPzKdloyvBXHs+q3fvxB8EqX5ecFba3RwCSjA==} + engines: {node: '>=0.10.0'} + dev: true + + /follow-redirects/1.13.3: + resolution: {integrity: sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: true + + /fork-ts-checker-webpack-plugin/3.1.1: + resolution: {integrity: sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==} + engines: {node: '>=6.11.5', yarn: '>=1.0.0'} + dependencies: + babel-code-frame: 6.26.0 + chalk: 2.4.2 + chokidar: 3.5.1 + micromatch: 3.1.10 + minimatch: 3.0.4 + semver: 5.7.1 + tapable: 1.1.3 + worker-rpc: 0.1.1 + dev: true + + /form-data/2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.29 + dev: true + + /forwarded/0.1.2: + resolution: {integrity: sha512-Ua9xNhH0b8pwE3yRbFfXJvfdWF0UHNCdeyb2sbi9Ul/M+r3PTdrz7Cv4SCfZRMjmzEM9PhraqfZFbGTIg3OMyA==} + engines: {node: '>= 0.6'} + dev: true + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: true + + /from2/2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /fs-extra/7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.9 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-minipass/2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /fs-write-stream-atomic/1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} + dependencies: + graceful-fs: 4.2.9 + iferr: 0.1.5 + imurmurhash: 0.1.4 + readable-stream: 2.3.7 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.14.2 + dev: true + optional: 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 + + /g-status/2.0.2: + resolution: {integrity: sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==} + engines: {node: '>=6'} + dependencies: + arrify: 1.0.1 + matcher: 1.1.1 + simple-git: 1.132.0 + transitivePeerDependencies: + - supports-color + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + 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.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + + /get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + + /get-stdin/6.0.0: + resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} + engines: {node: '>=4'} + dev: true + + /get-stdin/8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + dev: true + + /get-stream/3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: true + + /get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /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 + + /getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: true + + /git-raw-commits/2.0.10: + resolution: {integrity: sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==} + 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/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.1 + dev: true + + /glob-to-regexp/0.3.0: + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} + dev: true + + /glob/7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + 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/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.8.1 + dev: true + + /globby/6.1.0: + resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} + engines: {node: '>=0.10.0'} + dependencies: + array-union: 1.0.2 + glob: 7.1.6 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: true + + /globby/7.1.1: + resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==} + engines: {node: '>=4'} + dependencies: + array-union: 1.0.2 + dir-glob: 2.2.2 + glob: 7.1.6 + ignore: 3.3.10 + pify: 3.0.0 + slash: 1.0.0 + dev: true + + /globby/9.2.0: + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.1.3 + array-union: 1.0.2 + dir-glob: 2.2.2 + fast-glob: 2.2.7 + glob: 7.1.6 + ignore: 4.0.6 + pify: 4.0.1 + slash: 2.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.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + dev: true + + /gzip-size/5.1.1: + resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==} + engines: {node: '>=6'} + dependencies: + duplexer: 0.1.2 + pify: 4.0.1 + dev: true + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: true + + /har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: true + + /har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + 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-bigints/1.0.1: + resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + 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.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} + + /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 + + /hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /hash-sum/1.0.2: + resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==} + dev: true + + /hash-sum/2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + dev: true + + /hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hex-color-regex/1.1.0: + resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} + dev: true + + /highlight.js/10.7.1: + resolution: {integrity: sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA==} + dev: true + + /highlight.js/9.18.5: + resolution: {integrity: sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==} + deprecated: Support has ended for 9.x series. Upgrade to @latest + requiresBuild: true + dev: false + + /hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /hogan.js/3.0.2: + resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==} + hasBin: true + dependencies: + mkdirp: 0.3.0 + nopt: 1.0.10 + dev: false + + /hoopy/0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: true + + /hosted-git-info/2.8.8: + resolution: {integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==} + dev: true + + /hosted-git-info/4.0.1: + resolution: {integrity: sha512-eT7NrxAsppPRQEBSwKSosReE+v8OzABwEScQYk5d4uxaEPlzxTIku7LINXtBGalthkLhJnq5lBI89PfK43zAKg==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: true + + /hsl-regex/1.0.0: + resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==} + dev: true + + /hsla-regex/1.0.0: + resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==} + dev: true + + /html-comment-regex/1.1.2: + resolution: {integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==} + dev: true + + /html-entities/1.4.0: + resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} + dev: true + + /html-minifier/3.5.21: + resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} + engines: {node: '>=4'} + hasBin: true + dependencies: + camel-case: 3.0.0 + clean-css: 4.2.3 + commander: 2.17.1 + he: 1.2.0 + param-case: 2.1.1 + relateurl: 0.2.7 + uglify-js: 3.4.10 + dev: true + + /html-tags/2.0.0: + resolution: {integrity: sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==} + engines: {node: '>=4'} + dev: true + + /html-tags/3.1.0: + resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} + engines: {node: '>=8'} + dev: true + + /html-webpack-plugin/3.2.0_webpack@4.46.0: + resolution: {integrity: sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==} + engines: {node: '>=6.9'} + deprecated: 3.x is no longer supported + peerDependencies: + webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + html-minifier: 3.5.21 + loader-utils: 0.2.17 + lodash: 4.17.21 + pretty-error: 2.1.2 + tapable: 1.1.3 + toposort: 1.0.7 + util.promisify: 1.0.0 + webpack: 4.46.0_webpack-cli@4.9.2 + 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 + + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: true + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + + /http-errors/1.7.2: + resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + + /http-errors/1.7.3: + resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + + /http-parser-js/0.5.3: + resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} + dev: true + + /http-proxy-middleware/0.19.1_debug@4.3.3: + resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} + engines: {node: '>=4.0.0'} + dependencies: + http-proxy: 1.18.1_debug@4.3.3 + is-glob: 4.0.1 + lodash: 4.17.21 + micromatch: 3.1.10 + transitivePeerDependencies: + - debug + dev: true + + /http-proxy/1.18.1_debug@4.3.3: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.13.3 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: true + + /http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.1 + sshpk: 1.16.1 + dev: true + + /https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + + /human-signals/1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /husky/1.3.1: + resolution: {integrity: sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==} + engines: {node: '>=6'} + hasBin: true + requiresBuild: true + dependencies: + cosmiconfig: 5.2.1 + execa: 1.0.0 + find-up: 3.0.0 + get-stdin: 6.0.0 + is-ci: 2.0.0 + pkg-dir: 3.0.0 + please-upgrade-node: 3.2.0 + read-pkg: 4.0.1 + run-node: 1.0.0 + slash: 2.0.0 + dev: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /icss-utils/4.1.1: + resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.35 + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /iferr/0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} + dev: true + + /ignore/3.3.10: + resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==} + dev: true + + /ignore/4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true + + /ignore/5.1.8: + resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + 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 + + /import-cwd/2.1.0: + resolution: {integrity: sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==} + engines: {node: '>=4'} + dependencies: + import-from: 2.1.0 + dev: true + + /import-fresh/2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + 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-from/2.1.0: + resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: true + + /import-local/2.0.0: + resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + pkg-dir: 3.0.0 + resolve-cwd: 2.0.0 + dev: true + + /import-local/3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /increase-memory-limit/1.0.7: + resolution: {integrity: sha512-ozyn+HHAPD9VxMT1U50A7G8XXlktUWhnnEDYSeDYnQjKsNrBWHqq6XfEA0uhMdDPD+q/7rXWlzF1CbXX/c1LiQ==} + hasBin: true + dependencies: + glob: 7.1.6 + dev: true + + /indent-string/3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /indexes-of/1.0.1: + resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==} + dev: true + + /infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + 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.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true + + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + 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 + + /inquirer/7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.1 + chalk: 4.1.1 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.6 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: true + + /internal-ip/4.3.0: + resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} + engines: {node: '>=6'} + dependencies: + default-gateway: 4.2.0 + ipaddr.js: 1.9.1 + dev: true + + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /interpret/2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + + /ip-regex/2.1.0: + resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} + engines: {node: '>=4'} + dev: true + + /ip/1.1.5: + resolution: {integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==} + dev: true + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: true + + /is-absolute-url/2.1.0: + resolution: {integrity: sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-absolute-url/3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + 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-arguments/1.1.0: + resolution: {integrity: sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: true + + /is-bigint/1.0.1: + resolution: {integrity: sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==} + dev: true + + /is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: 1.13.1 + 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-boolean-object/1.1.0: + resolution: {integrity: sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-callable/1.2.3: + resolution: {integrity: sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==} + engines: {node: '>= 0.4'} + dev: true + + /is-ci/1.2.1: + resolution: {integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==} + hasBin: true + dependencies: + ci-info: 1.6.0 + dev: true + + /is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: true + + /is-color-stop/1.1.0: + resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==} + dependencies: + css-color-names: 0.0.4 + hex-color-regex: 1.1.0 + hsl-regex: 1.0.0 + hsla-regex: 1.0.0 + rgb-regex: 1.0.1 + rgba-regex: 1.0.0 + dev: true + + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + 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-date-object/1.0.2: + resolution: {integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==} + engines: {node: '>= 0.4'} + 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-directory/0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-docker/2.1.1: + resolution: {integrity: sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==} + engines: {node: '>=8'} + hasBin: true + 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/1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-glob/4.0.1: + resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-interactive/1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + + /is-negative-zero/2.0.1: + resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object/1.0.4: + resolution: {integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==} + engines: {node: '>= 0.4'} + 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/1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-observable/1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + dependencies: + symbol-observable: 1.2.0 + dev: true + + /is-path-cwd/1.0.0: + resolution: {integrity: sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-path-cwd/2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-in-cwd/1.0.1: + resolution: {integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-path-inside: 1.0.1 + dev: true + + /is-path-in-cwd/2.1.0: + resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==} + engines: {node: '>=6'} + dependencies: + is-path-inside: 2.1.0 + dev: true + + /is-path-inside/1.0.1: + resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} + engines: {node: '>=0.10.0'} + dependencies: + path-is-inside: 1.0.2 + dev: true + + /is-path-inside/2.1.0: + resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==} + engines: {node: '>=6'} + dependencies: + path-is-inside: 1.0.2 + 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-promise/2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + + /is-regex/1.1.2: + resolution: {integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-symbols: 1.0.2 + dev: true + + /is-regexp/1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-resolvable/1.1.0: + resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==} + dev: true + + /is-stream/1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-stream/2.0.0: + resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + engines: {node: '>=8'} + dev: true + + /is-string/1.0.5: + resolution: {integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==} + engines: {node: '>= 0.4'} + dev: true + + /is-svg/3.0.0: + resolution: {integrity: sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==} + engines: {node: '>=4'} + dependencies: + html-comment-regex: 1.1.2 + dev: true + + /is-symbol/1.0.3: + resolution: {integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.2 + 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-typedarray/1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl/1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: true + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.1.1 + 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 + + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true + + /javascript-stringify/2.0.1: + resolution: {integrity: sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==} + dev: true + + /jest-worker/25.5.0: + resolution: {integrity: sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==} + engines: {node: '>= 8.3'} + dependencies: + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /jquery-mousewheel/3.1.13: + resolution: {integrity: sha512-GXhSjfOPyDemM005YCEHvzrEALhKDIswtxSHSR2e4K/suHVJKJxxRCGz3skPjNxjJjQa9AVSGGlYjv1M3VLIPg==} + dev: false + + /jquery/3.6.0: + resolution: {integrity: sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==} + dev: false + + /js-base64/2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + dev: true + + /js-cookie/2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + dev: false + + /js-message/1.0.7: + resolution: {integrity: sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==} + engines: {node: '>=0.6.0'} + dev: true + + /js-queue/2.0.2: + resolution: {integrity: sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==} + engines: {node: '>=1.0.0'} + dependencies: + easy-stack: 1.0.1 + dev: true + + /js-tokens/3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + 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/0.2.3: + resolution: {integrity: sha512-a3xHnILGMtk+hDOqNwHzF6e2fNbiMrXZvxKQiEv2MlgQP+pjIOzqAmKYD2mDpXYE/44M7g+n9p2bKkYWDUcXCQ==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + + /json3/3.3.3: + resolution: {integrity: sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==} + dev: true + + /json5/0.5.1: + resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==} + hasBin: true + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /jsonparse/1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /jsprim/1.4.1: + resolution: {integrity: sha512-4Dj8Rf+fQ+/Pn7C5qeEX02op1WfOss3PKTE9Nsop3Dx+6UPxlm1dr/og7o2cRa5hNN07CACr4NFzRLtj/rjWog==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.2.3 + verror: 1.10.0 + dev: true + + /killable/1.0.1: + resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==} + 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 + + /launch-editor-middleware/2.2.1: + resolution: {integrity: sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==} + dependencies: + launch-editor: 2.2.1 + dev: true + + /launch-editor/2.2.1: + resolution: {integrity: sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==} + dependencies: + chalk: 2.4.2 + shell-quote: 1.7.2 + dev: true + + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + + /lines-and-columns/1.1.6: + resolution: {integrity: sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ==} + dev: true + + /lint-staged/8.2.1: + resolution: {integrity: sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==} + hasBin: true + dependencies: + chalk: 2.4.2 + commander: 2.20.3 + cosmiconfig: 5.2.1 + debug: 3.2.7 + dedent: 0.7.0 + del: 3.0.0 + execa: 1.0.0 + g-status: 2.0.2 + is-glob: 4.0.1 + is-windows: 1.0.2 + listr: 0.14.3 + listr-update-renderer: 0.5.0_listr@0.14.3 + lodash: 4.17.21 + log-symbols: 2.2.0 + micromatch: 3.1.10 + npm-which: 3.0.1 + p-map: 1.2.0 + path-is-inside: 1.0.2 + pify: 3.0.0 + please-upgrade-node: 3.2.0 + staged-git-files: 1.1.2 + string-argv: 0.0.2 + stringify-object: 3.3.0 + yup: 0.27.0 + transitivePeerDependencies: + - supports-color + - zen-observable + dev: true + + /listr-silent-renderer/1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + dev: true + + /listr-update-renderer/0.5.0_listr@0.14.3: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + dev: true + + /listr-verbose-renderer/0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + dev: true + + /listr/0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + dependencies: + '@samverschueren/stream-to-observable': 0.3.1_rxjs@6.6.6 + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0_listr@0.14.3 + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.6 + transitivePeerDependencies: + - zen-observable + dev: true + + /load-json-file/2.0.0: + resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.9 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + dev: true + + /loader-fs-cache/1.0.3: + resolution: {integrity: sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==} + dependencies: + find-cache-dir: 0.1.1 + mkdirp: 0.5.5 + dev: true + + /loader-runner/2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dev: true + + /loader-utils/0.2.17: + resolution: {integrity: sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==} + dependencies: + big.js: 3.2.0 + emojis-list: 2.1.0 + json5: 0.5.1 + object-assign: 4.1.1 + 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.1: + resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} + engines: {node: '>=14'} + dev: true + + /locate-path/2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + 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.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.defaultsdeep/4.6.1: + resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} + dev: true + + /lodash.kebabcase/4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + + /lodash.mapvalues/4.6.0: + resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} + dev: true + + /lodash.memoize/4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + + /lodash.transform/4.6.0: + resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==} + dev: true + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols/1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + dependencies: + chalk: 1.1.3 + dev: true + + /log-symbols/2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.1 + is-unicode-supported: 0.1.0 + dev: true + + /log-update/2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + dev: true + + /loglevel/1.7.1: + resolution: {integrity: sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==} + engines: {node: '>= 0.6.0'} + dev: true + + /lower-case/1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + + /lru-cache/4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + 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.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + 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.2.0: + resolution: {integrity: sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ==} + 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 + + /matcher/1.1.1: + resolution: {integrity: sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /mdn-data/2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: true + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: true + + /memory-fs/0.2.0: + resolution: {integrity: sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==} + dev: true + + /memory-fs/0.4.1: + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + + /memory-fs/0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + + /meow/8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.1 + 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.2 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.0 + type-fest: 0.18.1 + yargs-parser: 20.2.7 + dev: true + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + 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-source-map/1.1.0: + resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} + dependencies: + source-map: 0.6.1 + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge/1.2.1: + resolution: {integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==} + dev: false + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /mergely/4.0.15: + resolution: {integrity: sha512-HThdwWJu3mnurKzDVG61XKRS716vQuo14T/zfNEIAM6yKgwpDspe2osOf3Rj+rLk0tzLHvdIBDDnr/5t/ZqIFA==} + dev: false + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: true + + /microevent.ts/0.1.1: + resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==} + 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/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + 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.2: + resolution: {integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==} + engines: {node: '>=8'} + dependencies: + braces: 3.0.2 + picomatch: 2.2.3 + dev: true + + /micromatch/4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.2.3 + dev: true + + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + + /mime-db/1.46.0: + resolution: {integrity: sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types/2.1.29: + resolution: {integrity: sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.46.0 + dev: true + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mime/2.5.2: + resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + + /mimic-fn/1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + dev: true + + /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 + + /mini-css-extract-plugin/0.9.0_webpack@4.46.0: + resolution: {integrity: sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.4.0 + dependencies: + loader-utils: 1.4.0 + normalize-url: 1.9.1 + schema-utils: 1.0.0 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-sources: 1.4.3 + dev: true + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + + /minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + 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.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /minipass-collect/1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass-flush/1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass-pipeline/1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass/3.1.6: + resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /mississippi/3.0.0: + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} + engines: {node: '>=4.0.0'} + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.4 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 3.0.0 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + dev: true + + /mitt/1.1.2: + resolution: {integrity: sha512-3btxP0O9iGADGWAkteQ8mzDtEspZqu4I32y4GZYCV5BrwtzdcRpF4dQgNdJadCrbBx7Lu6Sq9AVrerMHR0Hkmw==} + 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 + + /mkdirp/0.3.0: + resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + dev: false + + /mkdirp/0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /mousetrap/1.6.5: + resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==} + dev: false + + /move-concurrently/1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} + dependencies: + aproba: 1.2.0 + copy-concurrently: 1.0.5 + fs-write-stream-atomic: 1.0.10 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms/2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /multicast-dns-service-types/1.1.0: + resolution: {integrity: sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==} + dev: true + + /multicast-dns/6.2.3: + resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} + hasBin: true + dependencies: + dns-packet: 1.3.1 + thunky: 1.1.0 + dev: true + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nan/2.14.2: + resolution: {integrity: sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==} + requiresBuild: true + dev: true + optional: 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 + + /negotiator/0.6.2: + resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} + engines: {node: '>= 0.6'} + dev: true + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true + + /no-case/2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: true + + /node-forge/0.10.0: + resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} + engines: {node: '>= 6.0.0'} + dev: true + + /node-ipc/9.1.4: + resolution: {integrity: sha512-A+f0mn2KxUt1uRTSd5ktxQUsn2OEhj5evo7NUi/powBzMSZ0vocdzDjlq9QN2v3LH6CJi3e5xAenpZ1QwU5A8g==} + engines: {node: '>=8.0.0'} + dependencies: + event-pubsub: 4.3.0 + js-message: 1.0.7 + js-queue: 2.0.2 + dev: true + + /node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true + + /node-releases/2.0.2: + resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} + dev: true + + /nopt/1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.8 + resolve: 1.22.0 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data/3.0.2: + resolution: {integrity: sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.0.1 + resolve: 1.22.0 + semver: 7.3.5 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/1.0.0: + resolution: {integrity: sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url/1.9.1: + resolution: {integrity: sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==} + engines: {node: '>=4'} + dependencies: + object-assign: 4.1.1 + prepend-http: 1.0.4 + query-string: 4.3.4 + sort-keys: 1.1.2 + dev: true + + /normalize-url/3.3.0: + resolution: {integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==} + engines: {node: '>=6'} + dev: true + + /normalize-wheel/1.0.1: + resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==} + dev: false + + /npm-path/2.0.4: + resolution: {integrity: sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + which: 1.3.1 + dev: true + + /npm-run-path/2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-which/3.0.1: + resolution: {integrity: sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==} + engines: {node: '>=4.2.0'} + hasBin: true + dependencies: + commander: 2.20.3 + npm-path: 2.0.4 + which: 1.3.1 + dev: true + + /nprogress/0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false + + /nth-check/1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: true + + /num2fraction/1.2.2: + resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} + dev: true + + /number-is-nan/1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + 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-hash/1.3.1: + resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==} + engines: {node: '>= 0.10.0'} + dev: true + + /object-inspect/1.9.0: + resolution: {integrity: sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==} + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign/4.1.2: + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + dev: true + + /object.getownpropertydescriptors/2.1.2: + resolution: {integrity: sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==} + engines: {node: '>= 0.8'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + 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 + + /object.values/1.1.3: + resolution: {integrity: sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: true + + /on-finished/2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: true + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + dependencies: + mimic-fn: 1.2.0 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /open/6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + dev: true + + /opener/1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + + /opn/5.5.0: + resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==} + engines: {node: '>=4'} + dependencies: + is-wsl: 1.1.0 + dev: true + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: true + + /ora/3.4.0: + resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} + engines: {node: '>=6'} + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-spinners: 2.6.0 + log-symbols: 2.2.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + dev: true + + /ora/5.4.0: + resolution: {integrity: sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.1 + cli-cursor: 3.1.0 + cli-spinners: 2.6.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /original/1.0.2: + resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==} + dependencies: + url-parse: 1.5.1 + dev: true + + /os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /p-finally/1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-finally/2.0.1: + resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} + engines: {node: '>=8'} + dev: true + + /p-limit/1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + 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/2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: true + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.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-map/1.2.0: + resolution: {integrity: sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==} + engines: {node: '>=4'} + dev: true + + /p-map/2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-map/3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-retry/3.0.1: + resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==} + engines: {node: '>=6'} + dependencies: + retry: 0.12.0 + dev: true + + /p-try/1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + + /parallel-transform/1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} + dependencies: + cyclist: 1.0.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /param-case/2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.2 + 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-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.1 + safe-buffer: 5.2.1 + dev: true + + /parse-json/2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} + dependencies: + error-ex: 1.3.2 + dev: true + + /parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.16.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.1.6 + dev: true + + /parse5-htmlparser2-tree-adapter/6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: true + + /parse5/5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + dev: true + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: true + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-browserify/0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true + + /path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + dev: true + + /path-exists/2.1.0: + resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie-promise: 2.0.1 + dev: true + + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + 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-is-inside/1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: true + + /path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + 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/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: true + + /path-type/2.0.0: + resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} + engines: {node: '>=4'} + dependencies: + pify: 2.3.0 + dev: true + + /path-type/3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pbkdf2/3.1.1: + resolution: {integrity: sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.2.3: + resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==} + engines: {node: '>=8.6'} + dev: true + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pinkie-promise/2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: true + + /pinkie/2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + + /pkg-dir/1.0.0: + resolution: {integrity: sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==} + engines: {node: '>=0.10.0'} + dependencies: + find-up: 1.1.2 + dev: true + + /pkg-dir/2.0.0: + resolution: {integrity: sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + dev: true + + /pkg-dir/3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /please-upgrade-node/3.2.0: + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} + dependencies: + semver-compare: 1.0.0 + dev: true + + /pnp-webpack-plugin/1.6.4_typescript@4.4.4: + resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} + engines: {node: '>=6'} + dependencies: + ts-pnp: 1.2.0_typescript@4.4.4 + transitivePeerDependencies: + - typescript + dev: true + + /portfinder/1.0.28: + resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.3 + debug: 3.2.7 + mkdirp: 0.5.5 + dev: true + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-calc/7.0.5: + resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==} + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-colormin/4.0.3: + resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} + engines: {node: '>=6.9.0'} + dependencies: + browserslist: 4.19.1 + color: 3.1.3 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-convert-values/4.0.1: + resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-discard-comments/4.0.2: + resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-discard-duplicates/4.0.2: + resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-discard-empty/4.0.1: + resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-discard-overridden/4.0.1: + resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-load-config/2.1.2: + resolution: {integrity: sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==} + engines: {node: '>= 4'} + dependencies: + cosmiconfig: 5.2.1 + import-cwd: 2.1.0 + dev: true + + /postcss-loader/3.0.0: + resolution: {integrity: sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==} + engines: {node: '>= 6'} + dependencies: + loader-utils: 1.4.0 + postcss: 7.0.35 + postcss-load-config: 2.1.2 + schema-utils: 1.0.0 + dev: true + + /postcss-merge-longhand/4.0.11: + resolution: {integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==} + engines: {node: '>=6.9.0'} + dependencies: + css-color-names: 0.0.4 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + stylehacks: 4.0.3 + dev: true + + /postcss-merge-rules/4.0.3: + resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} + engines: {node: '>=6.9.0'} + dependencies: + browserslist: 4.19.1 + caniuse-api: 3.0.0 + cssnano-util-same-parent: 4.0.1 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + vendors: 1.0.4 + dev: true + + /postcss-minify-font-values/4.0.2: + resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-minify-gradients/4.0.2: + resolution: {integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: 4.0.0 + is-color-stop: 1.1.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-minify-params/4.0.2: + resolution: {integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==} + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: 1.0.2 + browserslist: 4.19.1 + cssnano-util-get-arguments: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + uniqs: 2.0.0 + dev: true + + /postcss-minify-selectors/4.0.2: + resolution: {integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==} + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: 1.0.2 + has: 1.0.3 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + dev: true + + /postcss-modules-extract-imports/2.0.0: + resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-modules-local-by-default/3.0.3: + resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==} + engines: {node: '>= 6'} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-modules-scope/2.2.0: + resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + dev: true + + /postcss-modules-values/3.0.0: + resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.35 + dev: true + + /postcss-normalize-charset/4.0.1: + resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-normalize-display-values/4.0.2: + resolution: {integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-positions/4.0.2: + resolution: {integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: 4.0.0 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-repeat-style/4.0.2: + resolution: {integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: 4.0.0 + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-string/4.0.2: + resolution: {integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==} + engines: {node: '>=6.9.0'} + dependencies: + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-timing-functions/4.0.2: + resolution: {integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-unicode/4.0.1: + resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} + engines: {node: '>=6.9.0'} + dependencies: + browserslist: 4.19.1 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-url/4.0.1: + resolution: {integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==} + engines: {node: '>=6.9.0'} + dependencies: + is-absolute-url: 2.1.0 + normalize-url: 3.3.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-normalize-whitespace/4.0.2: + resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==} + engines: {node: '>=6.9.0'} + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-ordered-values/4.1.2: + resolution: {integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-arguments: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-prefix-selector/1.9.0: + resolution: {integrity: sha512-tTUHUNP+/Qfgg+fvbljUIeLs1ijICWb8+CT3bZM2joE2pkd+EnuBzSfZNHY2RMmozNRp44yEFv+I+6IIiLcoCg==} + dependencies: + postcss: 7.0.35 + dev: true + + /postcss-reduce-initial/4.0.3: + resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} + engines: {node: '>=6.9.0'} + dependencies: + browserslist: 4.19.1 + caniuse-api: 3.0.0 + has: 1.0.3 + postcss: 7.0.35 + dev: true + + /postcss-reduce-transforms/4.0.2: + resolution: {integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==} + engines: {node: '>=6.9.0'} + dependencies: + cssnano-util-get-match: 4.0.0 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + + /postcss-selector-parser/3.1.2: + resolution: {integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + indexes-of: 1.0.1 + uniq: 1.0.1 + dev: true + + /postcss-selector-parser/6.0.4: + resolution: {integrity: sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + indexes-of: 1.0.1 + uniq: 1.0.1 + util-deprecate: 1.0.2 + dev: true + + /postcss-svgo/4.0.2: + resolution: {integrity: sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==} + engines: {node: '>=6.9.0'} + dependencies: + is-svg: 3.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + svgo: 1.3.2 + dev: true + + /postcss-unique-selectors/4.0.1: + resolution: {integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==} + engines: {node: '>=6.9.0'} + dependencies: + alphanum-sort: 1.0.2 + postcss: 7.0.35 + uniqs: 2.0.0 + dev: true + + /postcss-value-parser/3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} + dev: true + + /postcss-value-parser/4.1.0: + resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} + 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/7.0.35: + resolution: {integrity: sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==} + engines: {node: '>=6.0.0'} + dependencies: + chalk: 2.4.2 + source-map: 0.6.1 + supports-color: 6.1.0 + dev: true + + /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.3.1: + resolution: {integrity: sha512-eSToKjNLu0FiF76SSGMHjOFXYzAc/CJqi677Sq6hYvcvFCBtD6de/W5l+0IYPf7ypscqAfjCttxvTdMJt5Gj8Q==} + 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.3.1 + 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.3.1 + dev: true + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + + /prepend-http/1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + dev: true + + /prettier/1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /pretty-error/2.1.2: + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} + dependencies: + lodash: 4.17.21 + renderkid: 2.0.5 + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /promise-inflight/1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + dev: true + + /property-expr/1.5.1: + resolution: {integrity: sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==} + dev: true + + /proxy-addr/2.0.6: + resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.1.2 + ipaddr.js: 1.9.1 + dev: true + + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + + /pseudomap/1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + + /psl/1.8.0: + resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} + dev: true + + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode/1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true + + /punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + 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 + + /qs/6.10.0: + resolution: {integrity: sha512-yjACOWijC6L/kmPZZAsVBNY2zfHSIbpdpL977quseu56/8BZ2LoF5axK2bGhbzhVKt7V9xgWTtpyLbxwIoER0Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /qs/6.5.2: + resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} + engines: {node: '>=0.6'} + dev: true + + /qs/6.7.0: + resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} + engines: {node: '>=0.6'} + dev: true + + /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 + + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true + + /querystring/0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + 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 + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body/2.4.0: + resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.0 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /read-pkg-up/2.0.0: + resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + 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/2.0.0: + resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} + engines: {node: '>=4'} + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + dev: true + + /read-pkg/4.0.1: + resolution: {integrity: sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==} + engines: {node: '>=6'} + dependencies: + normalize-package-data: 2.5.0 + parse-json: 4.0.0 + pify: 3.0.0 + dev: true + + /read-pkg/5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.0 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + 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/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.9 + micromatch: 3.1.10 + readable-stream: 2.3.7 + dev: true + + /readdirp/3.5.0: + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.2.3 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.2.3 + dev: true + + /rechoir/0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.0 + 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 + + /regenerate-unicode-properties/8.2.0: + resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime/0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: false + + /regenerator-runtime/0.13.7: + resolution: {integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==} + dev: true + + /regenerator-transform/0.14.5: + resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} + dependencies: + '@babel/runtime': 7.13.10 + dev: true + + /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 + + /regexp.prototype.flags/1.3.1: + resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /regexpp/2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} + engines: {node: '>=6.5.0'} + dev: true + + /regexpp/3.1.0: + resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} + engines: {node: '>=8'} + dev: true + + /regexpu-core/4.7.1: + resolution: {integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 8.2.0 + regjsgen: 0.5.2 + regjsparser: 0.6.7 + unicode-match-property-ecmascript: 1.0.4 + unicode-match-property-value-ecmascript: 1.2.0 + dev: true + + /regjsgen/0.5.2: + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} + dev: true + + /regjsparser/0.6.7: + resolution: {integrity: sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /relateurl/0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /renderkid/2.0.5: + resolution: {integrity: sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==} + dependencies: + css-select: 2.1.0 + dom-converter: 0.2.0 + htmlparser2: 3.10.1 + lodash: 4.17.21 + strip-ansi: 3.0.1 + dev: true + + /repeat-element/1.1.3: + resolution: {integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==} + 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 + + /request/2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.11.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.29 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.2 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + 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-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + + /resize-observer-polyfill/1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + dev: false + + /resolve-cwd/2.0.0: + resolution: {integrity: sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: true + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from/3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + 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.20.0: + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + dev: true + + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor/2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.3 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.3 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rgb-regex/1.0.1: + resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==} + dev: true + + /rgba-regex/1.0.0: + resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==} + dev: true + + /rimraf/2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.1.6 + dev: true + + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.1.6 + dev: true + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + + /run-async/2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-node/1.0.0: + resolution: {integrity: sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /run-queue/1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} + dependencies: + aproba: 1.2.0 + dev: true + + /rxjs/6.6.6: + resolution: {integrity: sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + 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 + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /sass-loader/8.0.2_sass@1.32.8: + resolution: {integrity: sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==} + engines: {node: '>= 8.9.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 + sass: ^1.3.0 + webpack: ^4.36.0 || ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + clone-deep: 4.0.1 + loader-utils: 1.4.0 + neo-async: 2.6.2 + sass: 1.32.8 + schema-utils: 2.7.1 + semver: 6.3.0 + dev: true + + /sass/1.32.8: + resolution: {integrity: sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==} + engines: {node: '>=8.9.0'} + hasBin: true + dependencies: + chokidar: 3.5.1 + dev: true + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /schema-utils/1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} + dependencies: + ajv: 6.12.6 + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.7 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: true + + /select/1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + dev: false + + /selfsigned/1.10.8: + resolution: {integrity: sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==} + dependencies: + node-forge: 0.10.0 + dev: true + + /semver-compare/1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + dev: true + + /semver/7.3.2: + resolution: {integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send/0.17.1: + resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.7.3 + mime: 1.6.0 + ms: 2.1.1 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: true + + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-index/1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.7 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.29 + parseurl: 1.3.3 + dev: true + + /serve-static/1.14.1: + resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.1 + dev: true + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + 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 + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + + /setprototypeof/1.1.1: + resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + dev: true + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shallow-clone/3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.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/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shell-quote/1.7.2: + resolution: {integrity: sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.9.0 + dev: false + + /signal-exit/3.0.3: + resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} + dev: true + + /simple-git/1.132.0: + resolution: {integrity: sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==} + dependencies: + debug: 4.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: true + + /slash/1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} + engines: {node: '>=0.10.0'} + dev: true + + /slash/2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: true + + /slice-ansi/0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + dev: true + + /slice-ansi/2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.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 + + /sockjs-client/1.5.0: + resolution: {integrity: sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==} + dependencies: + debug: 3.2.7 + eventsource: 1.1.0 + faye-websocket: 0.11.3 + inherits: 2.0.4 + json3: 3.3.3 + url-parse: 1.5.1 + dev: true + + /sockjs/0.3.21: + resolution: {integrity: sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==} + dependencies: + faye-websocket: 0.11.3 + uuid: 3.4.0 + websocket-driver: 0.7.4 + dev: true + + /sort-keys/1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /sortablejs/1.10.2: + resolution: {integrity: sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==} + dev: false + + /sortablejs/1.13.0: + resolution: {integrity: sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg==} + dev: false + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + + /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-support/0.5.19: + resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} + dependencies: + buffer-from: 1.1.1 + source-map: 0.6.1 + 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'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /spdx-correct/3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.7 + 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.7 + dev: true + + /spdx-license-ids/3.0.7: + resolution: {integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==} + dev: true + + /spdy-transport/3.0.0_supports-color@6.1.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.3_supports-color@6.1.0 + detect-node: 2.0.5 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /spdy/4.0.2_supports-color@6.1.0: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.3_supports-color@6.1.0 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0_supports-color@6.1.0 + transitivePeerDependencies: + - supports-color + 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 + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /sshpk/1.16.1: + resolution: {integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.4 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + + /ssri/6.0.1: + resolution: {integrity: sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==} + dependencies: + figgy-pudding: 3.5.2 + dev: true + + /ssri/7.1.0: + resolution: {integrity: sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==} + engines: {node: '>= 8'} + dependencies: + figgy-pudding: 3.5.2 + minipass: 3.1.6 + dev: true + + /stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + dev: true + + /stackframe/1.2.0: + resolution: {integrity: sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==} + dev: true + + /staged-git-files/1.1.2: + resolution: {integrity: sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==} + hasBin: true + 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 + + /statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: true + + /stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /stream-each/1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} + dependencies: + end-of-stream: 1.4.4 + stream-shift: 1.0.1 + dev: true + + /stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: true + + /strict-uri-encode/1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /string-argv/0.0.2: + resolution: {integrity: sha512-p6/Mqq0utTQWUeGMi/m0uBtlLZEwXSY3+mXzeRRqw7fz5ezUb28Wr0R99NlfbWaMmL/jCyT9be4jpn7Yz8IO8w==} + engines: {node: '>=0.6.19'} + dev: true + + /string-width/1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width/2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.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.prototype.trimend/1.0.4: + resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string.prototype.trimstart/1.0.4: + resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-object/3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + 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/4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.0 + dev: true + + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.0 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-eof/1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-indent/2.0.0: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} + engines: {node: '>=4'} + 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 + + /stylehacks/4.0.3: + resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} + engines: {node: '>=6.9.0'} + dependencies: + browserslist: 4.19.1 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + 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/6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} + 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-runtime/1.4.7: + resolution: {integrity: sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==} + dependencies: + deepmerge: 1.3.2 + mitt: 1.1.2 + svg-baker: 1.7.0 + 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.9.0 + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.6 + dev: true + + /svg-sprite-loader/6.0.2: + resolution: {integrity: sha512-uh16i2TBfd6QM/nEIMF++e7mJtz1rersRs7vlZYIbwmPnP7jSfRtWflijfnCB4i1YABX7WYsDaDS8k7lcmLIyA==} + engines: {node: '>=6'} + dependencies: + bluebird: 3.7.2 + deepmerge: 1.3.2 + domready: 1.0.8 + escape-string-regexp: 1.0.5 + loader-utils: 1.4.0 + svg-baker: 1.7.0 + svg-baker-runtime: 1.4.7 + url-slug: 2.0.0 + dev: true + + /svg-tags/1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true + + /svgo/1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.5 + object.values: 1.1.3 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: true + + /symbol-observable/1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: true + + /synchronous-promise/2.0.15: + resolution: {integrity: sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==} + dev: true + + /table/5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + dev: true + + /tapable/0.1.10: + resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==} + engines: {node: '>=0.6'} + dev: true + + /tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: true + + /terser-webpack-plugin/1.4.5_webpack@4.46.0: + resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 4.0.0 + source-map: 0.6.1 + terser: 4.8.0 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + dev: true + + /terser-webpack-plugin/2.3.8_webpack@4.46.0: + resolution: {integrity: sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cacache: 13.0.1 + find-cache-dir: 3.3.1 + jest-worker: 25.5.0 + p-limit: 2.3.0 + schema-utils: 2.7.1 + serialize-javascript: 4.0.0 + source-map: 0.6.1 + terser: 4.8.0 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-sources: 1.4.3 + dev: true + + /terser/4.8.0: + resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.19 + 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 + + /thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /thread-loader/2.1.3_webpack@4.46.0: + resolution: {integrity: sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==} + engines: {node: '>= 6.9.0 <7.0.0 || >= 8.9.0'} + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + loader-runner: 2.4.0 + loader-utils: 1.4.0 + neo-async: 2.6.2 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /throttle-debounce/1.1.0: + resolution: {integrity: sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==} + engines: {node: '>=4'} + dev: false + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: true + + /through2/4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.0 + dev: true + + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: true + + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + + /timsort/0.3.0: + resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + dev: true + + /tiny-emitter/2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + dev: false + + /tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /to-arraybuffer/1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /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 + + /toidentifier/1.0.0: + resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + engines: {node: '>=0.6'} + dev: true + + /toposort/1.0.7: + resolution: {integrity: sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==} + dev: true + + /toposort/2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + dev: true + + /tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + dev: true + + /traverse/0.6.6: + resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==} + dev: true + + /trim-newlines/3.0.0: + resolution: {integrity: sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==} + engines: {node: '>=8'} + dev: true + + /trim-off-newlines/1.0.1: + resolution: {integrity: sha512-cklgulxoLavCJlZSWdKzEuKFRFwyRUS3h4tfvSo8uSGrtrPNcAHeKmftGuA684vonXdvKgdX6cMKF8SBjywN1w==} + engines: {node: '>=0.10.0'} + dev: true + + /tryer/1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: true + + /ts-loader/6.2.2_typescript@4.4.4: + resolution: {integrity: sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==} + engines: {node: '>=8.6'} + peerDependencies: + typescript: '*' + dependencies: + chalk: 2.4.2 + enhanced-resolve: 4.5.0 + loader-utils: 1.4.0 + micromatch: 4.0.2 + semver: 6.3.0 + typescript: 4.4.4 + dev: true + + /ts-pnp/1.2.0_typescript@4.4.4: + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} + engines: {node: '>=6'} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 4.4.4 + dev: true + + /tsconfig-paths/3.9.0: + resolution: {integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + dev: false + + /tslint/5.20.1_typescript@4.4.4: + resolution: {integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==} + engines: {node: '>=4.8.0'} + hasBin: true + peerDependencies: + typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' + dependencies: + '@babel/code-frame': 7.16.7 + builtin-modules: 1.1.1 + chalk: 2.4.2 + commander: 2.20.3 + diff: 4.0.2 + glob: 7.1.6 + js-yaml: 3.14.1 + minimatch: 3.0.4 + mkdirp: 0.5.5 + resolve: 1.22.0 + semver: 5.7.1 + tslib: 1.14.1 + tsutils: 2.29.0_typescript@4.4.4 + typescript: 4.4.4 + dev: true + + /tsutils/2.29.0_typescript@4.4.4: + resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} + peerDependencies: + typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' + dependencies: + tslib: 1.14.1 + typescript: 4.4.4 + dev: true + + /tsutils/3.21.0_typescript@4.4.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.4.4 + dev: true + + /tty-browserify/0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: true + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-fest/0.11.0: + resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} + engines: {node: '>=8'} + 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.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 + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.29 + dev: true + + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript/4.4.4: + resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /uglify-js/3.4.10: + resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + commander: 2.19.0 + source-map: 0.6.1 + dev: true + + /unbox-primitive/1.0.0: + resolution: {integrity: sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==} + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + dev: true + + /unicode-canonical-property-names-ecmascript/1.0.4: + resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript/1.0.4: + resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 1.0.4 + unicode-property-aliases-ecmascript: 1.1.0 + dev: true + + /unicode-match-property-value-ecmascript/1.2.0: + resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript/1.1.0: + resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} + engines: {node: '>=4'} + dev: true + + /unidecode/0.1.8: + resolution: {integrity: sha512-SdoZNxCWpN2tXTCrGkPF/0rL2HEq+i2gwRG1ReBvx8/0yTzC3enHfugOf8A9JBShVwwrRIkLX0YcDUGbzjbVCA==} + engines: {node: '>= 0.4.12'} + 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 + + /uniq/1.0.1: + resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} + dev: true + + /uniqs/2.0.0: + resolution: {integrity: sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==} + dev: true + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: true + + /unplugin-auto-import/0.6.1: + resolution: {integrity: sha512-rSukyyROmSkqL9tjkA88oLhpG4tXYkk2rTpqGaYKjXRNktHEKf03pit8bamPt95KPVfMLjT0+TPKi6ju0toOIw==} + engines: {node: '>=14'} + peerDependencies: + '@vueuse/core': '*' + peerDependenciesMeta: + '@vueuse/core': + optional: true + dependencies: + '@antfu/utils': 0.5.0 + '@rollup/pluginutils': 4.1.2 + local-pkg: 0.4.1 + magic-string: 0.25.7 + resolve: 1.22.0 + unplugin: 0.3.3 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + dev: true + + /unplugin-vue-components/0.17.21_vue@2.6.14: + resolution: {integrity: sha512-jkXksUF6zkNbzHQbw1DdrsQyVoMZGESRZDIGd9x7nUP+65nHdpBCY/JmlxSjKbuTrOwfMsk6FQFa0RpRueOCKg==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@babel/traverse': ^7.15.4 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@babel/traverse': + optional: true + dependencies: + '@antfu/utils': 0.4.0 + '@rollup/pluginutils': 4.1.2 + chokidar: 3.5.3 + debug: 4.3.3 + fast-glob: 3.2.11 + local-pkg: 0.4.1 + magic-string: 0.25.7 + minimatch: 3.0.4 + resolve: 1.22.0 + unplugin: 0.3.3 + vue: 2.6.14 + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - vite + - webpack + dev: true + + /unplugin/0.3.3: + resolution: {integrity: sha512-WjZWpUqqcYPQ/efR00Zm2m1+J1LitwoZ4uhHV4VdZ+IpW0Nh/qnDYtVf+nLhozXdGxslMPecOshVR7NiWFl4gA==} + peerDependencies: + esbuild: '>=0.13' + rollup: ^2.50.0 + vite: ^2.3.0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + webpack-virtual-modules: 0.4.3 + dev: true + + /unquote/1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + 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 + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /upper-case/1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + 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 + + /url-loader/2.3.0_file-loader@4.3.0+webpack@4.46.0: + resolution: {integrity: sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==} + engines: {node: '>= 8.9.0'} + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 + peerDependenciesMeta: + file-loader: + optional: true + dependencies: + file-loader: 4.3.0_webpack@4.46.0 + loader-utils: 1.4.0 + mime: 2.5.2 + schema-utils: 2.7.1 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /url-parse/1.5.1: + resolution: {integrity: sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + + /url-slug/2.0.0: + resolution: {integrity: sha512-aiNmSsVgrjCiJ2+KWPferjT46YFKoE8i0YX04BlMVDue022Xwhg/zYlnZ6V9/mP3p8Wj7LEp0myiTkC/p6sxew==} + dependencies: + unidecode: 0.1.8 + dev: true + + /url/0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + 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 + + /util.promisify/1.0.0: + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} + dependencies: + define-properties: 1.1.3 + object.getownpropertydescriptors: 2.1.2 + dev: true + + /util.promisify/1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.1.3 + es-abstract: 1.18.0 + has-symbols: 1.0.2 + object.getownpropertydescriptors: 2.1.2 + dev: true + + /util/0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: true + + /util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: true + + /utila/0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: true + + /utility-types/3.10.0: + resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} + engines: {node: '>= 4'} + dev: false + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: true + + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + 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 + + /vendors/1.0.4: + resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} + dev: true + + /verror/1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.0 + dev: true + + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + + /vue-class-component/7.2.6_vue@2.6.14: + resolution: {integrity: sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==} + peerDependencies: + vue: ^2.0.0 + dependencies: + vue: 2.6.14 + dev: false + + /vue-code-diff/0.0.4: + resolution: {integrity: sha512-yLcHrPu5LRw2knLHGvrRIQvC7qB9UUGsxzBrVKK/QIIHhsr1nN0Kn1cIZjTK+A7i9WGVZrWBHDbxHnRuGhmf3Q==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dependencies: + diff: 3.5.0 + diff2html: 2.12.2 + highlight.js: 9.18.5 + vue: 2.6.14 + dev: false + + /vue-demi/0.7.5_754e46187ed83907f5ece86281f7cd16: + resolution: {integrity: sha512-eFSQSvbQdY7C9ujOzvM6tn7XxwLjn0VQDXQsiYBLBwf28Na+2nTQR4BBBcomhmdP6mmHlBKAwarq6a0BPG87hQ==} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-beta.1 + vue: ^2.6.0 || >=3.0.0-rc.1 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + '@vue/composition-api': 1.0.0-rc.6_vue@2.6.14 + vue: 2.6.14 + dev: false + + /vue-eslint-parser/7.6.0_eslint@6.8.0: + resolution: {integrity: sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==} + engines: {node: '>=8.10'} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + debug: 4.3.3 + eslint: 6.8.0 + eslint-scope: 5.1.1 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.4.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + + /vue-hot-reload-api/2.3.4: + resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==} + dev: true + + /vue-i18n/8.24.1: + resolution: {integrity: sha512-iqM+npjvI9SGOAYkw1Od/y4O74gpvn5WOHeb3K125TmDJssvR62tDMMLIasPmKNbePZ1BMZ6d5jOBsrB/cK8Lw==} + dev: false + + /vue-loader/15.9.6_679359cdb69c218f2f8f476b2ba08796: + resolution: {integrity: sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==} + peerDependencies: + cache-loader: '*' + css-loader: '*' + vue-template-compiler: '*' + webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + cache-loader: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@vue/component-compiler-utils': 3.2.0 + cache-loader: 4.1.0_webpack@4.46.0 + css-loader: 3.6.0_webpack@4.46.0 + hash-sum: 1.0.2 + loader-utils: 1.4.0 + vue-hot-reload-api: 2.3.4 + vue-style-loader: 4.1.3 + vue-template-compiler: 2.6.14 + webpack: 4.46.0_webpack-cli@4.9.2 + dev: true + + /vue-property-decorator/8.5.1_vue@2.6.14: + resolution: {integrity: sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q==} + peerDependencies: + vue: '*' + dependencies: + vue: 2.6.14 + vue-class-component: 7.2.6_vue@2.6.14 + dev: false + + /vue-router/3.5.1: + resolution: {integrity: sha512-RRQNLT8Mzr8z7eL4p7BtKvRaTSGdCbTy2+Mm5HTJvLGYSSeG9gDzNasJPP/yOYKLy+/cLG/ftrqq5fvkFwBJEw==} + dev: false + + /vue-style-loader/4.1.3: + resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==} + dependencies: + hash-sum: 1.0.2 + loader-utils: 1.4.0 + dev: true + + /vue-template-compiler/2.6.14: + resolution: {integrity: sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-template-es2015-compiler/1.9.1: + resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==} + dev: true + + /vue/2.6.14: + resolution: {integrity: sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==} + dev: false + + /vue2-animate/1.0.4: + resolution: {integrity: sha512-m0/0scgYOe5k7VcjsH5n6vHyfbI+XyeTyG6cT2LaNxGsh2ub8s8ZG6N3i1+0bJieldNk/awsNBx1EG13IJ7jPQ==} + dev: false + + /vuedraggable/2.24.3: + resolution: {integrity: sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==} + dependencies: + sortablejs: 1.10.2 + dev: false + + /vuex/3.6.2_vue@2.6.14: + resolution: {integrity: sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==} + peerDependencies: + vue: ^2.0.0 + dependencies: + vue: 2.6.14 + dev: false + + /watchpack-chokidar2/2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + requiresBuild: true + dependencies: + chokidar: 2.1.8 + dev: true + optional: true + + /watchpack/1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + dependencies: + graceful-fs: 4.2.9 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.5.3 + watchpack-chokidar2: 2.0.1 + dev: true + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: true + + /wcwidth/1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.3 + dev: true + + /webpack-bundle-analyzer/3.9.0: + resolution: {integrity: sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==} + engines: {node: '>= 6.14.4'} + hasBin: true + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + bfj: 6.1.2 + chalk: 2.4.2 + commander: 2.20.3 + ejs: 2.7.4 + express: 4.17.1 + filesize: 3.6.1 + gzip-size: 5.1.1 + lodash: 4.17.21 + mkdirp: 0.5.5 + opener: 1.5.2 + ws: 6.2.1 + dev: true + + /webpack-chain/6.5.1: + resolution: {integrity: sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==} + engines: {node: '>=8'} + dependencies: + deepmerge: 1.5.2 + javascript-stringify: 2.0.1 + dev: true + + /webpack-cli/4.9.2: + resolution: {integrity: sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 1.1.1_webpack-cli@4.9.2 + '@webpack-cli/info': 1.4.1_webpack-cli@4.9.2 + '@webpack-cli/serve': 1.6.1_webpack-cli@4.9.2 + colorette: 2.0.16 + commander: 7.2.0 + execa: 5.1.1 + fastest-levenshtein: 1.0.12 + import-local: 3.1.0 + interpret: 2.2.0 + rechoir: 0.7.1 + webpack-merge: 5.8.0 + dev: true + + /webpack-dev-middleware/3.7.3_webpack@4.46.0: + resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} + engines: {node: '>= 6'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + memory-fs: 0.4.1 + mime: 2.5.2 + mkdirp: 0.5.5 + range-parser: 1.2.1 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-log: 2.0.0 + dev: true + + /webpack-dev-server/3.11.2_webpack-cli@4.9.2+webpack@4.46.0: + resolution: {integrity: sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==} + engines: {node: '>= 6.11.5'} + hasBin: true + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + ansi-html: 0.0.7 + bonjour: 3.5.0 + chokidar: 2.1.8 + compression: 1.7.4 + connect-history-api-fallback: 1.6.0 + debug: 4.3.3_supports-color@6.1.0 + del: 4.1.1 + express: 4.17.1 + html-entities: 1.4.0 + http-proxy-middleware: 0.19.1_debug@4.3.3 + import-local: 2.0.0 + internal-ip: 4.3.0 + ip: 1.1.5 + is-absolute-url: 3.0.3 + killable: 1.0.1 + loglevel: 1.7.1 + opn: 5.5.0 + p-retry: 3.0.1 + portfinder: 1.0.28 + schema-utils: 1.0.0 + selfsigned: 1.10.8 + semver: 6.3.0 + serve-index: 1.9.1 + sockjs: 0.3.21 + sockjs-client: 1.5.0 + spdy: 4.0.2_supports-color@6.1.0 + strip-ansi: 3.0.1 + supports-color: 6.1.0 + url: 0.11.0 + webpack: 4.46.0_webpack-cli@4.9.2 + webpack-cli: 4.9.2 + webpack-dev-middleware: 3.7.3_webpack@4.46.0 + webpack-log: 2.0.0 + ws: 6.2.1 + yargs: 13.3.2 + dev: true + + /webpack-log/2.0.0: + resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} + engines: {node: '>= 6'} + dependencies: + ansi-colors: 3.2.4 + uuid: 3.4.0 + dev: true + + /webpack-merge/4.2.2: + resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==} + dependencies: + lodash: 4.17.21 + dev: true + + /webpack-merge/5.8.0: + resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.0 + dev: true + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-virtual-modules/0.4.3: + resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} + dev: true + + /webpack/4.46.0_webpack-cli@4.9.2: + resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + chrome-trace-event: 1.0.2 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.0 + memory-fs: 0.4.1 + micromatch: 3.1.10 + mkdirp: 0.5.5 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.5_webpack@4.46.0 + watchpack: 1.7.5 + webpack-cli: 4.9.2 + webpack-sources: 1.4.3 + dev: true + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.3 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: true + + /whatwg-fetch/3.6.2: + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + dev: false + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.1 + is-boolean-object: 1.1.0 + is-number-object: 1.0.4 + is-string: 1.0.5 + is-symbol: 1.0.3 + dev: true + + /which-module/2.0.0: + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + dev: true + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wildcard/2.0.0: + resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /worker-farm/1.7.0: + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} + dependencies: + errno: 0.1.8 + dev: true + + /worker-rpc/0.1.1: + resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==} + dependencies: + microevent.ts: 0.1.1 + dev: true + + /wrap-ansi/3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + dev: true + + /wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + 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 + + /write/1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + dependencies: + mkdirp: 0.5.5 + dev: true + + /ws/6.2.1: + resolution: {integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==} + dependencies: + async-limiter: 1.0.1 + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n/4.0.1: + resolution: {integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==} + dev: true + + /y18n/5.0.5: + resolution: {integrity: sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==} + engines: {node: '>=10'} + dev: true + + /yallist/2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + 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/13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser/20.2.7: + resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} + engines: {node: '>=10'} + dev: true + + /yargs/13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 13.1.2 + dev: true + + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 18.1.3 + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + 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.5 + yargs-parser: 20.2.7 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yorkie/2.0.0: + resolution: {integrity: sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==} + engines: {node: '>=4'} + requiresBuild: true + dependencies: + execa: 0.8.0 + is-ci: 1.2.1 + normalize-path: 1.0.0 + strip-indent: 2.0.0 + dev: true + + /yup/0.27.0: + resolution: {integrity: sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==} + dependencies: + '@babel/runtime': 7.13.10 + fn-name: 2.0.1 + lodash: 4.17.21 + property-expr: 1.5.1 + synchronous-promise: 2.0.15 + toposort: 2.0.2 + dev: true + + /zrender/5.3.1: + resolution: {integrity: sha512-7olqIjy0gWfznKr6vgfnGBk7y4UtdMvdwFmK92vVQsQeDPyzkHW1OlrLEKg6GHz1W5ePf0FeN1q2vkl/HFqhXw==} + dependencies: + tslib: 2.3.0 + dev: false diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..2a4be9b --- /dev/null +++ b/public/index.html @@ -0,0 +1,31 @@ + + + + + + + + + 多云集中纳管系统 + + + + + +
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/script/index.js b/script/index.js new file mode 100644 index 0000000..97def61 --- /dev/null +++ b/script/index.js @@ -0,0 +1,12 @@ +const exec = require('child_process').exec; +const params = process.argv[2]; +const str = `git subtree ${params || 'pull'} --prefix=src/common http://haijun@58.210.154.140:8888/web/cmp-common.git master --squash` +exec(str, function (err, stdout, stderr) { + if (err) { + console.log('======执行失败======='); + console.log(err) + } else { + console.log('======执行成功======='); + console.log(stdout); + } +}); diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..a2bc031 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,48 @@ + + + + diff --git a/src/assets/avatar_default.png b/src/assets/avatar_default.png new file mode 100644 index 0000000..c113405 Binary files /dev/null and b/src/assets/avatar_default.png differ diff --git a/src/assets/create_task.png b/src/assets/create_task.png new file mode 100644 index 0000000..56a275e Binary files /dev/null and b/src/assets/create_task.png differ diff --git a/src/assets/execute_task.png b/src/assets/execute_task.png new file mode 100644 index 0000000..27e1fa8 Binary files /dev/null and b/src/assets/execute_task.png differ diff --git a/src/assets/result_task.png b/src/assets/result_task.png new file mode 100644 index 0000000..2936647 Binary files /dev/null and b/src/assets/result_task.png differ diff --git a/src/assets/role.png b/src/assets/role.png new file mode 100644 index 0000000..4859fe6 Binary files /dev/null and b/src/assets/role.png differ diff --git a/src/assets/rule.png b/src/assets/rule.png new file mode 100644 index 0000000..6e64edb Binary files /dev/null and b/src/assets/rule.png differ diff --git a/src/assets/tpl_task.png b/src/assets/tpl_task.png new file mode 100644 index 0000000..b98c42e Binary files /dev/null and b/src/assets/tpl_task.png differ diff --git a/src/common/commonData.js b/src/common/commonData.js new file mode 100644 index 0000000..af77401 --- /dev/null +++ b/src/common/commonData.js @@ -0,0 +1,53 @@ +/** + * Created by Zhang Haijun on 2017/8/31. + */ +export const taskExeOptions = { + RUNNING: ' 正在执行', + SUCCESS: '执行成功', + FAILED: '执行失败', + EXCEPTION: ' 执行异常', + CANCELED: '手动结束', + SUSPENDED: '已暂停' +} +export const authenModeOptions = { + BATCH: '批量认证', + TRUST: '互信认证', + SINGLE: '单一认证' +} +export const environmentData = { + DEVELOP: '开发环境', + TEST: '测试环境', + PRODUCTION: '生产环境', + READY: '预发环境', + UAT: 'UAT环境' +} +export const networkType = { + 0: '容器镜像', + 1: '虚拟机镜像', + 2: 'rpm安装', + 3: '应用程序包', + 4: '其他' +} +export const httpMethod = ['GET', 'POST', 'PUT', 'DELETE'] +export const httpFormat = ['RAW', 'FORM_DATA', 'FORM_URLENCODED', 'BINARY'] +export const scriptTypeData = [ + { name: 'shell', value: 'SHELL' }, + { name: 'bat', value: 'BAT' }, + { name: 'perl', value: 'PERL' }, + { name: 'python', value: 'PYTHON' }, + { name: 'playbook', value: 'PLAYBOOK' }, + { name: 'powershell', value: 'POWERSHELL' } +] + +export const hostType = { + MAINFRAME: '大型机', + MINICOMPUTER: '小型机', + PC: 'PC', + X86: 'X86服务器' +} +export const funData = [{ name: 'mean' }, { name: 'median' }, { name: 'count' }, { name: 'min' }, { name: 'max' }, { name: 'sum' }, { name: 'first' }, { name: 'last' }, { name: 'spread' }, { name: 'stddev' }] + +export const processLevel = [ + { name: '一般', value: 'COMMON' }, + { name: '紧急', value: 'EMERGENCY' } +] diff --git a/src/common/components/TimeSelect.vue b/src/common/components/TimeSelect.vue new file mode 100644 index 0000000..d437d98 --- /dev/null +++ b/src/common/components/TimeSelect.vue @@ -0,0 +1,118 @@ + + + diff --git a/src/common/components/basic-input/BasicInput.vue b/src/common/components/basic-input/BasicInput.vue new file mode 100644 index 0000000..ca1c5ec --- /dev/null +++ b/src/common/components/basic-input/BasicInput.vue @@ -0,0 +1,72 @@ + + + + diff --git a/src/common/components/basic-input/index.js b/src/common/components/basic-input/index.js new file mode 100644 index 0000000..b885409 --- /dev/null +++ b/src/common/components/basic-input/index.js @@ -0,0 +1,5 @@ +import BasicInput from './BasicInput.vue' +BasicInput.install = function (Vue) { + Vue.component('BasicInput', BasicInput) +} +export default BasicInput diff --git a/src/common/components/group-transfer/index.vue b/src/common/components/group-transfer/index.vue new file mode 100644 index 0000000..9869516 --- /dev/null +++ b/src/common/components/group-transfer/index.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/src/common/components/icon-select/elementIcons.js b/src/common/components/icon-select/elementIcons.js new file mode 100644 index 0000000..a31b836 --- /dev/null +++ b/src/common/components/icon-select/elementIcons.js @@ -0,0 +1,3 @@ +const elementIcons = ['platform-eleme', 'eleme', 'delete-solid', 'delete', 's-tools', 'setting', 'user-solid', 'user', 'phone', 'phone-outline', 'more', 'more-outline', 'star-on', 'star-off', 's-goods', 'goods', 'warning', 'warning-outline', 'question', 'info', 'remove', 'circle-plus', 'success', 'error', 'zoom-in', 'zoom-out', 'remove-outline', 'circle-plus-outline', 'circle-check', 'circle-close', 's-help', 'help', 'minus', 'plus', 'check', 'close', 'picture', 'picture-outline', 'picture-outline-round', 'upload', 'upload2', 'download', 'camera-solid', 'camera', 'video-camera-solid', 'video-camera', 'message-solid', 'bell', 's-cooperation', 's-order', 's-platform', 's-fold', 's-unfold', 's-operation', 's-promotion', 's-home', 's-release', 's-ticket', 's-management', 's-open', 's-shop', 's-marketing', 's-flag', 's-comment', 's-finance', 's-claim', 's-custom', 's-opportunity', 's-data', 's-check', 's-grid', 'menu', 'share', 'd-caret', 'caret-left', 'caret-right', 'caret-bottom', 'caret-top', 'bottom-left', 'bottom-right', 'back', 'right', 'bottom', 'top', 'top-left', 'top-right', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'd-arrow-left', 'd-arrow-right', 'video-pause', 'video-play', 'refresh', 'refresh-right', 'refresh-left', 'finished', 'sort', 'sort-up', 'sort-down', 'rank', 'view', 'c-scale-to-original', 'date', 'edit', 'edit-outline', 'folder', 'folder-opened', 'folder-add', 'folder-remove', 'folder-delete', 'folder-checked', 'tickets', 'document-remove', 'document-delete', 'document-copy', 'document-checked', 'document', 'document-add', 'printer', 'paperclip', 'takeaway-box', 'search', 'monitor', 'attract', 'mobile', 'scissors', 'umbrella', 'headset', 'brush', 'mouse', 'coordinate', 'magic-stick', 'reading', 'data-line', 'data-board', 'pie-chart', 'data-analysis', 'collection-tag', 'film', 'suitcase', 'suitcase-1', 'receiving', 'collection', 'files', 'notebook-1', 'notebook-2', 'toilet-paper', 'office-building', 'school', 'table-lamp', 'house', 'no-smoking', 'smoking', 'shopping-cart-full', 'shopping-cart-1', 'shopping-cart-2', 'shopping-bag-1', 'shopping-bag-2', 'sold-out', 'sell', 'present', 'box', 'bank-card', 'money', 'coin', 'wallet', 'discount', 'price-tag', 'news', 'guide', 'male', 'female', 'thumb', 'cpu', 'link', 'connection', 'open', 'turn-off', 'set-up', 'chat-round', 'chat-line-round', 'chat-square', 'chat-dot-round', 'chat-dot-square', 'chat-line-square', 'message', 'postcard', 'position', 'turn-off-microphone', 'microphone', 'close-notification', 'bangzhu', 'time', 'odometer', 'crop', 'aim', 'switch-button', 'full-screen', 'copy-document', 'mic', 'stopwatch', 'medal-1', 'medal', 'trophy', 'trophy-1', 'first-aid-kit', 'discover', 'place', 'location', 'location-outline', 'location-information', 'add-location', 'delete-location', 'map-location', 'alarm-clock', 'timer', 'watch-1', 'watch', 'lock', 'unlock', 'key', 'service', 'mobile-phone', 'bicycle', 'truck', 'ship', 'basketball', 'football', 'soccer', 'baseball', 'wind-power', 'light-rain', 'lightning', 'heavy-rain', 'sunrise', 'sunrise-1', 'sunset', 'sunny', 'cloudy', 'partly-cloudy', 'cloudy-and-sunny', 'moon', 'moon-night', 'dish', 'dish-1', 'food', 'chicken', 'fork-spoon', 'knife-fork', 'burger', 'tableware', 'sugar', 'dessert', 'ice-cream', 'hot-water', 'water-cup', 'coffee-cup', 'cold-drink', 'goblet', 'goblet-full', 'goblet-square', 'goblet-square-full', 'refrigerator', 'grape', 'watermelon', 'cherry', 'apple', 'pear', 'orange', 'coffee', 'ice-tea', 'ice-drink', 'milk-tea', 'potato-strips', 'lollipop', 'ice-cream-square', 'ice-cream-round'] + +export default elementIcons diff --git a/src/common/components/icon-select/index.vue b/src/common/components/icon-select/index.vue new file mode 100644 index 0000000..adeefb5 --- /dev/null +++ b/src/common/components/icon-select/index.vue @@ -0,0 +1,35 @@ + + diff --git a/src/common/components/icon-select/svgIcons.js b/src/common/components/icon-select/svgIcons.js new file mode 100644 index 0000000..477fc1b --- /dev/null +++ b/src/common/components/icon-select/svgIcons.js @@ -0,0 +1,18 @@ + +// webpack +// const req = require.context('@/icons/svg', false, /\.svg$/) +// const requireAll = requireContext => requireContext.keys() + +// const re = /\.\/(.*)\.svg/; + +// const svgIcons = requireAll(req).map(i => { +// return i.match(re)[1] +// }) +// vite +// const req = import.meta.globEager('/src/icons/svg/*.svg') +// const re = /\/svg\/(.*)\.svg/ +// const svgIcons = Object.keys(req).map(i => { +// return i.match(re)[1] +// }) + +export default ['svg-about', 'svg-basic-resource', 'svg-bill', 'svg-business', 'svg-compute-resource', 'svg-db', 'svg-disabled', 'svg-dot', 'svg-middle', 'svg-network-resource', 'svg-operate', 'svg-ops-analysis', 'svg-order', 'svg-permission', 'svg-port', 'svg-product', 'svg-repository', 'svg-resource-interface', 'svg-resource-manage', 'svg-resource-monitor', 'svg-resource-ops', 'svg-screen', 'svg-security', 'svg-service-ops', 'svg-setting', 'svg-storage-resource', 'svg-task-platform'] diff --git a/src/common/components/image-cropper/index.vue b/src/common/components/image-cropper/index.vue new file mode 100644 index 0000000..2cba69a --- /dev/null +++ b/src/common/components/image-cropper/index.vue @@ -0,0 +1,1428 @@ + + + + + diff --git a/src/common/components/image-cropper/utils/data2blob.js b/src/common/components/image-cropper/utils/data2blob.js new file mode 100644 index 0000000..30684c9 --- /dev/null +++ b/src/common/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/common/components/image-cropper/utils/effectRipple.js b/src/common/components/image-cropper/utils/effectRipple.js new file mode 100644 index 0000000..85ae608 --- /dev/null +++ b/src/common/components/image-cropper/utils/effectRipple.js @@ -0,0 +1,39 @@ +/** + * 点击波纹效果 + * + * @param {[event]} e [description] + * @param {[Object]} arg_opts [description] + * @return {[bollean]} [description] + */ +export default function(e, arg_opts) { + var opts = Object.assign({ + ele: e.target, // 波纹作用元素 + type: 'hit', // hit点击位置扩散center中心点扩展 + bgc: 'rgba(0, 0, 0, 0.15)' // 波纹颜色 + }, arg_opts), + target = opts.ele; + if (target) { + var rect = target.getBoundingClientRect(), + 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/common/components/image-cropper/utils/language.js b/src/common/components/image-cropper/utils/language.js new file mode 100644 index 0000000..dedb5f0 --- /dev/null +++ b/src/common/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/common/components/image-cropper/utils/mimes.js b/src/common/components/image-cropper/utils/mimes.js new file mode 100644 index 0000000..4c916bd --- /dev/null +++ b/src/common/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/common/components/import-data/index.vue b/src/common/components/import-data/index.vue new file mode 100644 index 0000000..bcf0843 --- /dev/null +++ b/src/common/components/import-data/index.vue @@ -0,0 +1,87 @@ + + diff --git a/src/common/components/index.js b/src/common/components/index.js new file mode 100644 index 0000000..b364b8f --- /dev/null +++ b/src/common/components/index.js @@ -0,0 +1,14 @@ +import Vue from 'vue' +import TimeSelect from './TimeSelect.vue' +import RichCharts from './rich-chart/index.vue' +import SkuTable from './sku-table/index.vue' +import WsUploadFile from './upload-file/index.vue' +const components = { + TimeSelect, + RichCharts, + SkuTable, + WsUploadFile +} +Object.keys(components).forEach(key => { + Vue.component(key, components[key]); +}) diff --git a/src/common/components/rich-chart/index.vue b/src/common/components/rich-chart/index.vue new file mode 100644 index 0000000..18f0ea4 --- /dev/null +++ b/src/common/components/rich-chart/index.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/common/components/rich-chart/tools.js b/src/common/components/rich-chart/tools.js new file mode 100644 index 0000000..d4b97f8 --- /dev/null +++ b/src/common/components/rich-chart/tools.js @@ -0,0 +1,25 @@ +function base64ToBlob(code) { + const parts = code.split(';base64,') + const contentType = parts[0].split(':')[1] + const raw = window.atob(parts[1]) + const rawLength = raw.length + + const uInt8Array = new Uint8Array(rawLength) + + for (let i = 0; i < rawLength; ++i) { + uInt8Array[i] = raw.charCodeAt(i) + } + return new Blob([uInt8Array], { type: contentType }) +} +export const downloadFile = (fileName, content) => { + const aLink = document.createElement('a') + const blob = base64ToBlob(content) // new Blob([content]); + + const evt = document.createEvent('HTMLEvents') + evt.initEvent('click', true, true) // initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为 + aLink.download = fileName + aLink.href = URL.createObjectURL(blob) + // aLink.dispatchEvent(evt); + aLink.click() + aLink.remove() +} diff --git a/src/common/components/rich-text-editor/index.vue b/src/common/components/rich-text-editor/index.vue new file mode 100644 index 0000000..542d9be --- /dev/null +++ b/src/common/components/rich-text-editor/index.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/common/components/sku-table/index.vue b/src/common/components/sku-table/index.vue new file mode 100644 index 0000000..3514df6 --- /dev/null +++ b/src/common/components/sku-table/index.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/common/components/sku-table/utils.ts b/src/common/components/sku-table/utils.ts new file mode 100644 index 0000000..2e77a33 --- /dev/null +++ b/src/common/components/sku-table/utils.ts @@ -0,0 +1,32 @@ +export function modeUnitFilter(value:string) { + const map: any = { + Hour: '小时', + Month: '月', + Year: '年' + } + return map[value] +} +export function getPrice(sku:any, mode:string) { + const { spec, billPolicy, billable } = sku; + // 不开启计费 + if (!billable) return 0; + const key = `${mode.toLowerCase()}Price` + // 规格计费 + if (billPolicy !== 'agility') return sku[key]; + const basicPrice = JSON.parse(sku.basicPrice); + // 没有specName说明没有规格设置 + const flag = spec.every((item:any) => !item.specName || item.specValue); + // 无值直接返回 + if (!flag) return '/'; + // 获取数值map + const countMap:any = {}; + spec.forEach((item:any) => { + countMap[item.specName] = item.specValue; + }) + let totalPrice = 0; + basicPrice.forEach((item:any) => { + const { specName } = item; + totalPrice += item[key] * (countMap[specName] || 1) + }); + return totalPrice; +} diff --git a/src/common/components/top5/index.vue b/src/common/components/top5/index.vue new file mode 100644 index 0000000..24f7d25 --- /dev/null +++ b/src/common/components/top5/index.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/common/components/upload-file/index.vue b/src/common/components/upload-file/index.vue new file mode 100644 index 0000000..77ad776 --- /dev/null +++ b/src/common/components/upload-file/index.vue @@ -0,0 +1,105 @@ + + + diff --git a/src/common/components/utils/Export2Excel.js b/src/common/components/utils/Export2Excel.js new file mode 100644 index 0000000..d071cfc --- /dev/null +++ b/src/common/components/utils/Export2Excel.js @@ -0,0 +1,220 @@ +/* eslint-disable */ +import { saveAs } from 'file-saver' +import XLSX from 'xlsx' + +function generateArray(table) { + var out = []; + var rows = table.querySelectorAll('tr'); + var ranges = []; + for (var R = 0; R < rows.length; ++R) { + var outRow = []; + var row = rows[R]; + var columns = row.querySelectorAll('td'); + for (var C = 0; C < columns.length; ++C) { + var cell = columns[C]; + var colspan = cell.getAttribute('colspan'); + var rowspan = cell.getAttribute('rowspan'); + var cellValue = cell.innerText; + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; + + //Skip ranges + ranges.forEach(function (range) { + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); + } + }); + + //Handle Row Span + if (rowspan || colspan) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({ + s: { + r: R, + c: outRow.length + }, + e: { + r: R + rowspan - 1, + c: outRow.length + colspan - 1 + } + }); + }; + + //Handle Value + outRow.push(cellValue !== "" ? cellValue : null); + + //Handle Colspan + if (colspan) + for (var k = 0; k < colspan - 1; ++k) outRow.push(null); + } + out.push(outRow); + } + return [out, ranges]; +}; + +function datenum(v, date1904) { + if (date1904) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); +} + +function sheet_from_array_of_arrays(data, opts) { + var ws = {}; + var range = { + s: { + c: 10000000, + r: 10000000 + }, + e: { + c: 0, + r: 0 + } + }; + for (var R = 0; R != data.length; ++R) { + for (var C = 0; C != data[R].length; ++C) { + if (range.s.r > R) range.s.r = R; + if (range.s.c > C) range.s.c = C; + if (range.e.r < R) range.e.r = R; + if (range.e.c < C) range.e.c = C; + var cell = { + v: data[R][C] + }; + if (cell.v == null) continue; + var cell_ref = XLSX.utils.encode_cell({ + c: C, + r: R + }); + + if (typeof cell.v === 'number') cell.t = 'n'; + else if (typeof cell.v === 'boolean') cell.t = 'b'; + else if (cell.v instanceof Date) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = datenum(cell.v); + } else cell.t = 's'; + + ws[cell_ref] = cell; + } + } + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; +} + +function Workbook() { + if (!(this instanceof Workbook)) return new Workbook(); + this.SheetNames = []; + this.Sheets = {}; +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +export function export_table_to_excel(id) { + var theTable = document.getElementById(id); + var oo = generateArray(theTable); + var ranges = oo[1]; + + /* original data */ + var data = oo[0]; + var ws_name = "SheetJS"; + + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + /* add ranges to worksheet */ + // ws['!cols'] = ['apple', 'banan']; + ws['!merges'] = ranges; + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: 'xlsx', + bookSST: false, + type: 'binary' + }); + + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), "test.xlsx") +} + +export function exportJsonToExcel({ + multiHeader = [], + header, + data, + filename, + merges = [], + autoWidth = true, + bookType = 'xlsx' +} = {}) { + /* original data */ + filename = filename || 'excel-list' + data = [...data] + data.unshift(header); + + for (let i = multiHeader.length - 1; i > -1; i--) { + data.unshift(multiHeader[i]) + } + + var ws_name = "SheetJS"; + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + if (merges.length > 0) { + if (!ws['!merges']) ws['!merges'] = []; + merges.forEach(item => { + ws['!merges'].push(XLSX.utils.decode_range(item)) + }) + } + + if (autoWidth) { + /*设置worksheet每列的最大宽度*/ + const colWidth = data.map(row => row.map(val => { + /*先判断是否为null/undefined*/ + if (val == null) { + return { + 'wch': 10 + }; + } + /*再判断是否为中文*/ + else if (val.toString().charCodeAt(0) > 255) { + return { + 'wch': val.toString().length * 2 + }; + } else { + return { + 'wch': val.toString().length + }; + } + })) + /*以第一行为初始值*/ + let result = colWidth[0]; + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j]['wch'] < colWidth[i][j]['wch']) { + result[j]['wch'] = colWidth[i][j]['wch']; + } + } + } + ws['!cols'] = result; + } + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: bookType, + bookSST: false, + type: 'binary' + }); + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), `${filename}.${bookType}`); +} diff --git a/src/common/components/utils/request.js b/src/common/components/utils/request.js new file mode 100644 index 0000000..b6f78b5 --- /dev/null +++ b/src/common/components/utils/request.js @@ -0,0 +1,103 @@ +/** + * 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 qs from 'qs' + +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/x-www-form-urlencoded', BsmAjaxHeader: true }, + timeout: 20000, + paramsSerializer: params => { + return qs.stringify(params, { arrayFormat: 'indices' }) + } +}) +// 请求完成回调 +const finishCallback = function () { +} +// 报错处理 +const handleError = function (response) { + if (!response) return // 容错处理 + const errorText = codeMessage[response.status] || response.statusText + // Notification({ + // type: 'error', + // title: `请求错误 ${response.status}: ${response.config.url}`, + // message: errorText + // }) + const error = new Error(errorText) + error.name = response.status + error.response = response + throw error +} +axiosInstance.interceptors.request.use( + config => { + const { + headers: { options = {} } + } = config + if (config.method === 'get') { + // 清除get缓存 + config.url = `${config.url}?t=${new Date().getTime()}` + } + config.headers.token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiIxMjE0NTQ2NzgyIiwiY2F0YWxvZyI6Ik1hbmFnZXIiLCJuYW1lIjoi6LaF57qn566h55CG5ZGYIiwiZXhwIjoxNjIzODI5OTA1LCJ1dWlkIjoxLCJhY2NvdW50IjoiYWRtaW4ifQ.H1TLrKni0z4xp3M55SUbUyLImgELqrZhCYrPXoKmucY' + delete config.headers.options + config.options = options + return config + }, + error => { + return Promise.reject(error) + } +) +axiosInstance.interceptors.response.use( + data => { + // const requestKey = getRequestIdentify(data.config); + // removePending(requestKey); + finishCallback() + const responseData = data.data + const { options } = data.config + if (!responseData.success) { + switch (responseData.status) { + case '402': + location.href = '/#/license' + break + case '401': + case '509': + break + default: + } + if (!options.ignoreError) { + } + } + return responseData + }, + error => { + finishCallback() + handleError(error.response) + return Promise.reject(error) + } +) +export default axiosInstance diff --git a/src/common/components/utils/resolvePath.js b/src/common/components/utils/resolvePath.js new file mode 100644 index 0000000..f89e335 --- /dev/null +++ b/src/common/components/utils/resolvePath.js @@ -0,0 +1,13 @@ +/** + * Created by HaijunZhang on 2018/12/10. + */ +import path from 'path'; +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); +} diff --git a/src/common/components/utils/tools.js b/src/common/components/utils/tools.js new file mode 100644 index 0000000..0050f6b --- /dev/null +++ b/src/common/components/utils/tools.js @@ -0,0 +1,62 @@ +/** +* Created by Zhang Haijun on 2021/2/2. +*/ +// 查询参数封装优化 +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) +} +/** + * 判断字符类型 + * @param {*} word 字符 + * @returns 0:中文, 1: 英文, 2:数字, 3: 其他类型 + */ +export const getWordType = (word) => { + // 验证是否是中文 + const pattern0 = new RegExp('[\u4E00-\u9FA5]+'); + // 验证是否是英文 + const pattern1 = new RegExp('[A-Za-z]+'); + // 验证是否是数字 + const pattern2 = new RegExp('[0-9]+'); + + if (pattern0.test(word)) { + return 0 + } else if (pattern1.test(word)) { + return 1 + } else if (pattern2.test(word)) { + return 2 + } else { + return 3 + } +} diff --git a/src/common/css/common-var.scss b/src/common/css/common-var.scss new file mode 100644 index 0000000..39daa95 --- /dev/null +++ b/src/common/css/common-var.scss @@ -0,0 +1,4 @@ +/* Color +-------------------------- */ + +$--color-primary: #1E54D5; \ No newline at end of file diff --git a/src/common/css/common.scss b/src/common/css/common.scss new file mode 100644 index 0000000..9ec6be0 --- /dev/null +++ b/src/common/css/common.scss @@ -0,0 +1,40 @@ +.buy-btn { + position: fixed; + top: 58px; + right: 20px; +} + +.tip { + font-size: 12px; + color: #999; +} + +.el-message-box__message { + word-break: break-all; +} + +.viewer-container.viewer-backdrop { + z-index: 99999999999999 !important; +} + +.w { + width: 200px !important; +} + +.el-radio-button__orig-radio:checked+.el-radio-button__inner { + color: #409EFF; + background-color: #D5E8FC; + border-color: #409EFF; +} + +.el-radio-button__inner { + min-width: 80px; +} + +.el-drawer.rtl { + overflow: auto +} + +.tab-label-padding { + padding: 0 10px; +} \ No newline at end of file diff --git a/src/common/css/element-variables.scss b/src/common/css/element-variables.scss new file mode 100644 index 0000000..2bdccc8 --- /dev/null +++ b/src/common/css/element-variables.scss @@ -0,0 +1,8 @@ +/* 改变主题色变量 */ + +@import './common-var'; + +/* 改变 icon 字体路径变量,必需 */ + +$--font-path: '~element-ui/lib/theme-chalk/fonts'; +@import"~element-ui/packages/theme-chalk/src/index" \ No newline at end of file diff --git a/src/common/css/font.scss b/src/common/css/font.scss new file mode 100644 index 0000000..b1fc45c --- /dev/null +++ b/src/common/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/common/css/hack.scss b/src/common/css/hack.scss new file mode 100644 index 0000000..0fb2df6 --- /dev/null +++ b/src/common/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/common/css/index.scss b/src/common/css/index.scss new file mode 100644 index 0000000..31860f0 --- /dev/null +++ b/src/common/css/index.scss @@ -0,0 +1,4 @@ +@import './lib/index'; +@import './hack.scss'; +@import './font.scss'; +@import './common.scss'; \ No newline at end of file diff --git a/src/common/css/lib/button.scss b/src/common/css/lib/button.scss new file mode 100644 index 0000000..499ce84 --- /dev/null +++ b/src/common/css/lib/button.scss @@ -0,0 +1,29 @@ +.el-button--text { + padding: 0 !important; +} + +.el-button.el-button--text [class*=el-icon-]+span { + margin-left: 2px; +} + +.el-button--ghost { + color: #666; + background-color: #fff; + border-color: #d9d9d9; +} + +.el-button--ghost:focus, +.el-button--ghost:hover { + color: #2b85e4; + background-color: transparent; + border-color: #2b85e4; +} + +.el-button--ghost.is-disabled, +.el-button--ghost.is-disabled:active, +.el-button--ghost.is-disabled:focus, +.el-button--ghost.is-disabled:hover { + color: #bbb; + background-color: #f7f7f7; + border-color: #d9d9d9; +} \ No newline at end of file diff --git a/src/common/css/lib/common.scss b/src/common/css/lib/common.scss new file mode 100644 index 0000000..6f43b08 --- /dev/null +++ b/src/common/css/lib/common.scss @@ -0,0 +1,818 @@ +html, +body, +#app { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + font-size: 14px; + overflow: hidden !important; + font-family: Microsoft YaHei, Hiragino Sans GB; +} + +.app-wrapper { + position: relative; + width: 100%; + height: 100%; +} + +.wrapper { + box-shadow: none !important; +} + +.wrapper>.el-card__body { + padding: 15px; +} + +.wrapper-container { + padding: 8px; +} + +.wrapper-sm { + padding: 15px; +} + +.search-container { + position: relative; + padding: 15px !important; + border: 1px solid #ddd; + margin-bottom: 15px; +} + +.search-container>.legend { + color: rgba(18, 19, 20, 0.69); + background: #fff; + position: absolute; + text-align: center; + width: 78px; + top: -10px; + left: 15px; + font-size: 14px; +} + +.search-content>.search-item { + width: 20%; +} + +.pagination-container { + margin-top: 10px; + text-align: right; +} + +.iconfont { + font-size: 13px; +} + +.panel { + background-color: #fff; + margin-bottom: 15px; + border: 1px solid #dee5e7; +} + +.panel .panel-heading { + background-color: #edf1f2; + padding: 10px 15px; + border-bottom: 1px solid transparent; +} + +.panel .panel-body { + padding: 15px; +} + + +/*边距共有样式*/ + +.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; +} + + +/*详情表格*/ + +.detail-box { + margin-top: 10px; + margin-bottom: 10px; +} + +.detail-title { + margin-bottom: 15px; + text-indent: 8px; + border-left: 3px solid #88B7E0; + font-size: 14px; + font-weight: 600; +} + +.detail-href { + color: $--color-primary !important; + cursor: pointer; + text-decoration: none !important; +} + +.detail-table { + width: 100%; + border-collapse: collapse; +} + +.detail-table td.title { + color: #000; + width: 85px; + font-size: 12px; + font-weight: bold; +} + +.detail-table td, +.detail-table th { + padding: 6px 8px; + border: 1px solid #ddd; + min-width: 85px; + width: 250px; + word-break: break-all; + white-space: pre-wrap; + /*border: none;*/ +} + +.border-top-none { + border-top: none !important; +} + +a { + color: inherit; + cursor: pointer; + text-decoration: none; +} + +.bounce-enter-active, +.bounce-leave-active, +.bounceDown-enter-active, +.bounceDown-leave-active, +.bounceIn, +.bounceInDown, +.bounceInLeft, +.bounceInRight, +.bounceInUp, +.bounceLeft-enter-active, +.bounceLeft-leave-active, +.bounceOut, +.bounceOutDown, +.bounceOutLeft, +.bounceOutRight, +.bounceOutUp, +.bounceRight-enter-active, +.bounceRight-leave-active, +.bounceUp-enter-active, +.bounceUp-leave-active, +.fade-enter-active, +.fade-leave-active, +.fadeDown-enter-active, +.fadeDown-leave-active, +.fadeDownBig-enter-active, +.fadeDownBig-leave-active, +.fadeIn, +.fadeInDown, +.fadeInDownBig, +.fadeInLeft, +.fadeInLeftBig, +.fadeInRight, +.fadeInRightBig, +.fadeInUp, +.fadeInUpBig, +.fadeLeft-enter-active, +.fadeLeft-leave-active, +.fadeLeftBig-enter-active, +.fadeLeftBig-leave-active, +.fadeOut, +.fadeOutDown, +.fadeOutDownBig, +.fadeOutLeft, +.fadeOutLeftBig, +.fadeOutRight, +.fadeOutRightBig, +.fadeOutUp, +.fadeOutUpBig, +.fadeRight-enter-active, +.fadeRight-leave-active, +.fadeRightBig-enter-active, +.fadeRightBig-leave-active, +.fadeUp-enter-active, +.fadeUp-leave-active, +.fadeUpBig-enter-active, +.fadeUpBig-leave-active, +.rotateDownLeft-enter-active, +.rotateDownLeft-leave-active, +.rotateDownRight-enter-active, +.rotateDownRight-leave-active, +.rotateInDownLeft, +.rotateInDownRight, +.rotateInUpLeft, +.rotateInUpRight, +.rotateOutDownLeft, +.rotateOutDownRight, +.rotateOutUpLeft, +.rotateOutUpRight, +.rotateUpLeft-enter-active, +.rotateUpLeft-leave-active, +.rotateUpRight-enter-active, +.rotateUpRight-leave-active, +.slide-enter-active, +.slide-leave-active, +.slideDown-enter-active, +.slideDown-leave-active, +.slideIn, +.slideInDown, +.slideInLeft, +.slideInRight, +.slideInUp, +.slideLeft-enter-active, +.slideLeft-leave-active, +.slideOut, +.slideOutDown, +.slideOutLeft, +.slideOutRight, +.slideOutUp, +.slideRight-enter-active, +.slideRight-leave-active, +.slideUp-enter-active, +.slideUp-leave-active, +.zoom-enter-active, +.zoom-leave-active, +.zoomDown-enter-active, +.zoomDown-leave-active, +.zoomIn, +.zoomInDown, +.zoomInLeft, +.zoomInRight, +.zoomInUp, +.zoomLeft-enter-active, +.zoomLeft-leave-active, +.zoomOut, +.zoomOutDown, +.zoomOutLeft, +.zoomOutRight, +.zoomOutUp, +.zoomRight-enter-active, +.zoomRight-leave-active, +.zoomUp-enter-active, +.zoomUp-leave-active { + animation-duration: 0.6s !important; + animation-fill-mode: both; +} + +.cur-point { + cursor: pointer !important; +} + + +/*无数据*/ + +.no-data { + text-align: center; + min-height: 200px; + line-height: 200px; +} + +.no-data .icon-zanwushuju { + font-size: 26px; + color: #d2cccc; +} + + +/*.custom-dialog .el-dialog{*/ + + +/*width: 80%;*/ + + +/*height: 100%;*/ + + +/*position: absolute;*/ + + +/*right: 0;*/ + + +/*}*/ + +.text-ellipsis { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-muted { + color: #98a6ad; +} + +.custom-scrollbar .el-scrollbar__wrap { + overflow-x: hidden !important; +} + +.action-divider { + margin: 0 8px; + display: inline-block; + height: 1em; + width: 1px; + vertical-align: middle; + position: relative; + top: -.06em; + font-size: 14px; + line-height: 1.5; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + background: #e8e8e8; +} + +.dialog-sm { + width: 300px; +} + +.dialog-md { + width: 800px; +} + +.dialog-lg { + width: 950px; +} + +:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #e9d6cf !important; +} \ No newline at end of file diff --git a/src/common/css/lib/components/index.scss b/src/common/css/lib/components/index.scss new file mode 100644 index 0000000..95c4ab6 --- /dev/null +++ b/src/common/css/lib/components/index.scss @@ -0,0 +1,2 @@ +@import "./theme.scss"; +@import "./table.scss"; \ No newline at end of file diff --git a/src/common/css/lib/components/sidebar.scss b/src/common/css/lib/components/sidebar.scss new file mode 100644 index 0000000..32def01 --- /dev/null +++ b/src/common/css/lib/components/sidebar.scss @@ -0,0 +1,130 @@ +.sidebar-container { + z-index: 3; + width: 180px !important; + transition: width 0.18s; + .scrollbar-wrapper { + height: calc(100vh - 50px); + .el-scrollbar__wrap{ + overflow-x: hidden; + } + } + .sidebar-menu { + width: 180px; + height: calc(100vh - 50px); + border: 0; + } + .sidebar-menu::-webkit-scrollbar { + display: none; + } + .el-submenu__title > i, + .el-menu-item > i{ + margin-right: 6px; + } + .el-submenu.is-opened .el-submenu__title{ + color: #fff !important; + & > i { + color: #fff !important; + } + } + .el-menu-item.is-active i { + color: #fff !important; + } + .el-submenu .el-menu-item{ + min-width: 180px !important; + background: #15171d !important; + &.is-active{ + background: #1890ff !important; + } + } + .menu-wrapper .el-menu-item{ + &.is-active{ + background: #1890ff !important; + } + } + .el-menu--collapse { + width: 64px; + overflow: inherit; + } + .logo { + height: 50px; + position: relative; + line-height: 50px; + transition: all 0.3s; + background: #21242e; + overflow: hidden; + text-align: center; + img { + display: inline-block; + vertical-align: middle; + height: 32px; + } + .short-logo{ + display: none; + } + h1 { + color: #fff; + display: inline-block; + vertical-align: middle; + font-size: 18px; + margin: 0 0 0 8px; + font-family: "Myriad Pro", "Helvetica Neue", Arial, Helvetica, + sans-serif; + font-weight: 600; + } + } +} +.hideSidebar { + .sidebar-container { + width: 64px !important; + .el-menu--collapse { + .el-submenu { + overflow: hidden; + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + .el-submenu__icon-arrow{ + display: none; + } + } + } + } + .logo{ + img{ + display: none; + } + .short-logo{ + display: inline-block; + } + } + } +} +.top-menu{ + float: left; +} +// 顶部布局 +.el-menu--horizontal { + border: none !important; + &>.menu-wrapper{ + float: left; + } + .el-menu-item>i, .el-submenu__title>i { + margin-right: 6px; + } + .el-menu-item { + float: left; + height: 60px; + line-height: 60px; + margin: 0; + //border-bottom: 2px solid transparent; + color: #909399; + &.is-active { + //border-bottom: 2px solid #409eff; + color: #303133; + } + } +} diff --git a/src/common/css/lib/components/table.scss b/src/common/css/lib/components/table.scss new file mode 100644 index 0000000..c19a094 --- /dev/null +++ b/src/common/css/lib/components/table.scss @@ -0,0 +1,22 @@ +.table-container { + .custom-header { + background: #F5F7FA !important; + color: #333; + border-bottom: 1px solid #DCDFE6 !important; + } + .el-table--enable-row-hover .el-table__body tr:hover>td { + background-color: #EAF3FD; + } + .gutter { + background: #f5f7fa !important; + color: #333; + border-bottom: 1px solid #dcdfe6 !important; + } + .pagination-container { + margin-top: 10px; + text-align: right; + .el-pagination__jump { + margin-left: 0; + } + } +} \ No newline at end of file diff --git a/src/common/css/lib/components/theme.scss b/src/common/css/lib/components/theme.scss new file mode 100644 index 0000000..fccc8c9 --- /dev/null +++ b/src/common/css/lib/components/theme.scss @@ -0,0 +1,49 @@ +.theme-container{ + width: 280px; + padding: 0 !important; + top: 30px !important; + .popper__arrow { + display: none !important; + } + .el-card__header{ + padding: 10px 20px; + } + } + .theme-setting{ + .icon-huanfu{ + font-size: 18px; + cursor: pointer; + } + } + .theme-cell{ + height: 30px; + position: relative; + cursor: pointer; + margin-bottom: 5px; + span { + height: 100%; + width: 100%; + position: absolute; + background-color: rgba(32, 43, 54, 0.5); + text-align: center; + display: inherit; + .icon-ok{ + position: relative; + top: 6px; + display: inline-block; + font-weight: 400; + font-size: 17px; + line-height: 1; + color: #fff; + } + } + b { + display: inline-block; + float: left; + width: 50%; + height: 20px; + } + b.t-header{ + height: 10px; + } + } diff --git a/src/common/css/lib/element-ui.scss b/src/common/css/lib/element-ui.scss new file mode 100644 index 0000000..d4a6e8f --- /dev/null +++ b/src/common/css/lib/element-ui.scss @@ -0,0 +1,130 @@ +@import "./button.scss"; +.el-select { + width: 100%; +} + +.el-notification__content { + word-break: break-word; +} + +.el-cascader { + width: 100%; +} + +.el-form-item { + margin-bottom: 15px; +} + +.el-button--mini, +.el-button--mini.is-round { + padding: 4px 15px !important; +} + +.el-form-item--mini.el-form-item, +.el-form-item--small.el-form-item { + margin-bottom: 18px; +} + +.el-table .cell { + white-space: nowrap; +} + +.el-card { + box-shadow: none; + border-radius: 0 !important; +} + +.el-tabs--border-card { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +.el-card__header { + padding: 10px 20px !important; +} + +.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { + background-color: rgb(236 245 255) !important; + color: rgb(64 158 255); +} + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + -webkit-transition: color .2s cubic-bezier(.645, .045, .355, 1); + transition: color .2s cubic-bezier(.645, .045, .355, 1); + color: #666 !important; + font-weight: normal !important; +} + +.el-progress-bar__inner { + max-width: 100%; +} + +.el-progress__text { + font-size: 12px !important; +} + +.el-dropdown-link { + cursor: pointer; + color: $--color-primary; + font-size: 12px; +} + +.el-pagination button, +.el-pagination span:not([class*=suffix]) { + font-size: 12px; +} + +.el-pagination__sizes .el-input .el-input__inner { + font-size: 12px; +} + +.el-pager li { + font-size: 12px; +} + +.el-input--small { + font-size: 13px; +} + +.el-tabs__content { + position: static !important; +} + +//menu +.el-submenu .el-menu-item { + height: 48px; + line-height: 48px; +} + +.el-menu-item, +.el-submenu__title { + height: 48px; + line-height: 48px; +} + +.el-dialog { + .el-dialog--middle { + width: 60%; + } + .el-dialog__header { + display: flex; + align-items: center; + padding: 14px 20px; + font-weight: bold; + border-bottom: 1px solid #E0E0E0; + .el-dialog__title { + flex: 1; + color: #010033; + font-size: 14px; + } + .el-dialog__headerbtn { + position: static; + } + } + .el-dialog__footer { + padding: 14px 20px; + text-align: right; + border-top: 1px solid #E0E0E0; + } +} \ No newline at end of file diff --git a/src/common/css/lib/index.scss b/src/common/css/lib/index.scss new file mode 100644 index 0000000..70f3fbc --- /dev/null +++ b/src/common/css/lib/index.scss @@ -0,0 +1,3 @@ +@import "./common.scss"; +@import "./element-ui.scss"; +@import "./components/index.scss"; \ No newline at end of file diff --git a/src/common/css/main.css b/src/common/css/main.css new file mode 100644 index 0000000..6bb1ae1 --- /dev/null +++ b/src/common/css/main.css @@ -0,0 +1,89 @@ +.bsm_btn { + height: 28px !important; + line-height: 28px !important; +} + +.dialog-header { + width: 100% !important; + height: 44px; + line-height: 44px; + z-index: 99; + background: #fff; + border-bottom: 1px solid #e6e6e6; + font-weight: 550; + padding-left: 5px; + margin-top: 0; +} + +.dialog-header .title{ + display: inline-block; + color: #333; +} +.dialog-header .line, +.dialog_header_dark .line{ + position: relative; + top: 4px; + margin: 0 10px; + height: 20px; + width: 1px; + display: inline-block; + background-color: #b5b5b5; +} +.dialog-header .dialog-back, +.dialog_header_dark .dialog-back +{ + color: #46ABf1; + cursor: pointer; +} + +.dialog_header_dark { + width: 100%; + height: 44px; + line-height: 44px; + z-index: 99; + background: #21242e; + border-bottom: 1px solid #e6e6e6; + font-weight: 550; + padding-left: 5px; + margin-top: 0; +} + +.dialog_header_dark .title{ + display: inline-block; + color: #fff; +} + +.bsm-content { + padding: 20px; +} + +.bsm-item { + height: 34px; +} + +.bsm-item .item-label { + display: inline-block; + font-size: 12px; + height: 16px; + color: #999; + width: 105px; + overflow: hidden; + text-overflow: ellipsis; +} +.bsm-item .item-value { + font-size: 12px; + color: #333; + display: inline-block; + white-space: nowrap; + width: calc(100% - 145px); + overflow: hidden; + text-overflow: ellipsis; +} + +.bsm-item .heightClass { + color: red; +} + +.alert_bottom_10 { + margin-bottom: 10px; +} \ No newline at end of file diff --git a/src/common/directive/index.js b/src/common/directive/index.js new file mode 100644 index 0000000..1cf833c --- /dev/null +++ b/src/common/directive/index.js @@ -0,0 +1,12 @@ +/** + * Created by Zhang Haijun on 2018/1/25. + */ +/* global $ */ +import Vue from 'vue' +import store from '@/store' +export const permission = Vue.directive('permission', function (el, binding) { + const buttons = store.state.permission.buttons + if (!buttons.includes(binding.value)) { + el.parentNode && el.parentNode.removeChild(el) + } +}) diff --git a/src/common/hooks/useGlobalWebsocket.ts b/src/common/hooks/useGlobalWebsocket.ts new file mode 100644 index 0000000..f1279fd --- /dev/null +++ b/src/common/hooks/useGlobalWebsocket.ts @@ -0,0 +1,25 @@ +import { computed, onUnmounted, unref } from '@vue/composition-api' +import actions from '@/shared/action' + +export default function(onmessage: {(data: any):void}, store: any) { + const webSocket = computed(() => store.state.app.$webSocket); + console.log(webSocket) + if (unref(webSocket)) { + webSocket.value.onmessage = onmessage + } else { + actions.setGlobalState({ + name: 'cop-web', + onmessage + }) + } + onUnmounted(() => { + if (unref(webSocket)) { + webSocket.value.onmessage = null + } else { + actions.setGlobalState({ + name: 'cop-web', + onmessage: null + }) + } + }) +} diff --git a/src/common/hooks/useSelection.js b/src/common/hooks/useSelection.js new file mode 100644 index 0000000..a2601e1 --- /dev/null +++ b/src/common/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/common/hooks/useTable.ts b/src/common/hooks/useTable.ts new file mode 100644 index 0000000..025414b --- /dev/null +++ b/src/common/hooks/useTable.ts @@ -0,0 +1,85 @@ +import { ref, toRefs, reactive } from '@vue/composition-api' +import { MessageBox, Message } from 'element-ui' +import { handleSearchParam } from 'cmp-element/utils' + +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 +} +interface IRecord{ + id: number, + name: string +} +export function useDelete(removeService: IRemoveService, getData: {(): void}, deleteTipKey = 'name') { + function handleDelete(record: any) { + MessageBox.confirm(`您确定要删除【${record[deleteTipKey]}】吗?`, '提示', { + confirmButtonClass: 'el-button--danger', + type: 'warning' + }).then(async () => { + const res = await removeService(record.id); + if (res.success) { + Message.success(res.message) + getData() + } + }).catch(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/common/hooks/useWebsocket.ts b/src/common/hooks/useWebsocket.ts new file mode 100644 index 0000000..b22f455 --- /dev/null +++ b/src/common/hooks/useWebsocket.ts @@ -0,0 +1,22 @@ +import { onUnmounted, ref } from '@vue/composition-api' +import WebSocket from 'cmp-socket' +import { getToken } from 'utils/auth' +export default function(onmessage: {(data: any):void}) { + const protocol = location.protocol === 'http:' ? 'ws' : 'wss' + let webSocket = new WebSocket({ + url: `${protocol}://${location.host}/api/sms/messageService`, + 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/common/interface/index.ts b/src/common/interface/index.ts new file mode 100644 index 0000000..8fcf87d --- /dev/null +++ b/src/common/interface/index.ts @@ -0,0 +1,22 @@ +export interface IListParams { + page: number, + rows: number, + simple?: boolean, + params?:string +} + +export interface IAjaxData { + success: boolean, + failed: boolean, + solution: string, + message: string, + errorMsg: string, + data: any, + status: string +} + +export interface IDialogConfig { + visible: boolean, + id?: number, + vendorId?: number +} diff --git a/src/common/mixins/getGlobalSocket.js b/src/common/mixins/getGlobalSocket.js new file mode 100644 index 0000000..c52b3a4 --- /dev/null +++ b/src/common/mixins/getGlobalSocket.js @@ -0,0 +1,29 @@ +import actions from '@/shared/action' + +export default { + computed: { + webSocket() { + return this.$store.state.app.$webSocket + } + }, + mounted() { + if (this.webSocket) { + // 独立应用 + this.webSocket.onmessage = this.onmessage + } else { + // 子应用处理方式 + actions.setGlobalState({ + onmessage: this.onmessage + }) + } + this.$once('hook:beforeDestroy', () => { + if (this.webSocket) { + this.webSocket.onmessage = null + } else { + actions.setGlobalState({ + onmessage: null + }) + } + }) + } +} diff --git a/src/common/mixins/selection.js b/src/common/mixins/selection.js new file mode 100644 index 0000000..7b0e1b3 --- /dev/null +++ b/src/common/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/common/mixins/webSocket.js b/src/common/mixins/webSocket.js new file mode 100644 index 0000000..09ee953 --- /dev/null +++ b/src/common/mixins/webSocket.js @@ -0,0 +1,29 @@ +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() {} + } +} diff --git a/src/common/types/shims-ajax.d.ts b/src/common/types/shims-ajax.d.ts new file mode 100644 index 0000000..bb3bd9c --- /dev/null +++ b/src/common/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/common/types/shims-global.d.ts b/src/common/types/shims-global.d.ts new file mode 100644 index 0000000..a3da088 --- /dev/null +++ b/src/common/types/shims-global.d.ts @@ -0,0 +1,53 @@ +declare module 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/common/types/shims-tsx.d.ts b/src/common/types/shims-tsx.d.ts new file mode 100644 index 0000000..c656c68 --- /dev/null +++ b/src/common/types/shims-tsx.d.ts @@ -0,0 +1,13 @@ +import Vue, { VNode } from 'vue' + +declare global { + namespace JSX { + // tslint:disable no-empty-interface + interface Element extends VNode {} + // tslint:disable no-empty-interface + interface ElementClass extends Vue {} + interface IntrinsicElements { + [elem: string]: any + } + } +} diff --git a/src/common/types/shims-vue.d.ts b/src/common/types/shims-vue.d.ts new file mode 100644 index 0000000..4736caf --- /dev/null +++ b/src/common/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/common/types/shims.tools.d.ts b/src/common/types/shims.tools.d.ts new file mode 100644 index 0000000..17375c1 --- /dev/null +++ b/src/common/types/shims.tools.d.ts @@ -0,0 +1,9 @@ +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 module 'cmp-graph-editor' diff --git a/src/common/utils/auth.js b/src/common/utils/auth.js new file mode 100644 index 0000000..5e2f118 --- /dev/null +++ b/src/common/utils/auth.js @@ -0,0 +1,17 @@ +/** + * Created by HaijunZhang on 2018/11/16. + */ +import Cookies from 'js-cookie' +import { tokenKey } from '@/config' + +export function getToken() { + return Cookies.get(tokenKey) +} + +export function setToken(token) { + return Cookies.set(tokenKey, token) +} + +export function removeToken() { + return Cookies.remove(tokenKey) +} diff --git a/src/common/utils/autoImport.ts b/src/common/utils/autoImport.ts new file mode 100644 index 0000000..ce1b049 --- /dev/null +++ b/src/common/utils/autoImport.ts @@ -0,0 +1,26 @@ +// 同步加载 +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/common/utils/crypto.js b/src/common/utils/crypto.js new file mode 100644 index 0000000..a2bf89a --- /dev/null +++ b/src/common/utils/crypto.js @@ -0,0 +1,48 @@ +/** + * Created by HaijunZhang on 2018/11/19. + */ +import CryptoJS from 'crypto-js' + +const defaultKey = CryptoJS.enc.Utf8.parse(decryptByBase64('Qm9jbG91ZENNUFY1ODchIQ==')) +const iv = CryptoJS.enc.Utf8.parse(decryptByBase64('QmV5b25kQ01QVjU4NyEhIQ==')) +const options = { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 +} + +// 加密方法 +export function encrypt (word, key = defaultKey) { + if (typeof word === 'object') { + word = JSON.stringify(word) + } + const srcs = CryptoJS.enc.Utf8.parse(word) + const encrypted = CryptoJS.AES.encrypt(srcs, key, options) + return encrypted.toString() +} + +// 解密方法 +export function decrypt (word, key = defaultKey) { + const decrypt = CryptoJS.AES.decrypt(word, key, options) + return decrypt.toString(CryptoJS.enc.Utf8) +} + +// 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 +} + +export default { + encrypt, + decrypt, + encryptByBase64, + decryptByBase64 +} diff --git a/src/common/utils/day.js b/src/common/utils/day.js new file mode 100644 index 0000000..ff5bf55 --- /dev/null +++ b/src/common/utils/day.js @@ -0,0 +1,5 @@ +import dayjs from 'dayjs' +import 'dayjs/locale/zh-cn' +dayjs.locale('zh-cn') + +export default dayjs; diff --git a/src/common/utils/index.js b/src/common/utils/index.js new file mode 100644 index 0000000..ca86457 --- /dev/null +++ b/src/common/utils/index.js @@ -0,0 +1,89 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import Clipboard from 'clipboard' +import { getToken } from 'utils/auth' +import dayjs from './day' + +export function wrapperParams(data) { + return data; + // return { params: JSON.stringify(data) } +} +export const formatEqParams = params => { + return { page: 1, rows: 9999, params: JSON.stringify([{ param: params, sign: 'EQ' }]) } +} +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 downloadFile = (url, params = {}) => { +// request +// .get(url, { +// // headers: { 'Content-Type': params.fileFormat }, +// responseType: 'blob', +// // params: wrapperParams(params), +// options: { +// isBlob: true +// } +// }) +// .then(data => { +// var ele = document.createElement('a') // 创建下载链接 +// ele.download = 'filename' // 设置下载的名称 +// ele.style.display = 'none' // 隐藏的可下载链接 +// // 字符内容转变成blob地址 +// const blob = new Blob([data]) +// ele.href = URL.createObjectURL(blob) +// // 绑定点击时间 +// document.body.appendChild(ele) +// ele.click() +// // 然后移除 +// document.body.removeChild(ele) +// }) +// } +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++) { + 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') +} diff --git a/src/common/utils/request.js b/src/common/utils/request.js new file mode 100644 index 0000000..8c6257b --- /dev/null +++ b/src/common/utils/request.js @@ -0,0 +1,119 @@ +/** + * 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 { Notification, MessageBox } from 'element-ui' +import { getToken } from 'utils/auth' +import store from '@/store' + +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 => { + return qs.stringify(params, { arrayFormat: 'indices' }) + } +}) +// 请求完成回调 +const finishCallback = function() { + NProgress.done() +} +// 报错处理 +const handleError = function(response) { + if (!response) return // 容错处理 + const errorText = codeMessage[response.status] || response.statusText + Notification({ + type: 'error', + title: `请求错误 ${response.status}: ${response.config.url}`, + 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 => { + return Promise.reject(error) + } +) +axiosInstance.interceptors.response.use( + data => { + // const requestKey = getRequestIdentify(data.config); + // removePending(requestKey); + finishCallback() + const responseData = data.data + const { options } = data.config + if (!responseData.success) { + switch (responseData.status) { + case '402': + store.dispatch('permission/ResetRoutes') + location.href = '/#/license' + break + case '401': + case '509': + store.dispatch('permission/ResetRoutes') + break + default: + } + if (!options.ignoreError) { + Notification({ + message: responseData.message || responseData.data, + type: 'error' + }) + } + } + return responseData + }, + error => { + finishCallback() + handleError(error.response) + return Promise.reject(error) + } +) +export default axiosInstance diff --git a/src/common/utils/resolvePath.js b/src/common/utils/resolvePath.js new file mode 100644 index 0000000..c7f4868 --- /dev/null +++ b/src/common/utils/resolvePath.js @@ -0,0 +1,21 @@ +/** + * 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/common/utils/uploadFile.js b/src/common/utils/uploadFile.js new file mode 100644 index 0000000..0643695 --- /dev/null +++ b/src/common/utils/uploadFile.js @@ -0,0 +1,84 @@ +// 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, 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.result; + // 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(); + i++; + const isok = (i / count) * 100; + item.progress = parseInt(isok); + } 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/config.js b/src/config.js new file mode 100644 index 0000000..1a2e78e --- /dev/null +++ b/src/config.js @@ -0,0 +1,16 @@ +/** + * 启用缓存加载速度会变快,但是数据安全性和实时性降低 + */ +// 是否启用权限本地缓存 +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 baseUrl = '/cop-web' diff --git a/src/errorLog.js b/src/errorLog.js new file mode 100644 index 0000000..5728baa --- /dev/null +++ b/src/errorLog.js @@ -0,0 +1,29 @@ +/** + * Created by HaijunZhang on 2019/10/21. + */ +import Vue from 'vue' +import store from './store' +import request from 'utils/request' + +const { host, hash } = location +const sendLog = (msg, vm, info, level) => { + request.post('http://10.20.51.92:7001/log', { + service: 'CMC', + level, + username: store.state.app.userData.username, + host, + view: hash, + msg: `${msg}`, + info + }) +} +if (process.env.NODE_ENV === 'development') { + Vue.config.errorHandler = function(err, vm, info) { + console.error(err, vm, info) + // sendLog(err, vm, info, 'error') + } + Vue.config.warnHandler = function(msg, vm, info) { + console.warn(msg, vm, info) + // sendLog(msg, vm, info, 'warning') + } +} diff --git a/src/filters/index.js b/src/filters/index.js new file mode 100644 index 0000000..2a1f36b --- /dev/null +++ b/src/filters/index.js @@ -0,0 +1,209 @@ +// 正反编译 +export function booleanFilter(value) { + const obj = { + true: '是', + false: '否', + 1: '是', + 0: '否', + YES: '是', + NO: '否' + } + return obj[value] || value +} +export function vmStatusFilter(status) { + const statusMap = { + RUNNING: '运行中', + STOPPED: '关机', + STOPPING: '关机中', + STARTING: '开机中', + SUSPENDED: '挂起', + SUSPENDING: '挂起中', + ACTIVING: '激活中', + PAUSED: '停止', + PAUSING: '停止中', + RECOVERING: '恢复中', + BUILDING: '创建中', + RESTARTING: '重启中', + EXCEPTION: '异常', + SYNSEXCEPTION: '同步异常', + UNKNOWN: '已断开', + UNKNOWNON: '已断开', + UNKNOWNOFF: '已断开', + UNKNOWNSUSPEND: '已断开' + } + return statusMap[status] || '未知' +} + +// 虚拟机状态颜色 +export function vmStatusColorFilter(status) { + const statusMap = { + DEALLOCATE: 'danger', + DANGER: 'danger', + INACCESSIBLE: 'danger', + WARN: 'warning', + RUNNING: 'success', + STOPPED: 'danger', + STOPPING: 'warning', + SOFTRESTARTING: 'warning', + STARTING: 'warning', + SUSPENDED: 'danger', + SUSPENDING: 'warning', + ACTIVING: 'warning', + ACTIVE: 'success', + PAUSED: 'danger', + PAUSING: 'warning', + RECOVERING: 'warning', + BUILDING: 'warning', + RESTARTING: 'warning', + EXCEPTION: 'danger', + SYNSEXCEPTION: 'danger', + UNKNOWN: 'disabled', + UNKNOWNON: 'disabled', + UNKNOWNOFF: 'disabled', + UNKNOWNSUSPEND: 'disabled', + RESIZING: 'warning', + RESIZINGTCE: 'warning', + RESIZINGAWS: 'warning', + VERIFYRESIZE: 'warning', + SHELVED: 'danger', + RESTORING: 'warning', + AVAILABLE: 'normal', + INAVAILABLE: 'danger', + IN_USE: 'success', + 'IN-USE': 'success', + DELETING: 'warning', + DOWNLOADING: 'warning', + green: 'success', + red: 'danger', + yellow: 'danger', + gray: 'danger', + ENABLED: 'success', + INSTALLING: 'warning', + UNINSTALL: 'danger', + FAILED: 'danger', + inactive: 'danger', + PENDING_CREATE: 'warning', + UPLOADING: 'warning', + PENDING_UPDATE: 'warning', + PENDING_DELETE: 'warning', + SYSTEMRESIZING: 'warning', + SHUTDOWN: 'warning', + TORECYCLE: 'warning', + RESERVED: 'warning', + ERROR: 'danger', + PENDING: 'warning', + DISABLED: 'danger', + DEALLOCATEING: 'warning', + PROTECTING: 'warning', + DOWN: 'info' + } + return statusMap[status] || 'danger' +} + +export function taskStatusFilter(value, type) { + const statusMap = { + DEVELOPING: '开发中', + APPROVING: '发布中', + APPROVED: ' 已发布' + } + const colorMap = { + DEVELOPING: 'normal', + APPROVING: 'warning', + APPROVED: 'success' + } + return type === 'color' ? colorMap[value] : statusMap[value] +} + +// 任务类型 +export function taskTypeFilter(value) { + const obj = { + SCRIPT: '执行脚本', + FILE: '文件分发', + BACKUP: '文件备份', + RECOVERY: '文件恢复', + HTTP: 'HTTP请求', + DATABASE: '数据库', + POINT: '聚合节点' + } + return obj[value] +} +// 审批状态 +export function applyStatusFilter(value, type) { + const obj = { + // APPROVING: { + // name: '审批中', + // color: 'normal' + // }, + // REFUSED: { + // name: '审批拒绝', + // color: 'danger' + // }, + APPROVED: { + name: '已发布', + color: 'success' + }, + DEVELOPING: { + name: '开发中', + color: 'normal' + }, + UNAPPLY: { + name: '未发布', + color: 'primary' + }, + CREATED: { + name: '新创建', + color: 'normal' + } + } + return obj[value] && obj[value][type] +} +// 任务执行状态 +export function taskExeStatusFilter(value, type = 'name') { + const obj = { + CREATED: { + name: '未执行', + color: 'normal' + }, + NOREADY: { + name: '已跳过', + color: 'warning' + }, + READY: { + name: '准备中', + color: 'normal' + }, + WAITTING: { + name: '等待执行', + color: 'primary' + }, + CANCELING: { + name: '取消中', + color: 'primary' + }, + RUNNING: { + name: '正在执行', + color: 'normal' + }, + SUCCESS: { + name: '执行成功', + color: 'success' + }, + SUSPENDED: { + name: '已暂停', + color: 'warning' + }, + FAILED: { + name: '执行失败', + color: 'danger' + }, + CANCELED: { + name: '手动结束', + color: 'warning' + }, + EXCEPTION: { + name: '执行异常', + color: 'danger' + } + } + return obj[value] && obj[value][type] // 容错处理(初始化值不存在) +} diff --git a/src/icons/index.js b/src/icons/index.js new file mode 100644 index 0000000..2715ad6 --- /dev/null +++ b/src/icons/index.js @@ -0,0 +1,3 @@ +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) 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-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-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-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..c32d709 --- /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/lang/en.js b/src/lang/en.js new file mode 100644 index 0000000..b25ff61 --- /dev/null +++ b/src/lang/en.js @@ -0,0 +1,12 @@ +export default { + lang: { + en: 'English', + zh: 'Chinese' + }, + operate: { + search: 'Search', + create: 'Create', + edit: 'Edit', + delete: 'Delete' + } +} diff --git a/src/lang/index.js b/src/lang/index.js new file mode 100644 index 0000000..00361a0 --- /dev/null +++ b/src/lang/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' +import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang +import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang +import enLocale from './en' +import zhLocale from './zh' + +Vue.use(VueI18n) + +const messages = { + en: { + ...enLocale, + ...elementEnLocale + }, + zh: { + ...zhLocale, + ...elementZhLocale + } +} +export function getLanguage () { + const chooseLanguage = localStorage.getItem('language') + return chooseLanguage || 'zh' +} +const i18n = new VueI18n({ + locale: getLanguage(), + messages +}) + +export default i18n diff --git a/src/lang/zh.js b/src/lang/zh.js new file mode 100644 index 0000000..3435403 --- /dev/null +++ b/src/lang/zh.js @@ -0,0 +1,12 @@ +export default { + lang: { + en: '英文', + zh: '中文' + }, + operate: { + search: '搜索', + create: '新增', + edit: '编辑', + delete: '删除' + } +} diff --git a/src/layouts/app.vue b/src/layouts/app.vue new file mode 100644 index 0000000..1fef52b --- /dev/null +++ b/src/layouts/app.vue @@ -0,0 +1,18 @@ + + diff --git a/src/layouts/components/Header.vue b/src/layouts/components/Header.vue new file mode 100644 index 0000000..7391c1f --- /dev/null +++ b/src/layouts/components/Header.vue @@ -0,0 +1,81 @@ +/** +* Created by HaijunZhang on 2019/12/18. +*/ + + + + + diff --git a/src/layouts/components/LevelBar.vue b/src/layouts/components/LevelBar.vue new file mode 100644 index 0000000..962089a --- /dev/null +++ b/src/layouts/components/LevelBar.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/layouts/components/SiteMessage.vue b/src/layouts/components/SiteMessage.vue new file mode 100644 index 0000000..e559e78 --- /dev/null +++ b/src/layouts/components/SiteMessage.vue @@ -0,0 +1,157 @@ + + + diff --git a/src/layouts/components/SystemTip.vue b/src/layouts/components/SystemTip.vue new file mode 100644 index 0000000..cade45d --- /dev/null +++ b/src/layouts/components/SystemTip.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/layouts/components/TagsView/ScrollPanel.vue b/src/layouts/components/TagsView/ScrollPanel.vue new file mode 100644 index 0000000..240c741 --- /dev/null +++ b/src/layouts/components/TagsView/ScrollPanel.vue @@ -0,0 +1,137 @@ + + + + + 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..ccf63ff --- /dev/null +++ b/src/layouts/components/TagsView/index.vue @@ -0,0 +1,282 @@ + + + + + diff --git a/src/layouts/components/TagsView/index_backup.vue b/src/layouts/components/TagsView/index_backup.vue new file mode 100644 index 0000000..565ec28 --- /dev/null +++ b/src/layouts/components/TagsView/index_backup.vue @@ -0,0 +1,251 @@ + + + + + + + diff --git a/src/layouts/components/ThirdMenu.vue b/src/layouts/components/ThirdMenu.vue new file mode 100644 index 0000000..45179b5 --- /dev/null +++ b/src/layouts/components/ThirdMenu.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/layouts/components/headerMenu.vue b/src/layouts/components/headerMenu.vue new file mode 100644 index 0000000..45bbee2 --- /dev/null +++ b/src/layouts/components/headerMenu.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/layouts/components/langSelect.vue b/src/layouts/components/langSelect.vue new file mode 100644 index 0000000..f2f73c7 --- /dev/null +++ b/src/layouts/components/langSelect.vue @@ -0,0 +1,36 @@ + + + + diff --git a/src/layouts/components/lockScreen.vue b/src/layouts/components/lockScreen.vue new file mode 100644 index 0000000..aac8ed2 --- /dev/null +++ b/src/layouts/components/lockScreen.vue @@ -0,0 +1,90 @@ + + + + diff --git a/src/layouts/components/personal/InfoDialog.vue b/src/layouts/components/personal/InfoDialog.vue new file mode 100644 index 0000000..258b375 --- /dev/null +++ b/src/layouts/components/personal/InfoDialog.vue @@ -0,0 +1,142 @@ + + + diff --git a/src/layouts/components/personal/index.vue b/src/layouts/components/personal/index.vue new file mode 100644 index 0000000..041f866 --- /dev/null +++ b/src/layouts/components/personal/index.vue @@ -0,0 +1,175 @@ + + + diff --git a/src/layouts/components/process.vue b/src/layouts/components/process.vue new file mode 100644 index 0000000..eded69e --- /dev/null +++ b/src/layouts/components/process.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/layouts/components/rightContent.vue b/src/layouts/components/rightContent.vue new file mode 100644 index 0000000..94a2f7b --- /dev/null +++ b/src/layouts/components/rightContent.vue @@ -0,0 +1,40 @@ +/** +* Created by HaijunZhang on 2019/12/18. +*/ + + + + + diff --git a/src/layouts/components/sidebar/Link.vue b/src/layouts/components/sidebar/Link.vue new file mode 100644 index 0000000..dfca384 --- /dev/null +++ b/src/layouts/components/sidebar/Link.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/layouts/components/sidebar/MenuItem.vue b/src/layouts/components/sidebar/MenuItem.vue new file mode 100644 index 0000000..f61fe1d --- /dev/null +++ b/src/layouts/components/sidebar/MenuItem.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/layouts/components/sidebar/OperateBtn.vue b/src/layouts/components/sidebar/OperateBtn.vue new file mode 100644 index 0000000..7410289 --- /dev/null +++ b/src/layouts/components/sidebar/OperateBtn.vue @@ -0,0 +1,54 @@ + + + + diff --git a/src/layouts/components/sidebar/baseMenu.vue b/src/layouts/components/sidebar/baseMenu.vue new file mode 100644 index 0000000..a4cf125 --- /dev/null +++ b/src/layouts/components/sidebar/baseMenu.vue @@ -0,0 +1,68 @@ + + + diff --git a/src/layouts/components/sidebar/sidebar.vue b/src/layouts/components/sidebar/sidebar.vue new file mode 100644 index 0000000..db0be65 --- /dev/null +++ b/src/layouts/components/sidebar/sidebar.vue @@ -0,0 +1,160 @@ + + + + diff --git a/src/layouts/components/sidebar/sidebarItem.vue b/src/layouts/components/sidebar/sidebarItem.vue new file mode 100644 index 0000000..4eb17ba --- /dev/null +++ b/src/layouts/components/sidebar/sidebarItem.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/layouts/components/sidebar/theme.scss b/src/layouts/components/sidebar/theme.scss new file mode 100644 index 0000000..a0abe48 --- /dev/null +++ b/src/layouts/components/sidebar/theme.scss @@ -0,0 +1,15 @@ +.sidebar-menu { + border: 0; + background: inherit; + ::v-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/home.vue b/src/layouts/home.vue new file mode 100644 index 0000000..a70bdd1 --- /dev/null +++ b/src/layouts/home.vue @@ -0,0 +1,151 @@ + + + + diff --git a/src/layouts/iframe.vue b/src/layouts/iframe.vue new file mode 100644 index 0000000..482a97b --- /dev/null +++ b/src/layouts/iframe.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/layouts/redirect.vue b/src/layouts/redirect.vue new file mode 100644 index 0000000..70fc0b7 --- /dev/null +++ b/src/layouts/redirect.vue @@ -0,0 +1,10 @@ + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..080a558 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,72 @@ +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. +import './public-path' +import Vue from 'vue' +import router from './router/index' +import store from './store' +import startPermission from './permission' +import './errorLog' +import './common/components/index' +import ElementUI from 'element-ui' +import '@/common/css/element-variables.scss' +// @ts-ignore +import App from './App.vue' +import 'vue2-animate/dist/vue2-animate.min.css' +import CmpEcharts from 'cmp-echarts' +import 'cmp-echarts/lib/cmp-echarts.css' +import './common/directive' +import CmpElement from 'cmp-element' +import 'cmp-element/lib/cmp-element.css' +import './icons' +import VueCompositionAPI from '@vue/composition-api' +import rules from '@/validate/index' +import actions from './shared/action' + +Vue.use(ElementUI, { size: 'small' }); +Vue.use(VueCompositionAPI) +Vue.use(CmpElement, { rules }) +Vue.use(CmpEcharts) +Vue.config.productionTip = false + +let instance: any = null +function render(props:any) { + const { appPath = '', container } = props; + instance = new Vue({ + router, + store, + render: h => h(App) + }).$mount(container ? container.querySelector('#app') : '#app'); + store.commit('SET_APP_PATH', appPath) +} +if (!(window as any).__POWERED_BY_QIANKUN__) { + console.log('独立运行子应用') + startPermission() + render({}) +} +export async function bootstrap() { + console.log('cop app bootstraped') +} + +export async function mount(props: any) { + console.log('cop app mounted'); + const getStyle = window.getComputedStyle; + // @ts-ignore + // window.getComputedStyle = (element, property) => { + // if (!element || element.nodeType === 9) return {}; + // return getStyle(element, property); + // }; + render(props) + actions.init(props, (state: any) => { + const { permissions, userData } = state; + userData && store.commit('SET_USERDATA', userData); + if (!store.getters.addRoutes && permissions) { + store.dispatch('permission/GenerateRoutes'); + } + }) +} + +export async function unmount() { + instance.$destroy() + instance.$el.innerHTML = '' + instance = null +} diff --git a/src/mock/common.js b/src/mock/common.js new file mode 100644 index 0000000..b191159 --- /dev/null +++ b/src/mock/common.js @@ -0,0 +1,26 @@ +/** + * Created by Zhang Haijun on 2018/3/20. + */ +import Mock from 'mockjs'; +const commonData = { + success: true, + message: '查询成功', + data: [] +}; +export default { + getList (template, count = 10, total = 50) { + const list = []; + for (let i = 0; i < count; i++) { + list.push(Mock.mock(template)); + } + commonData.data = { + rows: list, + total: total + }; + return commonData; + }, + getDetail (template) { + commonData.data = Mock.mock(template); + return commonData; + } +}; diff --git a/src/mock/index.js b/src/mock/index.js new file mode 100644 index 0000000..dc7c5bf --- /dev/null +++ b/src/mock/index.js @@ -0,0 +1,4 @@ +import Mock from 'mockjs'; +import taskApi from './task'; +Mock.mock(/\/list$/, 'post', taskApi.getTaskList); +Mock.mock(/\/api\/task\/detail/, 'get', taskApi.getTaskDetail); diff --git a/src/mock/task.js b/src/mock/task.js new file mode 100644 index 0000000..141d215 --- /dev/null +++ b/src/mock/task.js @@ -0,0 +1,27 @@ +/** + * Created by Zhang Haijun on 2018/3/20. + */ +import common from './common'; + +export default { + getTaskList () { + const template = { + id: '@increment', + name: '@title', + creator: '@cname', + mender: '@cname', + gmtCreate: '@datetime(\'yyyy-MM-dd HH:mm:ss\')', + gmtModify: '@datetime(\'yyyy-MM-dd HH:mm:ss\')' + }; + return common.getList(template); + }, + getTaskDetail () { + const template = { + id: '@increment', + name: '@title', + taskGroup: 'DEVICE_INIT', + graph: '{"nodes":[{"catalog":"START","name":"开始节点","location":{"x":80,"y":140},"nodeId":1521013231471},{"catalog":"END","name":"结束节点","location":{"x":800,"y":140},"nodeId":1521013232191},{"catalog":"TASK","retryTime":3,"params":{"database":"MySQL","dbdriver":"com.mysql.jdbc.Driver","password":"onceas","scriptId":168,"groupId":[3],"category":"SQL","content":"select * from user","username":"root"},"timeout":600,"target":[{"url":"10.20.2.48:3306/bsm_dev"}],"intervals":10,"failover":false,"name":"test","location":{"x":400,"y":137},"sudo":false,"category":"DATABASE","nodeId":1521013242696,"identId":""}],"links":[{"nodeZid":1521013242696,"linetype":"Link","nodeAid":1521013231471},{"nodeZid":1521013232191,"linetype":"Link","nodeAid":1521013242696}]}' + }; + return common.getDetail(template); + } +}; diff --git a/src/models/common.d.ts b/src/models/common.d.ts new file mode 100644 index 0000000..8c4c79d --- /dev/null +++ b/src/models/common.d.ts @@ -0,0 +1,4 @@ +export default interface IDepart { + id?: number, + name?: string, +} diff --git a/src/models/depart.d.ts b/src/models/depart.d.ts new file mode 100644 index 0000000..a190b1c --- /dev/null +++ b/src/models/depart.d.ts @@ -0,0 +1,4 @@ +export interface IDepart { + id?: number, + parentId?: number, +} diff --git a/src/models/service.d.ts b/src/models/service.d.ts new file mode 100644 index 0000000..0fe29c4 --- /dev/null +++ b/src/models/service.d.ts @@ -0,0 +1,19 @@ +export interface IService { + id?: number, + code?: string, + name?: string, + status?: string, + iconId?: number, + catalogId?: number, + checked?: boolean, + billable?: boolean, + billPolicy?: string, + basicPrice?:string, + vendorType?:string, + discount?:number, + templateId?:number|string, + templateName?:string, + icon?:string, + isPublic?: boolean, + flowList?: any +} diff --git a/src/models/sku.d.ts b/src/models/sku.d.ts new file mode 100644 index 0000000..ba94eb0 --- /dev/null +++ b/src/models/sku.d.ts @@ -0,0 +1,6 @@ +export interface ISku { + id?: number, + name: string, + status: string, + content: string +} diff --git a/src/models/sla.d.ts b/src/models/sla.d.ts new file mode 100644 index 0000000..08b5467 --- /dev/null +++ b/src/models/sla.d.ts @@ -0,0 +1,7 @@ +export interface ISla { + id?: number, + name?: string, + status?: string, + content?: string, + catalogId?: number +} diff --git a/src/models/tenant.d.ts b/src/models/tenant.d.ts new file mode 100644 index 0000000..30bde39 --- /dev/null +++ b/src/models/tenant.d.ts @@ -0,0 +1,12 @@ +export interface ITenant { + id?: number, + account: string, + name: string, + status: string, + discount: number, + groupCode: string, + password: string, + remark: string, + departId: number | undefined, + departIds: number[] | string, +} diff --git a/src/models/user.d.ts b/src/models/user.d.ts new file mode 100644 index 0000000..3dd3191 --- /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..524e1a7 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,50 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ +import store from './store' +import router from './router' +import { getToken, setToken, removeToken } from 'utils/auth' +import { getQuery } from 'utils' + +const { token } = getQuery(location.hash); +if (token) { + setToken(token) +} + +export default function() { + const whiteList = ['/login', '/404', '/401', '/license', '/sso'] + router.beforeEach(async (to, from, next) => { + 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/public-path.js b/src/public-path.js new file mode 100644 index 0000000..15757ab --- /dev/null +++ b/src/public-path.js @@ -0,0 +1,4 @@ +if (window.__POWERED_BY_QIANKUN__) { + // eslint-disable-next-line no-undef + __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__; +} diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..b594ac0 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,33 @@ +import Vue from 'vue' +import Router from 'vue-router' +import constantRouter from './module/constant' +import opsMap from './module/ops' +import resourceMap from './module/resource' + +const originalReplace = Router.prototype.replace; +Router.prototype.replace = function replace (location) { + return originalReplace.call(this, location).catch(err => err); +} + +Vue.use(Router) + +export const asyncRouterMap = { + Home: () => import('@/layouts/home.vue'), + App: () => import('@/layouts/app.vue'), + ...opsMap, + ...resourceMap +} +const createRouter = () => new Router({ + base: process.env.VUE_APP_BASEURL, + mode: 'history', + scrollBehavior: () => ({ y: 0 }), + routes: constantRouter +}) + +const router = createRouter() + +export function resetRouter() { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} +export default router diff --git a/src/router/module/constant.js b/src/router/module/constant.js new file mode 100644 index 0000000..4974024 --- /dev/null +++ b/src/router/module/constant.js @@ -0,0 +1,56 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ + +const main = [ + { + name: 'Login', + path: '/login', + component: () => import('views/login/login.vue') + }, + { + path: '/sso', + component: () => import('views/login/sso.vue') + }, + { + name: 'LockMe', + path: '/lockme', + component: () => import('views/login/lockme.vue') + }, + { + path: '/', + component: () => import('@/layouts/home.vue'), + redirect: '/resource_dashboard', + meta: { + title: '主页', + noTag: true + }, + name: 'Home', + children: [ + { + name: 'Redirect', + path: 'redirect', + meta: { noTag: true }, + component: () => import('@/layouts/redirect.vue') + } + ] + }, + { + path: '/404', + name: '404', + meta: { + title: '404', + noTag: true + }, + component: () => import('@/views/errorPage/404.vue') + }, + { + path: '/401', + meta: { + title: '401', + noTag: true + }, + component: () => import('@/views/errorPage/401.vue') + } +] +export default main diff --git a/src/router/module/ops.js b/src/router/module/ops.js new file mode 100644 index 0000000..695c1f2 --- /dev/null +++ b/src/router/module/ops.js @@ -0,0 +1,44 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ +const ops = { + TaskDashboard: () => import('views/dashboard/index.vue'), + CronTask: () => import('views/cron/index.vue'), + TaskHistory: () => import('views/history/index.vue'), + TaskHistoryPreview: () => import('views/task/graph/executeDetail/index.vue'), + TaskTpl: () => import('views/tpl/index.vue'), + TaskManageList: () => import('views/task/list.vue'), + CreateTask: () => import('views/task/graph/graph.vue'), + TaskAccount: () => import('views/security/account.vue'), + TaskCommand: () => import('views/security/command/index.vue'), + ScriptRepository: () => import('views/repository/script.vue'), + FileRepository: () => import('views/repository/file_repository.vue'), + SoftwareRepository: () => import('views/repository/software_repository.vue'), + componentsBank: () => import('views/repository/components.vue'), + // 巡检管理 + InspectReport: () => import('views/inspect/report/index.vue'), + InspectAlarm: () => import('views/inspect/alarm.vue'), + InspectTemp: () => import('views/inspect/temp.vue'), + InspectQuick: () => import('views/inspect/fastInspect.vue'), + InspectNorm: () => import('views/inspect/normInspect.vue'), + InspectTiming: () => import('views/inspect/timingInspect.vue'), + InspectNormal: () => import('views/inspect/routineInspect.vue'), + InspectHistory: () => import('views/inspect/history.vue'), + InspectOverview: () => import('views/inspect/overview.vue'), + // 合规检查 + ComplianceNormal: () => import('views/compliance/normal'), + ComplianceTime: () => import('views/compliance/time'), + ComplianceHistory: () => import('views/compliance/history'), + ComplianceBaseline: () => import('views/compliance/baseline'), + ComplianceTemplate: () => import('views/compliance/template'), + // 配置对比 + AcrossCompare: () => import('views/compare/acrossCompare.vue'), + HistoryCompare: () => import('views/compare/historyCompare.vue'), + StandardCompare: () => import('views/compare/standardCompare.vue'), + CompareResult: () => import('views/compare/viewCompare.vue'), + CompareWhiteList: () => import('views/compare/whiteList.vue'), + // 补丁管理 + PatchDeploy: () => import('views/patch/deploy'), + PatchHistory: () => import('views/patch/history') +} +export default ops diff --git a/src/router/module/resource.js b/src/router/module/resource.js new file mode 100644 index 0000000..c4c37e2 --- /dev/null +++ b/src/router/module/resource.js @@ -0,0 +1,7 @@ +export default { + PmResourceManage: () => import('views/resource-manage/host/host.vue'), + VmResourceManage: () => import('views/resource-manage/host/host.vue'), + NetworkGroupManage: () => import('views/resource-manage/group/network.vue'), + WorkerGroupManage: () => import('views/resource-manage/group/worker.vue'), + ResourceServerConfig: () => import('views/resource-manage/host/serverConfig.vue') +} diff --git a/src/services/cmdb/module.js b/src/services/cmdb/module.js new file mode 100644 index 0000000..3ade4e8 --- /dev/null +++ b/src/services/cmdb/module.js @@ -0,0 +1,10 @@ +/** + * Created by HaijunZhang on 2019/1/26. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils' +export function getPropertiesByCode(code) { + return request.get('/ims/v1/properties', { + params: wrapperParams({ code }) + }) +} diff --git a/src/services/installhost/index.js b/src/services/installhost/index.js new file mode 100644 index 0000000..b90e37d --- /dev/null +++ b/src/services/installhost/index.js @@ -0,0 +1,163 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const imageUrl = '/ims/v1/images' +export function getImage(params) { + return request.get(imageUrl, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} +export function getImageDetail(id) { + return request.get(`${imageUrl}/${id}`, { + params: { + type: 'INSTALLATION' + } + }) +} +export function createImage(params) { + return request.post(imageUrl, { + type: 'INSTALLATION', + ...wrapperParams(params) + }) +} +export function modifyImage(params) { + return request.put(`${imageUrl}/${params.id}`, { + type: 'INSTALLATION', + ...wrapperParams(params) + }) +} +export function removeImage(params) { + return request.delete(`${imageUrl}/${params.id}`, { params: { type: 'INSTALLATION', ...wrapperParams(params) } }) +} +export function syncImage() { + return request.patch(`${imageUrl}/0`, { + type: 'INSTALLATION', + action: 'sync' + }) +} +export function isoImage() { + return request.get(`${imageUrl}/iso`, { + params: { + type: 'INSTALLATION' + } + }) +} + +export function getTaskHistory(params) { + return request.get('/ims/v1/installations', { + params: params + }) +} +export function getTaskHistoryDetail(id) { + return request.get(`/ims/v1/installations/${id}`) +} +const baseUrl = '/ims/v1/hosts' + +export function getHost(params) { + return request.get(baseUrl, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} +export function getHostDetail(id, params) { + return request.get(`${baseUrl}/${id}`, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} +export function addHost(params) { + return request.post(baseUrl, { + type: 'INSTALLATION', + ...wrapperParams(params) + }) +} +export function removeHost(params) { + return request.delete(`${baseUrl}/${params.id}`, { params: { type: 'INSTALLATION', ...wrapperParams(params) } }) +} +export function removeBatchHost(params) { + return request.delete(`${baseUrl}`, { params: { type: 'INSTALLATION', ...wrapperParams(params) } }) +} +export function batchRemoveHost(params) { + return request.delete(baseUrl, { + data: { type: 'INSTALLATION', ...wrapperParams(params) } + }) +} +export function operateHost(id, action, params) { + return request.patch(`${baseUrl}/${id}`, { + type: 'INSTALLATION', + action: action, + ...wrapperParams(params) + }) +} +export function installHost(action, params) { + return request.patch(baseUrl, { + type: 'INSTALLATION', + action: action, + ...wrapperParams(params) + }) +} +export function getMetrics(params) { + return request.get(`${baseUrl}/${params.id}/metrics`, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} +export function getInsHistory(id, params) { + return request.get(`${baseUrl}/${id}/installations`, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} +export function getIpmiUsers(id, params) { + return request.get(`${baseUrl}/${id}/ipmi/users`, { + params: { + type: 'INSTALLATION', + ...params + } + }) +} + +const yumUrl = '/ims/v1/repos/yum' +export function getRepos(params) { + return request.get(yumUrl, { + params: params + }) +} +export function createRepos(params) { + return request.post(yumUrl, wrapperParams(params)) +} +export function modifyRepos(params) { + return request.put(`${yumUrl}/${params.name}`, wrapperParams(params)) +} +export function removeRepos(name) { + return request.delete(`${yumUrl}/${name}`) +} +export function configureYum(params) { + return request.patch(`${yumUrl}/${params.name}`, wrapperParams(params)) +} +export function downloadTemplate(params) { + downloadFile('/ims/v1/hosts/condition', { + condition: 'download', + type: 'INSTALLATION', + params + }) +} +export function controlHost(id) { + return request.get(`/ims/v1/hosts/${id}/console`, { + headers: { options: { ignoreError: true } }, + params: { + type: 'INSTALLATION' + } + }) +} diff --git a/src/services/platform/index.js b/src/services/platform/index.js new file mode 100644 index 0000000..a4dabdb --- /dev/null +++ b/src/services/platform/index.js @@ -0,0 +1,159 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' +// 资源 +const resourceUrl = '/ims/v1/resources' +export function getResource(params) { + return request.get(resourceUrl, { + params + }) +} + +export function detailResource(id) { + return request.get(`${resourceUrl}/${id}`) +} + +// 平台 +export function getCloudVendor(params, url) { + return request.get(`${url || '/ims/v1/vendors'}`, { + params + }) +} + +export function shoppingCloudServices(params) { + return request.post('/cos/v1/cloudservices/shopping', wrapperParams(params)) +} + +const imageUrl = '/ims/v1/images' +export function getImage(params) { + return request.get(imageUrl, { + params + }) +} +export function conditionImage(obj) { + const params = { condition: JSON.stringify(obj) } + return request.get(`${imageUrl}/condition`, { params }) +} +// vpc +export function getVpc(params) { + return request.get('/ims/v1/vpcs', { params }) +} +// 虚拟机 +const vmUrl = '/ims/v1/vms' +export function getVm(params) { + return request.get(vmUrl, { params }) +} +export function conditionVm(obj) { + const params = { condition: JSON.stringify(obj) } + return request.get(`${vmUrl}/condition`, { params }) +} +// 快照 +export function getSnapshot(params) { + return request.get('/ims/v1/snapshots', { + params + }) +} +// volume +export function getVolume(params, url) { + return request.get(url || '/ims/v1/volumes', { + params + }) +} +// 子网 +export function getSubnet(params) { + return request.get('/ims/v1/subnets', { + params + }) +} +// 规格 +export function getFlavor(params) { + return request.get('/ims/v1/flavors', { + params + }) +} +// 弹性IP +export function getListEip(params) { + return request.get('/ims/v1/elasticips/frees', { + params: wrapperParams(params) + }) +} + +export function conditionIp(params) { + return request.get('/ims/v1/ips/condition', { params }) +} + +// 浮动IP +export function getIp(params) { + return request.get('/ims/v1/ips', { + params + }) +} + +// IP池 +export function getIpPool(params) { + return request.get('/ims/v1/ip/pools', { + params + }) +} +// 安全组 +export function getGroup(params) { + return request.get('/ims/v1/sgroups', { + params + }) +} +// 密钥 +export function getKey(params) { + return request.get('/ims/v1/keypairs', { + params + }) +} +// 网络 +const networkUrl = '/ims/v1/networks' +export function getNetwork(params) { + return request.get(networkUrl, { + params + }) +} +export function conditionNetwork(obj) { + const params = { condition: JSON.stringify(obj) } + return request.get(`${networkUrl}/condition`, { params }) +} +// 路由 +export function getRouter(params) { + return request.get('/ims/v1/routers', { + params + }) +} +// 防火墙规则 +export function getFirewallRule(params) { + return request.get('/ims/v1/firewalls/rules', { + params + }) +} +// 防火墙策略 +export function getFirewallPolicy(params) { + return request.get('/ims/v1/firewalls/policies', { + params + }) +} +// 防火墙 +export function getFirewall(params) { + return request.get('/ims/v1/firewalls', { + params + }) +} +// 负载均衡 +export function getLb(params) { + return request.get('/ims/v1/lbs', { + params + }) +} + +export function getLbListen(params) { + return request.get('/ims/v1/lb/listeners', { + params + }) +} +// 区域 +export function getRegionCondition(params) { + return request.get('/ims/v1/regions/condition', { params: { condition: JSON.stringify(params) } }) +} diff --git a/src/services/platform/pool.js b/src/services/platform/pool.js new file mode 100644 index 0000000..d0142a1 --- /dev/null +++ b/src/services/platform/pool.js @@ -0,0 +1,16 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils/index' + +const baseUrl = '/ims/v1/pool/groups' + +export function getPool(params, options = {}) { + return request.get(baseUrl, { + params, + ...options + }) +} +export function getPoolCondition(params) { + return request.get(`${baseUrl}/condition`, { + params: { condition: JSON.stringify(params) } + }) +} diff --git a/src/services/services/catelog.ts b/src/services/services/catelog.ts new file mode 100644 index 0000000..8af1b40 --- /dev/null +++ b/src/services/services/catelog.ts @@ -0,0 +1,207 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils/index' + +// 图标 +const iconUrl = '/cos/v1/icons' +export function getIcon(params:any) { + return request.get(iconUrl, { params }) +} + +export function removeIcon(id: number) { + return request.delete(`${iconUrl}/${id}`) +} + +export function createIcon(params:any) { + return request.post(iconUrl, { params }) +} + +// 服务菜单 +const menuUrl = '/cos/v1/services/menus' +export function getMenu(params:any) { + return request.get(menuUrl, { params }) +} + +export function createMenu(params:any) { + return request.post(menuUrl, wrapperParams(params)) +} + +export function modifyMenu(params:any) { + return request.put(`${menuUrl}/${params.id}`, wrapperParams(params)) +} + +export function removeMenu(id:number) { + return request.delete(`${menuUrl}/${id}`) +} + +export function subnetDetail(id:number) { + return request.get(`${menuUrl}/${id}`) +} + +// 服务列表 +const itemUrl = '/cos/v1/services/items' +export function getItems(params:any) { + return request.get('/cos/v1/cloud/services', { params }) +} + +export function createItems(params:any) { + return request.post(itemUrl, wrapperParams(params)) +} + +export function modifyItems(params:any) { + return request.put(`${itemUrl}/${params.id}`, wrapperParams(params)) +} + +export function removeItems(id:number) { + return request.delete(`${itemUrl}/${id}`) +} + +export function itemsDetail(id:number) { + return request.get(`${itemUrl}/${id}`) +} + +// 服务发布 +export function itemsRelease(id:number, params:any) { + return request.patch(`${itemUrl}/${id}`, params) +} + +// 服务下架 +export function itemsUnRelease(id:number, params:any) { + return request.patch(`${itemUrl}/${id}`, params) +} + +// 绑定流程 +export function itemsBindFlow(params:any) { + return request.patch(`${itemUrl}/${params.id}`, { params }) +} + +// 服务的绑定流程 +export function itemsBindFlows(params:any) { + return request.get(`${itemUrl}/${params.id}/flow`, { params }) +} + +// 是否绑定了流程 +export function isBindFlow(params:any) { + return request.get(`${itemUrl}/isBinding`, { params }) +} + +// 绑定流程的服务列表 +export function bindFlowItems(params:any) { + return request.get(`${itemUrl}/flows/services`, { params }) +} + +// 使用模板的服务列表 +export function templateItems(params:any) { + return request.get(`${itemUrl}/templates/servicess`, { params }) +} + +// 租户下的服务列表 +export function getTenantServices(id:number, params:any) { + return request.get(`/cos/v1/services/tenants/${id}/services/able`, { + params: params + }) +} + +// 租户下授权服务列表 +export function getTenantQuotaServices(id:number, params:any) { + return request.get(`/cos/v1/services/tenants/${id}/able`, { + params: params + }) +} + +// 租户下授权服务列表搜索 +export function searchServicesList(params:any) { + return request.get('/cos/v1/cloud/services', { + params: params + }) +} + +export function conditionServicesList(params:any) { + return request.get('/cos/v1/cloud/services/condition', { + params: params + }) +} + +// 租户下的服务列表 +export function getTenantServicesCode(params:any) { + return request.get('/cos/v1/services/tenants', { + params + }) +} + +// 服务使用记录 +const itemsLogUrl = '/cos/v1/services/items/records' +export function itemsLog(params:any) { + return request.get(itemsLogUrl, { params }) +} + +export function itemsLogChart(params:any) { + return request.get(`${itemsLogUrl}/stats`, { params }) +} + +export function itemsVmLogChart(params:any) { + return request.get(`${itemsLogUrl}/stats`, params) +} + +export function removeItemsLog(id:number) { + return request.delete(`${itemsLogUrl}/${id}`) +} + +// 流程绑定配置列表 +const flowBindConfigUrl = '/cos/v1/flows/configs' +export function flowBindConfig(params:any) { + return request.get(flowBindConfigUrl, { params }) +} + +export function modifyFlowBindConfig(params:any) { + return request.put(`${flowBindConfigUrl}/${params.id}`, wrapperParams(params)) +} + +export function flowBindConfigDetail(params:any) { + return request.get(`${flowBindConfigUrl}/${params.id}`, { params }) +} + +export function flowQueryBindConfigDetail(params:any) { + return request.get(`${flowBindConfigUrl}/query`, { params }) +} + +const flowBindControlConfigUrl = '/cos/v1/flows/tenants' +export function flowBindControlConfig(params:any) { + return request.get(flowBindControlConfigUrl, { params }) +} + +export function modifyFlowBindControlConfig(params:any) { + return request.post(`${flowBindControlConfigUrl}`, wrapperParams(params)) +} + +export function deleteFlow(params:any) { + return request.delete(`${flowBindControlConfigUrl}/${params.id}`) +} + +// 被授权服务的租户 +export function authTenant(id:number) { + return request.get(`${itemUrl}/${id}/tenants`) +} + +// 批量服务授权租户 +export function authAllTenant(params:any) { + return request.patch(`${itemUrl}/tenants/grant`, wrapperParams(params)) +} + +// 多服务授权租户 +export function authsAllTenant(id:number, params:any) { + return request.post(`/cos/v1/services/tenants/${id}/grant`, wrapperParams(params)) +} + +// 服务授权租户 +export function itemsAuthTenant(id:number, params:any) { + return request.patch(`${itemUrl}/${id}/grant`, wrapperParams(params)) +} + +// 通过租户删除租户服务关系 +export function removeTenantItems(id:number) { + return request.delete(`${itemUrl}/tenants/${id}`) +} + +export function patchServices(action:string, params:any) { + return request.patch(`/cos/v1/services/items//${params.id}`, { action: action, ...wrapperParams(params) }) +} diff --git a/src/services/services/product.js b/src/services/services/product.js new file mode 100644 index 0000000..ef3a1bd --- /dev/null +++ b/src/services/services/product.js @@ -0,0 +1,53 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils/index' + +const billUrl = '/cos/v1/bills' + +export function getCategories(params) { + return request.get('/cos/v1/services/categories/condition', { + params + }) +} +export function getCategoriesByCode(serviceCode) { + return request.get(`/cos/v1/cloud/services/${serviceCode}/categories`) +} +export function getSkus(params) { + return request.get('/cos/v1/services/skus/condition', { + params + }) +} +export function getSkusDetail(id) { + return request.get(`/cos/v1/services/skus/${id}`) +} + +export function getPrices(params) { + return request.get('/cos/v1/skus/prices', { + params + }) +} +export function getSlaDetail(id) { + return request.get(`cos/v1/services/slas/${id}`) +} +export function applyResource(params) { + return request.post('/cos/v1/resource/application', wrapperParams(params)) +} +export function deleteApplyResource(params) { + return request.delete('/cos/v1/resources/applies', { params: wrapperParams(params) }) +} +export function modifyResource(params) { + return request.post('/cos/v1/resource/alteration', wrapperParams(params)) +} +// 获取VPC列表 +export function getVpc(params) { + return request.get('/ims/v1/nsx/routers', { + params + }) +} +// 服务退订 +export function unsubscribeService(params) { + return request.post('/cos/v1/resource/cancelation', wrapperParams(params)) +} +// 服务延期 +export function delayService(params) { + return request.post('/cos/v1/resource/extension', wrapperParams(params)) +} diff --git a/src/services/services/service.ts b/src/services/services/service.ts new file mode 100644 index 0000000..0b2dfad --- /dev/null +++ b/src/services/services/service.ts @@ -0,0 +1,50 @@ +import { IService } from '@/models/service' +import request from 'utils/request' +import { wrapperParams } from 'utils/index' + +export function getVendorTypes(params: any) { + return request.get('/ims/v1/vendors/condition', { + params: { condition: JSON.stringify(params) } + }) +} +const baseUrl = '/cos/v1/cloud/services' +export function getService(params:Base.IListParams) { + return request.get>(baseUrl, { + params + }) +} +export function getServiceDetail(id:number) { + return request.get(`${baseUrl}/${id}`) +} +export function createService(params:IService) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyService(params:IService) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeService(id:number) { + return request.delete(`${baseUrl}/${id}`) +} +export function batchOperateServices(ids: number[], action: 'PUBLISHED' | 'UNPUBLISHED') { + return request.patch(baseUrl, { action, ids }) +} +export function operateService(action:string, id:number) { + return request.patch(`${baseUrl}/${id}`, { + action + }) +} +// 产品树形列表 +export function getServiceTree() { + return request.get('/cos/v1/services/categories/tree') +} +// 流程绑定 +export function bindFlowToService(id:number, params:any[]) { + return request.post(`${baseUrl}/${id}/flows`, params) +} + +export function batchbindFlowToService(serviceIds:number[], serviceFlows:any[]) { + return request.post(`${baseUrl}/flows`, { + serviceIds, + serviceFlows + }) +} diff --git a/src/services/system/bizs.js b/src/services/system/bizs.js new file mode 100644 index 0000000..5444b97 --- /dev/null +++ b/src/services/system/bizs.js @@ -0,0 +1,42 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils/index' + +const baseUrl = '/sms/v1/bizs' +export function getBizs(params) { + return request.get(baseUrl, { + params + }) +} + +export function getPoolByBiz(id, params) { + return request.get(`${baseUrl}/${id}/pools`, { + params: wrapperParams(params) + }) +} +export function configBizPool(id, params) { + return request.post(`${baseUrl}/${id}/pools`, wrapperParams(params)) +} + +// 获取单个业务的关联项目 +export function getProjectByBizList(id) { + return request.get(`${baseUrl}/${id}/projects`) +} + +export function pacthRelatioonBiz(id, params) { + return request.patch(`${baseUrl}/${id}`, wrapperParams(params)) +} + +export function operateBiz(id, action, params) { + return request.patch(`${baseUrl}/${id}`, { + action, + ...wrapperParams(params) + }) +} + +// 导出业务列表 +export function exportBizsList(params) { + downloadFile('/sms/v1/bizs/export', params) +} diff --git a/src/services/system/depart.ts b/src/services/system/depart.ts new file mode 100644 index 0000000..011f697 --- /dev/null +++ b/src/services/system/depart.ts @@ -0,0 +1,14 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils/index' +import { IDepart } from '@/models/depart' + +const baseUrl = '/sms/v1/departments' + +export function getDepart(params: any) { + return request.get(baseUrl, { + params + }) +} diff --git a/src/services/system/dictionary.js b/src/services/system/dictionary.js new file mode 100644 index 0000000..a207ebb --- /dev/null +++ b/src/services/system/dictionary.js @@ -0,0 +1,17 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/sms/v1/dictionaries' +export function getDict(params) { + return request.get(baseUrl, { params }) +} + +export function getDictChildren(params) { + return request.get(`${baseUrl}/children`, { params }) +} + +export function getDictChildrenTree(params) { + return request.get(`${baseUrl}/children/tree`, { + params: wrapperParams(params) + }) +} diff --git a/src/services/system/index.js b/src/services/system/index.js new file mode 100644 index 0000000..ab83e46 --- /dev/null +++ b/src/services/system/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 replaceToken(params) { + return request.get('/sms/v1/token', { params }) +} +// 获取用户权限 +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 } }) +} diff --git a/src/services/system/license.js b/src/services/system/license.js new file mode 100644 index 0000000..cd0c95c --- /dev/null +++ b/src/services/system/license.js @@ -0,0 +1,26 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils' +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/system/manager.ts b/src/services/system/manager.ts new file mode 100644 index 0000000..59b6fd4 --- /dev/null +++ b/src/services/system/manager.ts @@ -0,0 +1,55 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils/index' +import { 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/system/message.js b/src/services/system/message.js new file mode 100644 index 0000000..bc47a97 --- /dev/null +++ b/src/services/system/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/system/project.js b/src/services/system/project.js new file mode 100644 index 0000000..0d9a2c1 --- /dev/null +++ b/src/services/system/project.js @@ -0,0 +1,61 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/sms/v1/projects' +export function getProject(params) { + return request.get(baseUrl, { + params + }) +} +export function getProjectDetailInfo(id) { + return request.get(`${baseUrl}/${id}`) +} +export function getProjectDetail(id) { + return request.get(`${baseUrl}/${id}/quotas`) +} +export function createProject(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyProject(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function switchProject(id, params) { + return request.patch(`${baseUrl}/${id}`, wrapperParams(params)) +} +export function removeProject(id) { + return request.delete(`${baseUrl}/${id}`) +} + +export function removeProjectList(params) { + return request.delete(`${baseUrl}`, { data: params }) +} + +export function exportProject(params) { + downloadFile(`${baseUrl}/export`, { params }) +} +export function getProjectByTenant(id, params) { + return request.get(`/sms/v1/tenants/${id}/projects`, { + ...wrapperParams(params) + }) +} + +export function getProjectMemberList(id) { + return request.get(`${baseUrl}/${id}/users`) +} + +export function settingProjectUser(id, params) { + return request.post(`${baseUrl}/${id}/users`, wrapperParams(params)) +} + +export function exportProjects(params) { + downloadFile('/sms/v1/projects/export', params) +} + +export function conditionProject(params) { + return request.get(`${baseUrl}/condition`, { + params + }) +} diff --git a/src/services/system/shop_cart.js b/src/services/system/shop_cart.js new file mode 100644 index 0000000..4c3054f --- /dev/null +++ b/src/services/system/shop_cart.js @@ -0,0 +1,22 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' +const shoppingUrl = '/cos/v1/shopping/cart' + +export function getShoppingCart(params) { + return request.get(shoppingUrl, { + params + }) +} +export function removeShoppingCart(id) { + return request.delete(`${shoppingUrl}/${id}`) +} +export function getShoppingCartDetail(id) { + return request.get(`${shoppingUrl}/${id}`) +} +export function emptyShoppingCart(params) { + return request.put(shoppingUrl, wrapperParams(params)) +} + +export function putShoppingCart(id, params) { + return request.put(`${shoppingUrl}/${id}`, wrapperParams(params)) +} diff --git a/src/services/system/system.js b/src/services/system/system.js new file mode 100644 index 0000000..4926690 --- /dev/null +++ b/src/services/system/system.js @@ -0,0 +1,24 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/sms/v1/systems' +export function getSystems(params) { + return request.get(baseUrl, { + params + }) +} +export function getSystemsDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createSystems(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifySystems(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeSystems(id) { + return request.delete(`${baseUrl}/${id}`) +} diff --git a/src/services/system/tag.js b/src/services/system/tag.js new file mode 100644 index 0000000..ba1e9c1 --- /dev/null +++ b/src/services/system/tag.js @@ -0,0 +1,29 @@ +import request from 'utils/request' + +const baseUrl = 'sms/v1/tags' + +export function getTags(params) { + return request.get(baseUrl, { + params + }) +} + +export function getTagsDetail(id) { + return request.get(`${baseUrl}/${id}`) +} + +export function createTag(params) { + return request.post(baseUrl, { + ...params + }) +} + +export function modifyTag(params) { + return request.put(`${baseUrl}/${params.id}`, { + ...params + }) +} + +export function removeTag(id) { + return request.delete(`${baseUrl}/${id}`) +} diff --git a/src/services/system/tenant.ts b/src/services/system/tenant.ts new file mode 100644 index 0000000..057d96a --- /dev/null +++ b/src/services/system/tenant.ts @@ -0,0 +1,176 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils/index' + +const baseUrl = '/sms/v1/tenants' +export function getTenant(params:any) { + return request.get(baseUrl, { + params + }) +} +export function checkedTenant(account:string) { + return request.get(`${baseUrl}/${account}/exist`) +} + +export function getTenantTree(params:any) { + return request.get(`${baseUrl}`, { + params: { + condition: JSON.stringify({ condition: 'children' }), + ...params + } + }) +} +export function getTenantDetail(id:number) { + return request.get(`${baseUrl}/${id}/quotas`) +} +// 租户信息 +export function getTenantInfo(id:number) { + return request.get(`${baseUrl}/${id}`) +} +// 租户下用户列表 +export function getTenantUserTrans(id:number, params: any) { + return request.get(`${baseUrl}/${id}/users`, { params }) +} +// 租户下服务列表 +export function getTenantService(id:number) { + return request.get(`/cos/v1/services/tenants/${id}/services`) +} +export function createTenant(params:any) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyTenant(params:any) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeTenant(id:number) { + return request.delete(`${baseUrl}/${id}`) +} +export function getTenantStats(params:any) { + return request.get(`${baseUrl}/stats`, { + params: wrapperParams(params) + }) +} +export function getTenantPool(id:number) { + return request.get(`${baseUrl}/${id}/pools`) +} +export function assignTenantPools(params:any) { + return request.post(`${baseUrl}/${params.id}/pools`, JSON.stringify(params.poolIds)) +} + +export function resetTenantPsw(id:number, params:any) { + return request.patch(`${baseUrl}/${id}/reset`, { + ...wrapperParams(params) + }) +} + +/* + * action取值为: + * lock active reset accredit change + */ +export function operateTenant(id:number, action:string, params:any) { + return request.patch(`${baseUrl}/${id}`, { + action, + ...wrapperParams(params) + }) +} +// 租户配额 +export function getQuotaTenant(id:number, params:any) { + return request.get(`/cos/v1/tenants/${id}/quotas`, { params }) +} + +export function getCscQuotaTenant(params:any) { + return request.get(`/cos/v1/tenants/${params.tenantId ? params.tenantId : params.target}/quotas`, { params: wrapperParams(params) }) +} + +export function createQuotaTenant(id:number, params:any) { + return request.post(`/cos/v1/tenants/${id}/quotas`, wrapperParams(params)) +} + +export function getTenantBus(id:number, params:any) { + return request.get(`/sms/v1/tenants/${id}/businesses`, { params }) +} +export function createTenantBus(id:number, params:any) { + return request.post(`/sms/v1/tenants/${id}/businesses`, params) +} +export function createTenantPool(id:number, params:any) { + return request.post(`/sms/v1/tenants/${id}/pools`, params) +} +export function getOsTenant(params:any) { + return request.get('/ims/v1/ostenants', { + params + }) +} +export function createOsTenantt(params:any) { + return request.post('/ims/v1/ostenants', wrapperParams(params)) +} +export function modifyOsTenant(params:any) { + return request.put(`/ims/v1/ostenants/${params.id}`, wrapperParams(params)) +} +export function assignOsTenantt(params:any) { + return request.post(`/ims/v1/ostenants/${params.id}/tenant`, wrapperParams(params)) +} +export function deleteOsTenant(id:number) { + return request.delete(`/ims/v1/ostenants/${id}/tenant`) +} +export function removeOsTenant(id:number) { + return request.delete(`/ims/v1/ostenants/${id}`) +} +export function conditionOsTenant(params:any) { + return request.get('/ims/v1/ostenants/condition', { + params + }) +} +export function getTrack(params:any) { + return request.get(`${baseUrl}/track`, { + params: params + }) +} +export function getUser(params:any) { + return request.get('/sms/v1/users', { params }) +} +// 获取授信 +export function getTenantAccount(id:number) { + return request.get(`/cos/v1/tenants/${id}/account`) +} +// 授信修改 +export function createTenantAccount(params:any) { + return request.post('/cos/v1/tenants/account', wrapperParams(params)) +} +export function getApiById(id:number, params:any) { + return request.get(`/sms/v1/tenants/${id}/apis`, { + params: params + }) +} +export function updateApi(id:number, params:any) { + return request.patch(`/sms/v1/tenants/${id}/apis`, params) +} +// 配额 +export function getBaseQuotas() { + return request.get('/cos/v1/quotas/metas') +} + +export function getTenantBaseQuotas(id:number) { + return request.get(`/cos/v1/tenants/${id}/quotas/metas`) +} + +// 租户配置用户 +export function tenantCongigUser(params:any) { + return request.post(`/sms/v1/tenants/${params.id}/users`, params.ids) +} + +// 租户移除用户 +export function tenantRemoveUser(id:number) { + return request.patch(`/sms/v1/users/${id}/tenants`) +} + +// /sms/v1/tenants +// 租户移除用户 +export function lockTenant(params: any) { + return request.patch('/sms/v1/tenants', params) +} + +// 导出租户列表 +export function exportTenantList(params:any) { + downloadFile('/sms/v1/tenants/export', params) +} diff --git a/src/services/system/user.js b/src/services/system/user.js new file mode 100644 index 0000000..4ef5e79 --- /dev/null +++ b/src/services/system/user.js @@ -0,0 +1,11 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' + +const baseUrl = '/sms/v1/users' +export function getUser(params) { + return request.get(baseUrl, { + params + }) +} diff --git a/src/services/task/cmdb.js b/src/services/task/cmdb.js new file mode 100644 index 0000000..edfe9e5 --- /dev/null +++ b/src/services/task/cmdb.js @@ -0,0 +1,40 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/cop/v1/cmdb' +export function getAppLevels() { + return request.get(`${baseUrl}/applevels`) +} +export function getModuls(params) { + return request.get(`${baseUrl}/modules`, { + params + }) +} +export function getTopos(params) { + return request.get(`${baseUrl}/topos`, { + params + }) +} +export function getHostModule() { + return request.get(`${baseUrl}/hosts/modules`) +} +export function getHostInstance() { + return request.get(`${baseUrl}/hosts/instances`) +} +export function getReportsDetail(id) { + return request.get(`${baseUrl}/report/detail/${id}`) +} +export function createReports(params) { + return request.post(`${baseUrl}/report`, wrapperParams(params)) +} +export function modifyReports(params) { + return request.put(`${baseUrl}/report/${params.id}`, wrapperParams(params)) +} +export function removeReports(id) { + return request.delete(`${baseUrl}/report/${id}`) +} +export function batchRemoveReports(params) { + return request.delete(`${baseUrl}/report`, { + data: wrapperParams(params) + }) +} diff --git a/src/services/task/command.js b/src/services/task/command.js new file mode 100644 index 0000000..7c0593c --- /dev/null +++ b/src/services/task/command.js @@ -0,0 +1,33 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/cop/v1/commands' + +export function getCommand(params) { + return request.get(baseUrl, { + params + }) +} +export function getCommandDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createCommand(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyCommand(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeCommand(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function applyCommand(id) { + return request.patch(`${baseUrl}/${id}`) +} +export function getRoleCommand(params) { + return request.get(`${baseUrl}/authorized`, { + params: params + }) +} +export function accreditCommand(params) { + return request.patch(`${baseUrl}/accredit`, wrapperParams(params)) +} diff --git a/src/services/task/compare.js b/src/services/task/compare.js new file mode 100644 index 0000000..77c4d27 --- /dev/null +++ b/src/services/task/compare.js @@ -0,0 +1,121 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/cop/v1/compare' +export function operateBackups(action, params) { + return request.patch(`${baseUrl}/backups`, { + action, ...params + }) +} + +// 标准对比 +export function getStandardCompareList(params) { + return request.get(`${baseUrl}/standards`, { + params + }) +} +export function createStandardCompare(params) { + return request.post(`${baseUrl}/standards`, wrapperParams(params)) +} +// 标准文件列表 +export function getStandardFileList(params) { + return request.get(`${baseUrl}/standard/files`, { + headers: { options: { ignoreError: true } }, + params + }) +} +export function getStandardFiles(params) { + return request.get(`${baseUrl}/standard/files/subsystem`, { + headers: { options: { ignoreError: true } }, + params + }) +} +export function uploadStandardFileList(params) { + return request.post(`${baseUrl}/standard/files`, wrapperParams(params), { + headers: { 'Content-Type': 'multipart/form-data', BsmAjaxHeader: true, options: { noSeri: true } } + }) +} +export function removeStandardFile(params) { + return request.delete(`${baseUrl}/standard/files/${params.id}`, { + data: params + }) +} +// 文件列表 +export function getFileList(params) { + return request.get(`${baseUrl}/standard/files/contents`, { + headers: { options: { ignoreError: true } }, + params + }) +} +export function createCompare(params) { + return request.post(`${baseUrl}/standards`, params, { + headers: { 'Content-Type': 'application/x-www-form-urlencoded', BsmAjaxHeader: true } + }) +} + +// 历史对比 +export function getHistoryCompareList(params) { + return request.get(`${baseUrl}/historicals`, { + params + }) +} +export function createHistoryCompare(params) { + return request.post(`${baseUrl}/historicals`, wrapperParams(params), { + headers: { 'Content-Type': 'application/x-www-form-urlencoded', BsmAjaxHeader: true } + }) +} +// 跨机对比 +export function getCrossCompareList(params) { + return request.get(`${baseUrl}/crosses`, { + params + }) +} +export function createCrossCompare(params) { + return request.post(`${baseUrl}/crosses`, wrapperParams(params), { + headers: { 'Content-Type': 'application/x-www-form-urlencoded', BsmAjaxHeader: true } + }) +} +export function removeCrossCompare(id) { + return request.delete(`${baseUrl}/crosses/${id}`) +} +export function getCheckDeviceGroupList(params) { + return request.get(`${baseUrl}/devices/groups`, { + params + }) +} +export function getAllDeviceList(params) { + return request.get(`${baseUrl}/devices`, { + headers: { options: { ignoreError: true } }, + params + }) +} +export function getDeviceGroupRelation(params) { + return request.get(`${baseUrl}/devices/groups/relations`, { + headers: { options: { ignoreError: true } }, + params + }) +} +// 对比结果 +export function getCompareTaskResult(params) { + return request.get(`${baseUrl}/results`, { + params + }) +} +// 命令白名单 +export function getWhiteList(params) { + return request.get(`${baseUrl}/whites`, { + params + }) +} +export function createWhite(params) { + return request.post(`${baseUrl}/whites`, wrapperParams(params)) +} +export function modifyWhite(params) { + return request.put(`${baseUrl}/whites/${params.id}`, wrapperParams(params)) +} +export function removeWhite(id) { + return request.delete(`${baseUrl}/whites/${id}`) +} +export function getWhiteListById(id) { + return request.get(`${baseUrl}/whites/${id}`) +} diff --git a/src/services/task/compliance.js b/src/services/task/compliance.js new file mode 100644 index 0000000..1ecc419 --- /dev/null +++ b/src/services/task/compliance.js @@ -0,0 +1,119 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' +const baseUrl = '/cop/v1/compliance' +// 启动 +export function complianceOperate(params, action) { + return request.patch(baseUrl, { + action, ...params + }) +} +// 常规 +export function getRoutineList(params) { + return request.get(`${baseUrl}/routines`, { + params + }) +} +export function getRoutineDetail(id) { + return request.get(`${baseUrl}/routines/${id}`) +} +export function createRoutine(params) { + return request.post(`${baseUrl}/routines`, wrapperParams(params)) +} +export function modifyRoutine(params) { + return request.put(`${baseUrl}/routines/${params.id}`, wrapperParams(params)) +} +export function releaseRoutine(id) { + return request.patch(`${baseUrl}/routines/${id}/release`) +} +export function recallRoutine(id) { + return request.patch(`${baseUrl}/routines/${id}/recall`) +} +export function removeRoutine(id) { + return request.delete(`${baseUrl}/routines/${id}`) +} +export function routineOperate(action, id) { + return request.patch(`${baseUrl}/routines/${id}`, { + action + }) +} +// 基线 +export function getBaseLineList(params) { + return request.get(`${baseUrl}/items`, { + params + }) +} +export function getAllBaseLineList() { + return request.get(`${baseUrl}/items/all`) +} +export function getBaseLineDetail(id) { + return request.get(`${baseUrl}/items/${id}`) +} +export function getBaseLineParams(params) { + return request.get(`${baseUrl}/items/params`, { + params + }) +} +export function createBaseLine(params) { + return request.post(`${baseUrl}/items`, wrapperParams(params)) +} +export function modifyBaseLine(params) { + return request.put(`${baseUrl}/items/${params.id}`, wrapperParams(params)) +} +export function removeBaseLine(id) { + return request.delete(`${baseUrl}/items/${id}`) +} +// 历史记录 +export function getHistoryList(params) { + return request.get(`${baseUrl}/records`, { + params + }) +} +export function getHistoryDetail(params) { + return request.get(`${baseUrl}/records/details`, { + params + }) +} +// 模板 +export function getTemplateList(params) { + return request.get(`${baseUrl}/templates`, { + params + }) +} +export function getTemplateDetail(id) { + return request.get(`${baseUrl}/templates/${id}/items`) +} +export function createTemplate(params) { + return request.post(`${baseUrl}/templates`, wrapperParams(params)) +} +export function modifyTemplate(params) { + return request.put(`${baseUrl}/templates/${params.id}`, wrapperParams(params)) +} +export function removeTemplate(id) { + return request.delete(`${baseUrl}/templates/${id}`) +} +// 定时 +export function getTimingList(params) { + return request.get(`${baseUrl}/timings`, { + params + }) +} +export function createTimings(params) { + return request.post(`${baseUrl}/timings`, wrapperParams(params)) +} +export function modifyTimings(params) { + return request.put(`${baseUrl}/timings/${params.id}`, wrapperParams(params)) +} +export function getTimingsDetail(id) { + return request.get(`${baseUrl}/timings/${id}`) +} +export function timingsOperate(action, params) { + return request.patch(`${baseUrl}/timings/${params.id}`, { + action, ...params + }) +} +export function removeTimings(id) { + return request.delete(`${baseUrl}/timings/${id}`) +} +export function downloadTpl(id, type) { + downloadFile(`${baseUrl}/record/${type}/${id}`) +} diff --git a/src/services/task/ident.ts b/src/services/task/ident.ts new file mode 100644 index 0000000..febd554 --- /dev/null +++ b/src/services/task/ident.ts @@ -0,0 +1,31 @@ +import request from 'utils/request.js' +import { wrapperParams } from 'utils/index' + +const baseUrl = '/cop/v1/identifications' + +export function getIdents(params: any): any { + return request.get(baseUrl, { + params + }) +} +// simple修改 +export function getIdentsBySimple(params: any): any { + return request.get(`${baseUrl}/simple`, { + params + }) +} +export function getIdentsDetail(id: number) { + return request.get(`${baseUrl}/${id}`) +} +export function createIdents(params: any) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyIdents(params: any) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeIdents(id: number) { + return request.delete(`${baseUrl}/${id}`) +} +export function applyIdents(id: number) { + return request.patch(`${baseUrl}/${id}`) +} diff --git a/src/services/task/index.ts b/src/services/task/index.ts new file mode 100644 index 0000000..aaed84b --- /dev/null +++ b/src/services/task/index.ts @@ -0,0 +1,7 @@ +import request from 'utils/request.js' + +export function getNodeLogs(id: number, params: { end: boolean; priority?: number;}) { + return request.get(`/cop/v1/tasks/instances/nodes/${id}/logs`, { + params + }) +} diff --git a/src/services/task/inspect.js b/src/services/task/inspect.js new file mode 100644 index 0000000..7b672c9 --- /dev/null +++ b/src/services/task/inspect.js @@ -0,0 +1,305 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/cop/v1' +const inspectUrl = '/cop/v1/inspect' +// 概览 +export function getFirstPage(params) { + return request.get(`${inspectUrl}/summary`, { + params + }) +} +export function getHistoryInfo(params) { + return request.get(`${inspectUrl}/summary/history`, { + params + }) +} +export function getOverviewToday(params) { + return request.get(`${inspectUrl}/summary/current`, { + params + }) +} +// 巡检报表 +export function getReports(params) { + return request.get(`${inspectUrl}/reports`, { + params + }) +} +export function getReportsDetail(id) { + return request.get(`${inspectUrl}/reports/${id}`) +} +export function createReports(params) { + return request.post(`${inspectUrl}/reports`, wrapperParams(params)) +} +export function modifyReports(params) { + return request.put(`${inspectUrl}/reports/${params.id}`, wrapperParams(params)) +} +export function removeReports(id) { + return request.delete(`${inspectUrl}/reports/${id}`) +} +export function batchRemoveReports(params) { + return request.delete(`${inspectUrl}/reports`, { + data: wrapperParams(params) + }) +} + +export function reportsOperate(action, id) { + return request.patch(`${inspectUrl}/reports/${id}`, { + action + }) +} +export function reportsBatchOperate(action, params) { + return request.patch(`${inspectUrl}/reports`, { + action, ...params + }) +} +export function getReportsHistorys(params) { + return request.get(`${inspectUrl}/reports/details`, { + params + }) +} +export function getReportsHistorysDetail(id) { + return request.get(`${inspectUrl}/reports/details/${id}`) +} +export function getReportsHistorysTemplateDetail(params) { + return request.get(`${inspectUrl}/reports/details/${params.id}/templates`, { + params: params + }) +} + +// 常规巡检 +export function getRoutine(params) { + return request.get(`${inspectUrl}/routines`, { + params + }) +} +export function getAllRoutines() { + return request.get(`${inspectUrl}/routines/all`) +} +export function getRoutineDetail(id) { + return request.get(`${inspectUrl}/routines/${id}`) +} +export function createRoutine(params) { + return request.post(`${inspectUrl}/routines`, wrapperParams(params)) +} +export function modifyRoutine(params) { + return request.put(`${inspectUrl}/routines/${params.id}`, wrapperParams(params)) +} +export function releaseRoutine(id) { + return request.patch(`${inspectUrl}/routines/${id}/release`) +} +export function recallRoutine(id) { + return request.patch(`${inspectUrl}/routines/${id}/recall`) +} +export function createRun(params) { + return request.post(`${inspectUrl}/run`, wrapperParams(params)) +} +export function removeRoutine(id) { + return request.delete(`${inspectUrl}/routines/${id}`) +} +export function removeBatchRoutine(params) { + return request.delete(`${inspectUrl}/routines`, { + data: wrapperParams(params) + }) +} +export function RoutineOperate(id, action) { + return request.patch(`${inspectUrl}/routines/${id}`, { + action + }) +} +export function RoutineBatchOperate(params, action) { + return request.patch(`${inspectUrl}/routines`, { + action, ...params + }) +} + +// 巡检指标 +export function getInspectItem(params) { + return request.get(`${inspectUrl}/items`, { + params + }) +} +export function getAllInspectItem() { + return request.get(`${inspectUrl}/items/all`) +} +export function getInspectItemDetail(id) { + return request.get(`${inspectUrl}/items/${id}`) +} +export function createInspectItem(params) { + return request.post(`${inspectUrl}/items`, wrapperParams(params)) +} +export function modifyInspectItem(params) { + return request.put(`${inspectUrl}/items/${params.id}`, wrapperParams(params)) +} +export function removeInspectItem(id) { + return request.delete(`${inspectUrl}/items/${id}`) +} +export function removeBatchInspectItem(params) { + return request.delete(`${inspectUrl}/items`, { + data: wrapperParams(params) + }) +} +export function getInspectItemParams(params) { + return request.get(`${inspectUrl}/items/params`, { + params + }) +} + +// 告警设置 +export function getWarns(params) { + return request.get(`${inspectUrl}/warns`, { + params + }) +} +export function createWarns(params) { + return request.post(`${inspectUrl}/warns`, wrapperParams(params)) +} +export function modifyWarns(params) { + return request.put(`${inspectUrl}/warns/${params.id}`, wrapperParams(params)) +} +export function removeWarns(id) { + return request.delete(`${inspectUrl}/warns/${id}`) +} +// 定时巡检 +export function getTimings(params) { + return request.get(`${inspectUrl}/timings`, { + params + }) +} +export function getTimingsDetail(id) { + return request.get(`${inspectUrl}/timings/${id}`) +} +export function createTimings(params) { + return request.post(`${inspectUrl}/timings`, wrapperParams(params)) +} +export function modifyTimings(params) { + return request.put(`${inspectUrl}/timings/${params.id}`, wrapperParams(params)) +} +export function removeTimings(id) { + return request.delete(`${inspectUrl}/timings/${id}`) +} +export function removeBatchTimings(params) { + return request.delete(`${inspectUrl}/timings`, { + data: wrapperParams(params) + }) +} +export function timingsOperate(id, action) { + return request.patch(`${inspectUrl}/timings/${id}`, { + action + }) +} +export function timingsBatchOperate(params, action) { + return request.patch(`${inspectUrl}/timings`, { + action, ...params + }) +} +// 巡检模板 +export function getTemplates(params) { + return request.get(`${inspectUrl}/templates`, { + params + }) +} +export function getTemplatesDetail(id) { + return request.get(`${inspectUrl}/templates/${id}`) +} +export function createTemplates(params) { + return request.post(`${inspectUrl}/templates`, wrapperParams(params)) +} +export function modifyTemplates(params) { + return request.put(`${inspectUrl}/templates/${params.id}`, wrapperParams(params)) +} + +export function removeTemplates(id) { + return request.delete(`${inspectUrl}/templates/${id}`) +} +// 巡检记录 +export function getRecords(params) { + return request.get(`${inspectUrl}/records`, { + params + }) +} +export function getRecordsDetailList(params) { + return request.get(`${inspectUrl}/records/${params.recordId}/items`, { + params + }) +} +export function getRecordsWarnList(params) { + return request.get(`${inspectUrl}/records/${params.recordId}/warns`, { + params + }) +} +export function getRecordsErrorList(params) { + return request.get(`${inspectUrl}/records/${params.recordId}/errors`, { + params + }) +} +export function createRecords(params) { + return request.post(`${inspectUrl}/records`, wrapperParams(params)) +} + +export function getScriptList(params) { + return request.get(`${baseUrl}/scripts`, { + params + }) +} +export function getScriptDetail(id) { + return request.get(`${baseUrl}/scripts/${id}`) +} +export function getScriptGroup(params) { + return request.get(`${baseUrl}/scripts/groups`, { + params + }) +} +// 网络环境 +export function getWebEnvironment() { + return request.get(`${baseUrl}/jdagents/environments/webs`) +} +// 服务器列表 +export function getHostAgent(params) { + return request.get(`${baseUrl}/jdagents`, { + params + }) +} +// 执行账户 +export function getIdent(params) { + return request.get(`${baseUrl}/identifications`, { + params + }) +} +export function getSystems(params) { + return request.get(`${baseUrl}/cmdb/resources`, { + params + }) +} +export function getDicts(params) { + return request.get(`${baseUrl}/resources/dicts`, { + params + }) +} +export function getResources(params) { + return request.get(`${baseUrl}/resources`, { + params + }) +} +export function getResourcesDetail(id) { + return request.get(`${baseUrl}/resources/${id}`) +} +// 区域列表 +export function getMasters(params) { + return request.get(`${baseUrl}/saltagents/masters`, { + params + }) +} +export function getJdAgents(params) { + return request.get(`${baseUrl}/jdagents`, { + params + }) +} +export function getSaltAgents(params) { + return request.get(`${baseUrl}/saltagents`, { + params + }) +} +export function downloadTpl(id, type) { + downloadFile(`${inspectUrl}/records/${id}/${type}`) +} diff --git a/src/services/task/node.js b/src/services/task/node.js new file mode 100644 index 0000000..914bbf9 --- /dev/null +++ b/src/services/task/node.js @@ -0,0 +1,69 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/cop/v1/tasknodes/modules' + +export function getModule(params) { + return request.get(baseUrl, { + params + }) +} +export function getModuleDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createModule(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyModule(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeModule(id) { + return request.delete(`${baseUrl}/${id}`) +} + +const groupUrl = `${baseUrl}/groups` +export function getGroup(params) { + return request.get(groupUrl, { + params + }) +} +export function getGroupDetail(id) { + return request.get(`${groupUrl}/${id}`) +} +export function createGroup(params) { + return request.post(groupUrl, wrapperParams(params)) +} +export function modifyGroup(params) { + return request.put(`${groupUrl}/${params.id}`, wrapperParams(params)) +} +export function removeGroup(id) { + return request.delete(`${groupUrl}/${id}`) +} +export function getTreeNodes(params) { + return request.get(`${groupUrl}/nodes`, { params }) +} + +const templateUrl = '/cop/v1/tasknodes/templates' +export function getTemplate(params) { + return request.get(templateUrl, { + params + }) +} +// simple修改 +export function getTemplateBySimple(params) { + return request.get(`${templateUrl}/simple`, { + params + }) +} +export function getTemplateDetail(id) { + return request.get(`${templateUrl}/${id}`) +} +export function createTemplate(params) { + return request.post(templateUrl, wrapperParams(params)) +} +export function modifyTemplate(params) { + return request.put(`${templateUrl}/${params.id}`, wrapperParams(params)) +} +export function removeTemplate(id) { + return request.delete(`${templateUrl}/${id}`) +} diff --git a/src/services/task/patch.js b/src/services/task/patch.js new file mode 100644 index 0000000..365ea11 --- /dev/null +++ b/src/services/task/patch.js @@ -0,0 +1,74 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/cop/v1/deploy/patchs' +export function getPatchList(params) { + return request.get(baseUrl, { + params + }) +} +export function getPatchDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function getPatchDetailList(params) { + return request.get(`${baseUrl}/details`, { + params + }) +} +export function createPatch(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyPatch(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removePatch(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function removeBatchPatch(params) { + return request.delete(baseUrl, { + data: params + }) +} +export function releasePatch(id) { + return request.patch(`${baseUrl}/${id}/release`) +} +export function recallPatch(id) { + return request.patch(`${baseUrl}/${id}/recall`) +} +export function patchOperate(id, action, params) { + return request.patch(`${baseUrl}/${id}`, { + action, ...params + }) +} +// +export function getPatchTemplates(params) { + return request.get(`${baseUrl}/templates`, { + params + }) +} +export function getPatchsoftwares(params) { + return request.get(`${baseUrl}/softwares`, { + params + }) +} +export function getTaskTemplates(params) { + return request.get('/cop/v1/deploy/tasks/templates', { + params + }) +} +export function getTemplatesDetail(id) { + return request.get(`/cop/v1/tasks/templates/${id}`) +} +export function getPatchHistory(params) { + return request.get(`${baseUrl}/histories`, { + params + }) +} +export function getPatchDetailHistory(params, id) { + return request.get(`${baseUrl}/${id}/histories`, { + params + }) +} +export function downloadTpl(id, type) { + downloadFile(`${baseUrl}/histories/${id}/${type}`) +} diff --git a/src/services/task/resource.js b/src/services/task/resource.js new file mode 100644 index 0000000..cf67c2a --- /dev/null +++ b/src/services/task/resource.js @@ -0,0 +1,102 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +export function getHosts(params) { + return request.get('/cop/v1/hosts', { params }) +} + +export function getHostDetail(id) { + return request.get(`/cop/v1/hosts/${id}`) +} + +export function createHost(params) { + return request.post('/cop/v1/hosts', params) +} +export function syncHost(category) { + return request.post(`/cop/v1/hosts/${category}/sync`) +} + +export function updateBsmHost(params) { + return request.put(`/cop/v1/hosts/${params.id}`, params) +} +export function deleteBsmHost(id) { + return request.delete(`/cop/v1/hosts/${id}`) +} +export function getBsmHostDetail(id) { + return request.get(`/cop/v1/hosts/${id}`) +} +export function synHost(category) { + return request.post(`/cop/v1/hosts/${category}/sync`) +} +export function HostsAllow(hostId) { + return request.post(`/cop/v1/hosts/${hostId}/allow/config`) +} +export function getBsmHostGroup(params) { + return request.get('/cop/v1/network/groups', { params }) +} +export function createBsmHostGroup(params) { + return request.post('/cop/v1/network/groups', params) +} +export function updateBsmHostGroup(params) { + return request.put(`/cop/v1/network/groups/${params.id}`, params) +} +export function deleteBsmHostGroup(id) { + return request.delete(`/cop/v1/network/groups/${id}`) +} +export function getBsmHostNetwork(params) { + return request.get('/cop/v1/network/segments', { params }) +} +export function createBsmHostNetwork(params) { + return request.post('/cop/v1/network/segments', params) +} +export function updateBsmHostNetwork(params) { + return request.put(`/cop/v1/network/segments/${params.id}`, params) +} +export function deleteBsmHostNetwork(id) { + return request.delete(`/cop/v1/network/segments/${id}`) +} +export function getBsmHostNetworkDetail(id) { + return request.get(`/cop/v1/network/segments/${id}`) +} +export function getWorkers(params) { + return request.get('/cop/v1/task/workers', { params }) +} +export function createBsmHostWorker(params) { + return request.post('/cop/v1/task/workers', params) +} +export function updateBsmHostWorker(params) { + return request.put(`/cop/v1/task/workers/${params.id}`, params) +} +export function deleteBsmHostWorker(id) { + return request.delete(`/cop/v1/task/workers/${id}`) +} +export function setBsmHostWorker(params) { + return request.put(`/cop/v1/task/workers/${params.workerId}/configure/${params.groupId}`, params) +} +export function setBsmHostSegment(params) { + return request.put(`/cop/v1/hosts/${params.hostId}/configure/${params.segmentId}`, params) +} +export function getWorkerDetail(id) { + return request.get(`/cop/v1/task/workers/${id}`) +} +export function getBsmNetworkSegmentsHostsCount(id) { + return request.get(`/cop/v1/network/segments/${id}/hosts/count`) +} +export function setBsmNetworkSegmentsInspect(params) { + return request.post(`/cop/v1/network/segments/${params.id}/inspect`, params) +} +export function getBsmHostStats(params) { + return request.get('/cop/v1/hosts/stats', { params }) +} +export function getBsmHostSegmentsStats(params) { + return request.get('/cop/v1/hosts/segments/stats', { params }) +} +export function getBsmHostInspectionsRecords(params) { + return request.get('/cop/v1/hosts/inspections/records', { params }) +} +export function setBsmHostsInspect(params) { + return request.post(`/cop/v1/hosts/${params.id}/inspect`, params) +} +export function createBsmHostsDownload() { + downloadFile('/cop/v1/hosts/template/download') +} diff --git a/src/services/task/script.js b/src/services/task/script.js new file mode 100644 index 0000000..2088145 --- /dev/null +++ b/src/services/task/script.js @@ -0,0 +1,95 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/cop/v1/scripts' + +export function getScript(params) { + return request.get(baseUrl, { + params + }) +} +export function releaseRoutine(id) { + return request.patch(`${baseUrl}/${id}/release`) +} +export function recallRoutine(id) { + return request.patch(`${baseUrl}/${id}/recall`) +} +// simple修改 +export function getScriptBySimple(params) { + return request.get(`${baseUrl}/simple`, { + params + }) +} +export function getScriptDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createScript(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyScript(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeScript(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function exportScript(id) { + downloadFile(`${baseUrl}/${id}/export`) +} +export function operateScript(id, action) { + return request.patch(`${baseUrl}/${id}`, { + action + }) +} + +const groupUrl = '/cop/v1/scripts/groups' +export function getGroup(params) { + return request.get(groupUrl, { + params + }) +} +export function getGroupDetail(id) { + return request.get(`${groupUrl}/${id}`) +} +export function createGroup(params) { + return request.post(groupUrl, wrapperParams(params)) +} +export function modifyGroup(params) { + return request.put(`${groupUrl}/${params.id}`, wrapperParams(params)) +} +export function removeGroup(id) { + return request.delete(`${groupUrl}/${id}`) +} + +const versionUrl = '/cop/v1/scripts/versions' +export function getVersion(id, params) { + return request.get(`${baseUrl}/${id}/versions`, { + params + }) +} +export function getVersionDetail(id) { + return request.get(`${versionUrl}/${id}`) +} +export function createVersion(params) { + return request.post(versionUrl, wrapperParams(params)) +} +export function modifyVersion(params) { + return request.put(`${versionUrl}/${params.id}`, wrapperParams(params)) +} +export function removeVersion(id) { + return request.delete(`${versionUrl}/${id}`) +} +export function compareVersion(id) { + return request.patch(`${versionUrl}/${id}`, { + action: 'compare' + }) +} +export function getVersionHistory(id, params) { + return request.get(`${versionUrl}/${id}/contents`, { params }) +} +// simple修改 +export function getVersionHistoryBySimple(id, params) { + return request.get(`${versionUrl}/${id}/contents/simple`, { params }) +} diff --git a/src/services/task/server.js b/src/services/task/server.js new file mode 100644 index 0000000..f915178 --- /dev/null +++ b/src/services/task/server.js @@ -0,0 +1,30 @@ +import request from 'utils/request' +import { wrapperParams } from 'utils' + +const baseUrl = '/cop/v1/servers/users' + +export function manageService(params) { + return request.patch('/cop/v1/servers/services', wrapperParams(params)) +} +export function createUser(params) { + return request.post(`${baseUrl}`, wrapperParams(params)) +} +export function modifyUser(params) { + return request.put(`${baseUrl}`, wrapperParams(params)) +} +export function removeUser(params) { + return request.delete(`${baseUrl}`, { data: params }) +} + +const authUrl = `${baseUrl}/auths` +export function createAuth(params) { + return request.post(`${authUrl}`, wrapperParams(params)) +} +export function getAuth(params) { + return request.get(`${authUrl}`, { + params: wrapperParams(params) + }) +} +export function removeAuth(params) { + return request.delete(`${authUrl}`, { data: params }) +} diff --git a/src/services/task/soft.js b/src/services/task/soft.js new file mode 100644 index 0000000..4ff084f --- /dev/null +++ b/src/services/task/soft.js @@ -0,0 +1,59 @@ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/cop/v1/softwares' + +export function getSoftwares(params) { + return request.get(baseUrl, { + params + }) +} +export function getSoftwaresDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createSoftwares(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifySoftwares(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeSoftwares(id) { + return request.delete(`${baseUrl}/${id}`) +} +export function getFileExists(name) { + return request.get(`${baseUrl}/${name}/exists`) +} +export function getSoftwaresCheck(params) { + return request.get(`${baseUrl}/check`, { + params + }) +} +export function releaseRoutine(id) { + return request.patch(`${baseUrl}/${id}/release`) +} +export function recallRoutine(id) { + return request.patch(`${baseUrl}/${id}/recall`) +} +export function exportSoftwares(path) { + downloadFile('/cop/v1/softwares/download', { + path: path + }) +} +const groupUrl = '/cop/v1/softwares/groups' +export function getGroup(params) { + return request.get(groupUrl, { + params + }) +} +export function getGroupDetail(id) { + return request.get(`${groupUrl}/${id}`) +} +export function createGroup(params) { + return request.post(groupUrl, wrapperParams(params)) +} +export function modifyGroup(params) { + return request.put(`${groupUrl}/${params.id}`, wrapperParams(params)) +} +export function removeGroup(id) { + return request.delete(`${groupUrl}/${id}`) +} diff --git a/src/services/task/task.js b/src/services/task/task.js new file mode 100644 index 0000000..602fa71 --- /dev/null +++ b/src/services/task/task.js @@ -0,0 +1,156 @@ +/** + * Created by HaijunZhang on 2019/7/23. + */ +import request from 'utils/request' +import { wrapperParams, downloadFile } from 'utils' + +const baseUrl = '/cop/v1/tasks' +export function getTaskStat() { + return request.get(`${baseUrl}/stats`) +} +// params.code修改 +export function getTaskStatByCode(code) { + return request.get(`${baseUrl}/stats/${code}`) +} +export function getTask(params) { + return request.get(baseUrl, { + params + }) +} +export function getTaskDetail(id) { + return request.get(`${baseUrl}/${id}`) +} +export function createTask(params) { + return request.post(baseUrl, wrapperParams(params)) +} +export function modifyTask(params) { + return request.put(`${baseUrl}/${params.id}`, wrapperParams(params)) +} +export function removeTask(id) { + return request.delete(`${baseUrl}/${id}`) +} +/* + * action取值为: + * start clone active suspend transfer applyStart applyRecover applyActive usage release recall + */ +// export function operateTask(id, action, params) { +// return request.patch(`${baseUrl}/${id}`, { +// action, +// ...wrapperParams(params) +// }) +// } +// action分类修改 +export function operateTask(id, action, params) { + return request.patch(`${baseUrl}/${id}/${action}`, wrapperParams(params)) +} + +export function useTask(params) { + return request.post(`${baseUrl}/usage`, wrapperParams(params)) +} +export function exportTask(id) { + downloadFile(`${baseUrl}/${id}/export`) +} + +const instanceUrl = '/cop/v1/tasks/instances' +export function getInstance(params) { + return request.get(instanceUrl, { + params + }) +} +export function removeInstance(id) { + return request.delete(`${instanceUrl}/${id}`) +} +export function getInstanceDetail(id) { + return request.get(`${instanceUrl}/${id}`) +} +export function getInstanceNode(id) { + return request.get(`${instanceUrl}/nodes/${id}`) +} +export function checkInstanceFile(params) { + return request.get(`${instanceUrl}/files/check`, { params }) +} +export function exportInstanceFile(path) { + downloadFile(`${instanceUrl}/files/download`, { path }) +} +/* + * action取值为: + * start recover cancel suspend active result + */ +// export function operateInstance(id, action, params) { +// return request.patch(`${instanceUrl}/${id}`, { +// action, +// ...wrapperParams(params) +// }) +// } +// action修改 +export function operateInstance(id, action, params) { + return request.patch(`${instanceUrl}/${id}/${action}`, wrapperParams(params)) +} +export function exportInstance(id, params) { + downloadFile(`${instanceUrl}/${id}/export`, params) +} + +const sceneUrl = '/cop/v1/tasks/scenes' +export function getScene(params) { + return request.get(sceneUrl, { + params + }) +} +// simple修改 +export function getSceneBySimple(params) { + return request.get(`${sceneUrl}/simple`, { + params + }) +} +export function getSceneDetail(id) { + return request.get(`${sceneUrl}/${id}`) +} +export function createScene(params) { + return request.post(sceneUrl, wrapperParams(params)) +} +export function modifyScene(params) { + return request.put(`${sceneUrl}/${params.id}`, wrapperParams(params)) +} +export function removeScene(id) { + return request.delete(`${sceneUrl}/${id}`) +} + +const templateUrl = '/cop/v1/tasks/templates' +export function getTemplate(params) { + return request.get(templateUrl, { + params + }) +} +// simple修改 +export function getTemplateBySimple(params) { + return request.get(`${templateUrl}/simple`, { + params + }) +} +export function getTemplateDetail(id) { + return request.get(`${templateUrl}/${id}`) +} +export function createTemplate(params) { + return request.post(templateUrl, wrapperParams(params)) +} +export function modifyTemplate(params) { + return request.put(`${templateUrl}/${params.id}`, wrapperParams(params)) +} +export function removeTemplate(id) { + return request.delete(`${templateUrl}/${id}`) +} +export function operateTemplate(id, action, params) { + return request.patch(`${templateUrl}/${id}`, { + action, + ...wrapperParams(params) + }) +} +export function releaseTemplate(id, params) { + return request.patch(`${templateUrl}/${id}/release`, wrapperParams(params)) +} +export function recallTemplate(id, params) { + return request.patch(`${templateUrl}/${id}/recall`, wrapperParams(params)) +} +export function exportTemplate(id) { + downloadFile(`${templateUrl}/${id}/export`) +} diff --git a/src/shared/action.ts b/src/shared/action.ts new file mode 100644 index 0000000..0a8128f --- /dev/null +++ b/src/shared/action.ts @@ -0,0 +1,32 @@ +type IState = { + name: string; + onmessage: any +} +function emptyAction(state:any, fireImmediately?: boolean) { + +} +class Actions { + actions = { + name: '', + onGlobalStateChange: emptyAction, + setGlobalState: emptyAction + } + + init(props: any, callback: any) { + this.actions = props; + this.onGlobalStateChange(callback) + } + + onGlobalStateChange(callback: any, fireImmediately:boolean = true) { + return this.actions.onGlobalStateChange(callback, fireImmediately); + } + + setGlobalState(state: IState) { + this.actions.setGlobalState({ + ...state, + name: this.actions.name + }); + } +} +const actions = new Actions(); +export default actions; diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..0e917f8 --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,8 @@ +const getters = { + addRoutes: state => state.permission.addRoutes, + userData: state => state.app.userData, + appPath: state => state.app.appPath, + pageConfig: state => state.app.pageConfig, + systemConfig: state => state.app.systemConfig +} +export default getters diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..463788f --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,17 @@ +/** + * Created by Zhang Haijun on 2017/8/25. + */ +import Vue from 'vue' +import Vuex from 'vuex' +import getters from './getters' +import { getModules } from 'utils/autoImport' + +Vue.use(Vuex) +const modulesFiles = require.context('./modules', true, /\.js$/); +const modules = getModules(modulesFiles) + +const store = new Vuex.Store({ + modules, + getters +}) +export default store diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..a16d678 --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,123 @@ +/** + * Created by Zhang Haijun on 2018/6/15. + */ +import { userKey, enableUserStorage } from '@/config' +import { getSystemConfigs, getUserInfo } from 'services/system' +// import { getLanguage } from '@/lang/index' +import { setBrowser } from '../utils' + +const state = { + isCollapsed: false, + layout: localStorage.getItem('layout') || 'sidemenu', + sideMenuData: [], + theme: { + name: 'default', + sidebarColor: '' + }, + pageConfig: {}, + systemConfig: {}, + userData: null, + appPath: '', + operateTime: '', + basePath: '', + $webSocket: '', + expire: false + // language: getLanguage() +}; +const mutations = { + SET_EXPIRE(state, value) { + state.expire = value; + }, + SET_OPERATETIME(state) { + state.operateTime = new Date().getTime() + }, + SET_LAYOUT(state, value) { + // state.layout = value; + // localStorage.setItem('layout', value) + }, + SET_WEBSOCKET(state, value) { + state.$webSocket = value + }, + SET_USERDATA(state, userData = {}) { + state.userData = userData + }, + SET_APP_PATH(state, value) { + state.appPath = value + }, + RESET_USER(state) { + state.userData = {} + if (enableUserStorage) { + localStorage.removeItem(userKey) + } + }, + TOGGLE_SIDEBAR(state) { + state.isCollapsed = !state.isCollapsed + }, + SETTING_SIDE_MENU(state, data) { + state.sideMenuData = data + }, + SETTING_BASE_PATH(state, data) { + state.basePath = data + }, + SETTING_PAGE_CONFIG(state, data) { + const { browserIcon, browserTitle } = data; + setBrowser(browserIcon, browserTitle) + state.pageConfig = data + }, + SETTING_SYSTEM_CONFIG(state, data) { + state.systemConfig = data + }, + SETTING_THEME(state, data) { + state.theme = data + }, + SET_LANGUAGE: (state, language) => { + state.language = language + localStorage.setItem('language', language) + } +}; +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 || require('assets/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/graph.js b/src/store/modules/graph.js new file mode 100644 index 0000000..2199bd3 --- /dev/null +++ b/src/store/modules/graph.js @@ -0,0 +1,48 @@ +/** + * Created by Zhang Haijun on 2018/12/25. + */ +import { getModule } from 'services/task/node' + +const graph = { + state: { + moduleMap: {}, + editor: {} + }, + mutations: { + SET_EDITOR (state, editor) { + state.editor = editor + }, + SET_MODULE (state, data) { + state.moduleMap = data; + } + }, + actions: { + GetModuleMap ({ commit }) { + getModule({ + page: 1, + rows: 10000 + }).then(data => { + if (data.success) { + const obj = { + 'task.software.role': { + template: '{"deploy":{}}', + preConstraints: '{"rule":"white","data":[{"code": "^task[.]resource[.]cvm[.][a-z]{1,20}$"}]}', + postConstraints: '{"rule":"white","data":[]}' + }, + 'task.maintain.recovery': { + name: '恢复节点' + }, + 'task.software.exporter': { + name: 'NodeExporter安裝' + } + }; + data.data.rows.forEach(item => { + obj[item.code] = item; + }) + commit('SET_MODULE', obj); + } + }) + } + } +} +export default graph diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js new file mode 100644 index 0000000..d0741c1 --- /dev/null +++ b/src/store/modules/permission.js @@ -0,0 +1,201 @@ +/** + * Created by HaijunZhang on 2018/11/12. + */ +import { resolvePath } from 'utils/resolvePath' +import router, { asyncRouterMap, resetRouter } from '@/router' +import { removeToken } from 'utils/auth' +import { menuKey, enablePermissionStorage, baseUrl } from '@/config' +import { getUserPermissions } from 'services/system' +import { urlToList } from '../utils' + +// 是否为qinakun环境 +const POWERED_BY_QIANKUN = window.__POWERED_BY_QIANKUN__ +// 获取应用路由数据 +const getAppRoutes = data => { + const routes = [] + for (const item of data) { + if (item.path === baseUrl) { + routes.push(item); + break; + } + } + return routes[0]?.children; +} +const resultRoutes = []; +// 递归获取路由的父元素 +const getParent = (path, routes) => { + let res; + for (const route of routes) { + const { path: ph, component } = route; + // 组件存在并且路径相同 + if (component && ph === path) { + res = route; + break; + } else if (route.children) { + res = getParent(path, route.children) + } + } + return res +} +export const createRoute = item => { + const urlList = urlToList(item.path); + // ['/system','/system/configs','/system/configs/page'] -> ['/system/configs', '/system'] + const resultList = urlList.slice(0, urlList.length - 1).reverse(); + let t = ''; + for (const url of resultList) { + t = getParent(url, resultRoutes); + if (t) break; + } + if (t) { + if (t.children) { + t.children.push(item) + } else { + t.children = [item]; + } + router.addRoute(t.name, item) + } else { + resultRoutes.push(item); + if (POWERED_BY_QIANKUN) { + router.addRoute(item) + } else { + router.addRoute('Home', item) + } + } +} +// 对异步路由数据进行处理生成路由表 +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, + redirect, + hidden: category === 'view', + meta: { + ...metaCache, + title: name, + icon + }, + params: paramsCache + } + if (component || redirect) { + createRoute({ + path: resolvePath(basePath, route.path), + component: asyncRouterMap[component], + name: router, + redirect: redirect && resolvePath(basePath, redirect), + meta: { + ...metaCache, + title: name, + icon + }, + params: paramsCache + }) + } + if (route.children) { + tmp.children = handleAsyncRouter(route.children, tmp.path) + } + res.push(tmp) + }) + return res +} +const state = { + addRoutes: null, + buttons: [] +} +const mutations = { + SET_ROUTES: (state, routers) => { + state.addRoutes = routers + }, + SET_BUTTONS: state => { + state.buttons = JSON.parse(localStorage.getItem('buttonData')) + } +} +const actions = { + GenerateRoutes({ commit, state: { addRoutes } }, permissions) { + return new Promise(resolve => { + const callback = permission => { + resultRoutes.length = 0; + const asyncRouter = handleAsyncRouter(getAppRoutes(permission)) + commit('SET_ROUTES', asyncRouter); + commit('SETTING_SIDE_MENU', asyncRouter, { root: true }) + resolve(asyncRouter) + } + // permissions存在,作为子应用加载 + if (permissions) { + callback(permissions) + return; + } + // 如果启用了本地缓存并且刷新界面进入,直接在缓存取数据,因为存在一种情况主动更新数据 + 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(accessRoutes => { + resolve() + }) + }) + }, + ResetRoutes({ commit, dispatch, rootGetters }, 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 (POWERED_BY_QIANKUN) { + location.href = '/login' + } else if (redirectToLogin) { + router.replace('/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..2e0dea0 --- /dev/null +++ b/src/store/modules/tagsView.js @@ -0,0 +1,137 @@ +import { nth } from 'lodash-es' +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( + Object.assign({}, 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) + index > -1 && state.cachedViews.splice(index, 1) + }, + + DEL_OTHERS_VISITED_VIEWS: (state, view) => { + state.visitedViews = state.visitedViews.filter(v => { + return 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 }, { view, 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 }, { view, 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 }, view) { + 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..c50f91a --- /dev/null +++ b/src/store/utils.js @@ -0,0 +1,16 @@ +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) => { + return `/${urllist.slice(0, index + 1).join('/')}`; + }); +} diff --git a/src/types/api.d.ts b/src/types/api.d.ts new file mode 100644 index 0000000..6acebbc --- /dev/null +++ b/src/types/api.d.ts @@ -0,0 +1,6 @@ +declare namespace API { + type Task = { + id?: number; + name?: string; + }; +} diff --git a/src/validate/index.js b/src/validate/index.js new file mode 100644 index 0000000..864796e --- /dev/null +++ b/src/validate/index.js @@ -0,0 +1,368 @@ +/** + * Created by Zhang Haijun on 2018/1/25. + */ +const trigger = null +export default { + required: { required: true, message: '请输入内容', trigger: trigger }, + number: { type: 'number', trigger: trigger, message: '请输入数字' }, + email: { type: 'email', trigger: trigger, message: '请输入正确的邮箱' }, + code: { pattern: /^[a-zA-Z0-9]*$/, message: '仅支持数字、字母', trigger: trigger }, + name: { pattern: /^[a-zA-Z0-9-_.]*$/, message: '仅支持数字、字母、下划线、中划线、点', trigger: trigger }, + blankName: { pattern: /^[a-zA-Z 0-9-_.]+$/, message: '不可输入中文', trigger: trigger }, + spec: { pattern: /^[0-9]+\/[0-9]+\/[0-9]+$/, message: '请输入长/宽/高,中间以斜杠隔开', trigger: trigger }, + vcName: { pattern: /^[a-zA-Z0-9]{5,22}$/, message: '请按提示输入正确格式' }, + awsName: { + validator: (rule, value, callback) => { + const reg = /^[a-zA-Z0-9-]*$/ + if (reg.test(value)) { + callback() + } else { + callback(new Error('仅支持数字、大小写字母、中划线')) + } + }, + trigger: trigger + }, + // ip地址 + ip: { + validator: (rule, value, callback) => { + const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ + if (reg.test(value) || !value) { + callback() + } else { + callback(new Error('请输入正确的IP地址')) + } + }, + trigger: trigger + }, + // 端口号 + port: { + validator: (rule, value, callback) => { + const reg = /^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/ + if (reg.test(value) || !value) { + callback() + } else { + callback(new Error('请输入正确的端口号')) + } + }, + trigger: trigger + }, + // 英文 + english: { + validator: (rule, value, callback) => { + const reg = /^[a-zA-Z]+$/ + if (reg.test(value) || !value) { + callback() + } else { + callback(new Error('请输入英文')) + } + }, + trigger: trigger + }, + noChinese: { + validator: (rule, value, callback) => { + const reg = /^[a-zA-Z0-9-_.]*$/ + if (reg.test(value)) { + callback() + } else { + callback(new Error('仅支持数字、字母、下划线、中划线、点')) + } + }, + trigger: trigger + }, + aliName: { + validator: (rule, value, callback) => { + const reg = /^[a-zA-Z][a-zA-Z0-9_-]*$/ + if (reg.test(value) && !value.startsWith('http://') && !value.startsWith('https://')) { + callback() + } else { + callback(new Error('不能以特殊字符、数字、http:://、https://开头')) + } + }, + trigger: trigger + }, + muchDns: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i = '' + let result = '' + let c = '' + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '/' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('/') + const reg = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]))?$/ + result.forEach(function(item) { + if (!reg.test(item)) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + v6MuchDns: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i = '' + let result = '' + let c = '' + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '/' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('/') + const reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ + result.forEach(function(item) { + if (!reg.test(item)) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + routerFilter: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i = '' + let result = '' + let c = '' + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '|' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('|') + const reg = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]))$/ + result.forEach(function(item) { + const list = item.split(',') + const listOne = list[0].split('/') + if (!reg.test(listOne[0])) { + callback(new Error('请按照提示输入')) + } + if (parseInt(listOne[1]) < 0 || parseInt(listOne[1]) >= 32) { + callback(new Error('请按照提示输入')) + } + if (!reg.test(list[1])) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + ipPool: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i, + result = '', + c + const testList = [] + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '/' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('/') + result.forEach(function(item) { + item.split('-').forEach(function(t) { + testList.push(t) + }) + }) + if (testList.length % 2 != 0) { + callback(new Error('请按照提示输入')) + } + const reg = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]))?$/ + testList.forEach(function(item) { + const tet = reg.test(item) + if (!tet) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + v6RouterFilter: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i = '' + let result = '' + let c = '' + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '|' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('|') + const reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ + result.forEach(function(item) { + const list = item.split(',') + const listOne = list[0].split('/') + if (!reg.test(listOne[0])) { + callback(new Error('请按照提示输入')) + } + if (parseInt(listOne[1]) < 0 || parseInt(listOne[1]) >= 128) { + callback(new Error('请按照提示输入')) + } + if (!reg.test(list[1])) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + v6IpPool: { + validator: (rule, value, callback) => { + if (!value) { + callback() + } else { + let i, + result = '', + c + const testList = [] + for (i = 0; i < value.length; i++) { + c = value.substr(i, 1) + if (c == '\n') { + result = result + '/' + } else if (c != '\r') { + result = result + c + } + } + result = result.split('/') + result.forEach(function(item) { + item.split('-').forEach(function(t) { + testList.push(t) + }) + }) + if (testList.length % 2 != 0) { + callback(new Error('请按照提示输入')) + } + const reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ + testList.forEach(function(item) { + const tet = reg.test(item) + if (!tet) { + callback(new Error('请按照提示输入')) + } + }) + callback() + } + }, + trigger: trigger + }, + // ipV6校验 + ipV6: { + validator: (rule, value, callback) => { + const reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ + // 另外一种 + // ([a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){0,7}::[a-f0-9]{0,4}(:[a-f0-9]{1,4}){0,7}) + if (reg.test(value) || !value) { + callback() + } else { + callback(new Error('请输入正确的IP地址')) + } + }, + trigger: trigger + }, + ipV6Cidr: { + validator: (rule, value, callback) => { + const reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ + // 另外一种 + // ([a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){0,7}::[a-f0-9]{0,4}(:[a-f0-9]{1,4}){0,7}) + if (value.split('/')) { + const result = value.split('/') + const ret1 = reg.test(result[0]) + if (ret1 && result[1] && Number(result[1]) >= 1 && Number(result[1]) <= 128) return callback() + else return callback(new Error('请输入2222::/24类型格式')) + } else { + callback(new Error('请输入2222::/24类型格式')) + } + }, + trigger: trigger + }, + cidr: { + pattern: /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/(\d{3}\d{2}|\d{1,2}\d|\d))?$/, + message: '请输入10.12.2.1/24类型格式', + trigger: trigger + }, + ipORcidr: { + validator: (rule, value, callback) => { + const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ + const reg1 = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\/(\d{3}\d{2}|\d{1,2}\d|\d))?$/ + if (reg.test(value) || reg1.test(value) || !value) { + callback() + } else { + callback(new Error('请输入正确的地址')) + } + }, + trigger: trigger + }, + datebasePassword: { + validator: (rule, value, callback) => { + const reg = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*()+_-]).{8,32}/ + if (!value || reg.test(value)) { + callback() + } else { + callback(new Error('请输入8-32位,必须同时包含大小写字母、数字、特殊字符[!@#$%^&*()+_-]')) + } + }, + trigger: trigger + }, + noOnlyNum: { + validator: (rule, value, callback) => { + const pattern = /^\d+$/g + if (value.match(pattern)) { + callback(new Error('内容不能为纯数字')) + } else { + callback() + } + }, + trigger: trigger + }, + // 非中文 + notChinese: { + validator: (rule, value, callback) => { + const reg = /^[\u4e00-\u9fa5]*$/ + if (value && reg.test(value)) { + callback(new Error('不支持中文字符')) + } else { + callback() + } + }, + trigger: trigger + } +} diff --git a/src/views/bsm-cache/agentServer/index.vue b/src/views/bsm-cache/agentServer/index.vue new file mode 100644 index 0000000..d955fdd --- /dev/null +++ b/src/views/bsm-cache/agentServer/index.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/views/bsm-cache/agentServer/selectAgent.vue b/src/views/bsm-cache/agentServer/selectAgent.vue new file mode 100644 index 0000000..596ccf7 --- /dev/null +++ b/src/views/bsm-cache/agentServer/selectAgent.vue @@ -0,0 +1,210 @@ + + + + diff --git a/src/views/bsm-cache/agentServer/selectHost.vue b/src/views/bsm-cache/agentServer/selectHost.vue new file mode 100644 index 0000000..8a23cab --- /dev/null +++ b/src/views/bsm-cache/agentServer/selectHost.vue @@ -0,0 +1,257 @@ + + + diff --git a/src/views/bsm-cache/cmdbServer/agentServer.vue b/src/views/bsm-cache/cmdbServer/agentServer.vue new file mode 100644 index 0000000..c61a1a9 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/agentServer.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/views/bsm-cache/cmdbServer/middleNetwork.vue b/src/views/bsm-cache/cmdbServer/middleNetwork.vue new file mode 100644 index 0000000..92acc74 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/middleNetwork.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/views/bsm-cache/cmdbServer/middleSafety.vue b/src/views/bsm-cache/cmdbServer/middleSafety.vue new file mode 100644 index 0000000..c292bf3 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/middleSafety.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/bsm-cache/cmdbServer/middleServer.vue b/src/views/bsm-cache/cmdbServer/middleServer.vue new file mode 100644 index 0000000..35c6d2d --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/middleServer.vue @@ -0,0 +1,181 @@ + + + + diff --git a/src/views/bsm-cache/cmdbServer/middleServer2.vue b/src/views/bsm-cache/cmdbServer/middleServer2.vue new file mode 100644 index 0000000..0dc7379 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/middleServer2.vue @@ -0,0 +1,355 @@ + + + + diff --git a/src/views/bsm-cache/cmdbServer/selectAgent.vue b/src/views/bsm-cache/cmdbServer/selectAgent.vue new file mode 100644 index 0000000..d474250 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/selectAgent.vue @@ -0,0 +1,201 @@ + + + + diff --git a/src/views/bsm-cache/cmdbServer/selectHost.vue b/src/views/bsm-cache/cmdbServer/selectHost.vue new file mode 100644 index 0000000..2c82ace --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/selectHost.vue @@ -0,0 +1,491 @@ + + + diff --git a/src/views/bsm-cache/cmdbServer/selectNetwork.vue b/src/views/bsm-cache/cmdbServer/selectNetwork.vue new file mode 100644 index 0000000..4b938b8 --- /dev/null +++ b/src/views/bsm-cache/cmdbServer/selectNetwork.vue @@ -0,0 +1,387 @@ + + + diff --git a/src/views/bsm-cache/treeTable/eval.js b/src/views/bsm-cache/treeTable/eval.js new file mode 100644 index 0000000..30db777 --- /dev/null +++ b/src/views/bsm-cache/treeTable/eval.js @@ -0,0 +1,44 @@ +'use strict' +import Vue from 'vue' +export default function treeToArray (data, expandAll, parent, level, item) { + const marLTemp = [] + let tmp = [] + Array.from(data).forEach(function (record) { + if (!record._expanded) { + Vue.set(record, '_expanded', expandAll) + } + let _level = 1 + if (level && level !== null) { + _level = level + 1 + } + Vue.set(record, '_level', _level) + // 如果有父元素 + if (parent) { + Vue.set(record, 'parent', parent) + // 如果父元素有偏移量,需要计算在this的偏移量中 + // 偏移量还与前面同级元素有关,需要加上前面所有元素的长度和 + if (!marLTemp[_level]) { + marLTemp[_level] = 0 + } + Vue.set(record, '_marginLeft', marLTemp[_level] + parent._marginLeft) + Vue.set(record, '_width', record[item] / parent[item] * parent._width) + // 在本次计算过偏移量后加上自己长度,以供下一个元素使用 + marLTemp[_level] += record._width + } else { + // 如果为根 + // 初始化偏移量存储map + marLTemp[record.id] = [] + // map中是一个数组,存储的是每级的长度和 + // 初始情况下为0 + marLTemp[record.id][_level] = 0 + Vue.set(record, '_marginLeft', 0) + Vue.set(record, '_width', 1) + } + tmp.push(record) + if (record.children && record.children.length > 0) { + const children = treeToArray(record.children, expandAll, record, _level, item) + tmp = tmp.concat(children) + } + }) + return tmp +} diff --git a/src/views/bsm-cache/treeTable/index.vue b/src/views/bsm-cache/treeTable/index.vue new file mode 100644 index 0000000..6f7b7c0 --- /dev/null +++ b/src/views/bsm-cache/treeTable/index.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/views/compare/acrossCompare.vue b/src/views/compare/acrossCompare.vue new file mode 100644 index 0000000..4281a60 --- /dev/null +++ b/src/views/compare/acrossCompare.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/views/compare/buildCompare.vue b/src/views/compare/buildCompare.vue new file mode 100644 index 0000000..6599071 --- /dev/null +++ b/src/views/compare/buildCompare.vue @@ -0,0 +1,507 @@ + + + + + diff --git a/src/views/compare/config.js b/src/views/compare/config.js new file mode 100644 index 0000000..4ff8844 --- /dev/null +++ b/src/views/compare/config.js @@ -0,0 +1,106 @@ +export const standardColumns = [ + { label: '任务编号', prop: 'taskName', scopedSlots: { customRender: 'taskName' } }, + { label: '任务名称', prop: 'remark' }, + { label: '主机', prop: 'agentIP1', scopedSlots: { customRender: 'agentIP1' } }, + { label: '对比文件目录', prop: 'filePath1' }, + { label: '本地标准文件', prop: 'standardFileName' }, + { label: '创建人', prop: 'createUser' }, + { label: '对比周期', prop: 'startTime', scopedSlots: { customRender: 'startTime' } }, + { label: '状态', prop: 'runstatus', scopedSlots: { customRender: 'runstatus' } }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } } +] + +export const historyColumns = [ + { label: '任务编号', prop: 'taskName', scopedSlots: { customRender: 'taskName' } }, + { label: '任务名称', prop: 'remark' }, + { label: '主机', prop: 'agentIP1', scopedSlots: { customRender: 'agentIP1' } }, + { label: '对比文件目录', prop: 'filePath1' }, + { label: '创建人', prop: 'createUser' }, + { label: '对比周期', prop: 'startTime', scopedSlots: { customRender: 'startTime' } }, + { label: '状态', prop: 'runstatus', scopedSlots: { customRender: 'runstatus' } }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } } +] + +export const acrossColumns = [ + { label: '任务编号', prop: 'taskName', scopedSlots: { customRender: 'taskName' } }, + { label: '任务名称', prop: 'remark' }, + { label: '对比文件目录', prop: 'filePath1' }, + { label: '创建人', prop: 'createUser' }, + { label: '对比周期', prop: 'startTime', scopedSlots: { customRender: 'startTime' } }, + { label: '状态', prop: 'runstatus', scopedSlots: { customRender: 'runstatus' } }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } } +] + +export const viewColumns = [ + { label: '任务编号', prop: 'taskName' }, + { label: '任务名称', prop: 'remark' }, + { label: '任务类型', prop: 'taskType', scopedSlots: { customRender: 'taskName' } }, + { label: '对比文件1', prop: 'filePath1' }, + { label: '对比文件2', prop: 'filePath2' }, + { label: '创建人', prop: 'createUser' }, + { label: 'MD5', prop: 'mD5', scopedSlots: { customRender: 'mD5' } } +] + +export const whiteListColumns = [ + { label: '内容', prop: 'wList' }, + { label: '创建时间', prop: 'createTime' }, + { label: '创建人', prop: 'createrName' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] + +export const standardFileColumns = [ + { label: '文件名称', prop: 'fileName' }, + { label: '文件路径', prop: 'filePath' }, + { label: '创建时间', prop: 'createTime' }, + { label: '创建人', prop: 'createrName' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] + +export const searchConfigs = [ + { + label: '任务编号', + value: 'taskName', + type: 'Input' + } +] + +export const whiteListConfigs = [ + { + label: '内容', + value: 'wList', + type: 'Input' + } +] + +export const viewSearchConfigs = [ + { + label: '任务编号', + value: 'taskName', + type: 'Input' + }, + { + label: '任务类型', + value: 'taskType', + type: 'Select', + sign: 'LK', + data: [ + { id: 8, name: '标准对比' }, + { id: 11, name: '历史对比' }, + { id: 9, name: '跨机对比' } + ] + } +] + +export const standardFileSearchConfigs = [ + { + label: '文件名称', + value: 'fileName', + type: 'Input' + }, + { + label: '创建人', + value: 'creator', + type: 'Input' + }, + { label: '', value: 'startDate', type: 'DateRange' } +] diff --git a/src/views/compare/historyCompare.vue b/src/views/compare/historyCompare.vue new file mode 100644 index 0000000..4246627 --- /dev/null +++ b/src/views/compare/historyCompare.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/views/compare/server/targetServer.vue b/src/views/compare/server/targetServer.vue new file mode 100644 index 0000000..a2b557e --- /dev/null +++ b/src/views/compare/server/targetServer.vue @@ -0,0 +1,134 @@ + + diff --git a/src/views/compare/standardCompare.vue b/src/views/compare/standardCompare.vue new file mode 100644 index 0000000..274ff2b --- /dev/null +++ b/src/views/compare/standardCompare.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/views/compare/standardFile.vue b/src/views/compare/standardFile.vue new file mode 100644 index 0000000..3c766e2 --- /dev/null +++ b/src/views/compare/standardFile.vue @@ -0,0 +1,142 @@ + + + diff --git a/src/views/compare/viewCompare.vue b/src/views/compare/viewCompare.vue new file mode 100644 index 0000000..0a72f2a --- /dev/null +++ b/src/views/compare/viewCompare.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/views/compare/whiteList.vue b/src/views/compare/whiteList.vue new file mode 100644 index 0000000..d778f81 --- /dev/null +++ b/src/views/compare/whiteList.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/views/compliance/baseline.vue b/src/views/compliance/baseline.vue new file mode 100644 index 0000000..5d220e2 --- /dev/null +++ b/src/views/compliance/baseline.vue @@ -0,0 +1,115 @@ + + + diff --git a/src/views/compliance/compliance.vue b/src/views/compliance/compliance.vue new file mode 100644 index 0000000..6937487 --- /dev/null +++ b/src/views/compliance/compliance.vue @@ -0,0 +1,662 @@ + + + + + diff --git a/src/views/compliance/components/addBaseline.vue b/src/views/compliance/components/addBaseline.vue new file mode 100644 index 0000000..83bce0e --- /dev/null +++ b/src/views/compliance/components/addBaseline.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/src/views/compliance/components/addTemplate.vue b/src/views/compliance/components/addTemplate.vue new file mode 100644 index 0000000..fee930a --- /dev/null +++ b/src/views/compliance/components/addTemplate.vue @@ -0,0 +1,143 @@ + + + diff --git a/src/views/compliance/components/historyBottomTable.vue b/src/views/compliance/components/historyBottomTable.vue new file mode 100644 index 0000000..2982ae2 --- /dev/null +++ b/src/views/compliance/components/historyBottomTable.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/src/views/compliance/components/historyDetail.vue b/src/views/compliance/components/historyDetail.vue new file mode 100644 index 0000000..c192e83 --- /dev/null +++ b/src/views/compliance/components/historyDetail.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/views/compliance/components/inputParam.vue b/src/views/compliance/components/inputParam.vue new file mode 100644 index 0000000..1e7424c --- /dev/null +++ b/src/views/compliance/components/inputParam.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/views/compliance/components/lineParam.vue b/src/views/compliance/components/lineParam.vue new file mode 100644 index 0000000..084e99b --- /dev/null +++ b/src/views/compliance/components/lineParam.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/views/compliance/components/paramSet.vue b/src/views/compliance/components/paramSet.vue new file mode 100644 index 0000000..a9ff548 --- /dev/null +++ b/src/views/compliance/components/paramSet.vue @@ -0,0 +1,203 @@ + + diff --git a/src/views/compliance/components/scriptExplain.vue b/src/views/compliance/components/scriptExplain.vue new file mode 100644 index 0000000..efe1f90 --- /dev/null +++ b/src/views/compliance/components/scriptExplain.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/views/compliance/config.js b/src/views/compliance/config.js new file mode 100644 index 0000000..791739f --- /dev/null +++ b/src/views/compliance/config.js @@ -0,0 +1,356 @@ +import { getUserList } from './utils/index' +// 常规检查列表 +export const normalColumns = [ + { label: '合规名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '合规分类', prop: 'category' }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '200px', scopedSlots: { customRender: 'operate' } } +] +// 定时检查列表 +export const timeColumns = [ + // { + // type: 'selection', + // disabled: true + // }, + { label: '合规名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '状态', prop: 'running', scopedSlots: { customRender: 'running' } }, + { label: '执行计划', prop: 'cron' }, + { label: '合规分类', prop: 'category' }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '200px', scopedSlots: { customRender: 'operate' } } +] + +// 历史记录列表 +export const historyColumns = [ + { label: '合规名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '合规分类', prop: 'category' }, + { label: '任务类别', prop: 'type', scopedSlots: { customRender: 'type' } }, + { label: '执行人', prop: 'userName' }, + { label: '执行状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '基线检查项', prop: 'itemNum' }, + { label: '检查服务器数量', prop: 'hostNum' }, + { label: '不合规基线项数', prop: 'noPassItemNum' }, + { label: '不合规服务器数', prop: 'noPassHostNum' }, + { label: '合规通过率', prop: 'passRates', scopedSlots: { customRender: 'passRates' } }, + { label: '检查时间', prop: 'gmtCreate' } +] + +// 合规基线列表 +export const baselineColumns = [ + { label: '基线名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '基线分类', prop: 'itemType', scopedSlots: { customRender: 'itemType' } }, + { label: '脚本名称', prop: 'scriptName' }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] + +// 合规模板列表 +export const templateColumns = [ + { label: '模板名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] + +const inspectTypeList = [ + { + id: 'HOST', + name: '主机合规' + }, + { + id: 'DB', + name: '数据库合规' + }, + { + id: 'MIDDLEWARE', + name: '中间件合规' + }, + { + id: 'NETWORK', + name: '网络合规' + }, + { + id: 'OTHERS', + name: '其他合规' + } +] + +// 任务类别 +const taskType = [ + { + id: 0, + name: '常规任务' + }, + { + id: 1, + name: '定时任务' + } +] + +const statusList = [ + { + id: 'STARTING', + name: '启动中' + }, + { + id: 'RUNNING', + name: '执行中' + }, + { + id: 'SUCCESS', + name: '成功' + }, + { + id: 'ERROR', + name: '错误' + } +] + +const normList = [ + { + id: 'host', + name: '主机' + }, + { + id: 'db', + name: '数据库' + }, + { + id: 'middle', + name: '中间件' + }, + { + id: 'net', + name: '网络' + }, + { + id: 'other', + name: '其他' + } +] + +// 常规检查查询 +export const normalSearchConfigs = [ + { + label: '合规分类', + value: 'category', + type: 'Select', + sign: 'EQ', + data: inspectTypeList + }, + { + label: '合规名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] + +// 定时检查查询 +export const timeSearchConfigs = [ + ...normalSearchConfigs, + { + label: '状态', + value: 'running', + type: 'Select', + sign: 'EQ', + data: [ + { id: '0', name: '停止' }, + { id: '1', name: '执行中' } + ] + } +] +// 历史记录查询 +export const historySearchConfigs = [ + { + label: '合规名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '合规分类', + value: 'category', + type: 'Select', + sign: 'EQ', + data: inspectTypeList + }, + { + label: '执行人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '执行状态', + value: 'status', + type: 'Select', + sign: 'EQ', + data: statusList + }, + { + label: '检查', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '任务类别', + value: 'type', + type: 'Select', + sign: 'EQ', + data: taskType + } +] +// 合规基线查询 +export const baselineSearchConfigs = [ + { + label: '基线名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '基线分类', + value: 'itemType', + type: 'Select', + sign: 'EQ', + data: normList + }, + { + label: '脚本名称', + value: 'scriptName', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] + +// 合规模板查询 +// 合规基线查询 +export const templateSearchConfigs = [ + { + label: '模板名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] diff --git a/src/views/compliance/history.vue b/src/views/compliance/history.vue new file mode 100644 index 0000000..18529cf --- /dev/null +++ b/src/views/compliance/history.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/views/compliance/normal.vue b/src/views/compliance/normal.vue new file mode 100644 index 0000000..2901116 --- /dev/null +++ b/src/views/compliance/normal.vue @@ -0,0 +1,208 @@ + + + diff --git a/src/views/compliance/template.vue b/src/views/compliance/template.vue new file mode 100644 index 0000000..809ae94 --- /dev/null +++ b/src/views/compliance/template.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/views/compliance/time.vue b/src/views/compliance/time.vue new file mode 100644 index 0000000..045b652 --- /dev/null +++ b/src/views/compliance/time.vue @@ -0,0 +1,309 @@ + + + diff --git a/src/views/compliance/utils/index.js b/src/views/compliance/utils/index.js new file mode 100644 index 0000000..6485c28 --- /dev/null +++ b/src/views/compliance/utils/index.js @@ -0,0 +1,255 @@ +import { getTemplateDetail } from 'services/task/compliance' +import { getUser } from 'services/system/user' +// 获取用户列表 +export function getUserList(self) { + const _data = { + page: 1, + rows: 9999 + } + _data.params = JSON.stringify([ + { + param: { + tenantId: 0 + }, + sign: 'EQ' + } + ]) + return getUser(_data) +} + +// 获取合规分类 +export const complianceTypeList = [ + { + code: 'HOST', + name: '主机合规' + }, + { + code: 'DB', + name: '数据库合规' + }, + { + code: 'MIDDLEWARE', + name: '中间件合规' + }, + { + code: 'NETWORK', + name: '网络合规' + }, + { + code: 'OTHERS', + name: '其他合规' + } +] + +// 任务类别 +export const taskType = [ + { + code: 0, + name: '常规任务' + }, + { + code: 1, + name: '定时任务' + } +] + +// 通过code匹配name +export function getInspectTypeName(code) { + for (const item of complianceTypeList) { + if (item.code === code) { + return item.name + } + } +} +export const normListAll = [ + { + id: 0, + code: 'all', + name: '全部分类' + }, + { + id: 1, + code: 'host', + name: '主机' + }, + { + id: 2, + code: 'db', + name: '数据库' + }, + { + id: 3, + code: 'middle', + name: '中间件' + }, + { + id: 4, + code: 'net', + name: '网络' + }, + { + id: 5, + code: 'other', + name: '其他' + } +] + +// 基线分类 +export const normList = [ + { + id: 1, + code: 'host', + name: '主机' + }, + { + id: 2, + code: 'db', + name: '数据库' + }, + { + id: 3, + code: 'middle', + name: '中间件' + }, + { + id: 4, + code: 'net', + name: '网络' + }, + { + id: 5, + code: 'other', + name: '其他' + } +] + +// 告警规则 +export const ruleList = [ + { + id: 0, + name: '>', + code: 'GT' + }, + { + id: 1, + name: '=', + code: 'EQ' + }, + { + id: 2, + name: '<', + code: 'LT' + }, + { + id: 3, + name: '>=', + code: 'GE' + }, + { + id: 4, + name: '<=', + code: 'LE' + }, + { + id: 5, + name: '不等于', + code: 'NEQ' + }, + { + id: 6, + name: '包含', + code: 'IN' + }, + { + id: 7, + name: '不包含', + code: 'NIN' + } +] + +// 告警级别 +export const levelList = [ + { + id: 1, + code: 'danger', + name: '严重' + }, + { + id: 2, + code: 'warning', + name: '警告' + }, + { + id: 3, + code: 'light', + name: '轻微' + } +] + +export function getComplianceTempDetail(self, id) { + return new Promise((resolve, reject) => { + getTemplateDetail(id) + .then((data) => { + if (data.success) { + resolve(data.data) + } + }) + .catch((error) => { + reject(error) + }) + }) +} + +// 合规状态 +export const passList = [ + { + id: 1, + code: true, + name: '合规' + }, + { + id: 2, + code: false, + name: '不合规' + } +] + +// 历史记录头部展示字段 +export const headerList = [ + { + code: 'name', + name: '合规名称' + }, + { + code: 'category', + name: '合规分类' + }, + { + code: 'userName', + name: '执行人员' + }, + { + code: 'gmtCreate', + name: '检查时间' + } +] + +// 状态列表 +export const statusList = [ + { + code: 'STARTING', + name: '启动中' + }, + { + code: 'RUNNING', + name: '执行中' + }, + { + code: 'SUCCESS', + name: '成功' + }, + { + code: 'ERROR', + name: '错误' + } +] diff --git a/src/views/configCenter/resource/mulu/components/superSearch.vue b/src/views/configCenter/resource/mulu/components/superSearch.vue new file mode 100644 index 0000000..ada1239 --- /dev/null +++ b/src/views/configCenter/resource/mulu/components/superSearch.vue @@ -0,0 +1,197 @@ + + + diff --git a/src/views/configCenter/resource/mulu/utils/property.js b/src/views/configCenter/resource/mulu/utils/property.js new file mode 100644 index 0000000..6ed99cf --- /dev/null +++ b/src/views/configCenter/resource/mulu/utils/property.js @@ -0,0 +1,36 @@ +export function handleDataAddAttr (data, attrList) { + const handleList = ['SELECT', 'RADIO', 'CHECKBOX'] + data && data.forEach(dataItem => { + Object.keys(dataItem).forEach(key => { + let checkItem = '' + for (const attr of attrList) { + if (key === attr.code && handleList.includes(attr.type)) { + if (attr.type === 'CHECKBOX') { + if (dataItem[key] && !dataItem[key].includes(',')) { + attr.item && attr.item.forEach(item => { + if (item.value === dataItem[key]) { + dataItem[key] = item.name + } + }) + } else if (dataItem[key] && dataItem[key].includes(',')) { + const valList = dataItem[key].split(',') + attr.item && attr.item.forEach(item => { + if (valList.includes(item.value)) { + checkItem += ` ${item.name}` + dataItem[key] = checkItem + } + }) + } + } else { + attr.item && attr.item.forEach(item => { + if (item.value === dataItem[key]) { + dataItem[key] = item.name + } + }) + } + } + } + }) + }) + return data +} diff --git a/src/views/configCenter/utils/attrChange.js b/src/views/configCenter/utils/attrChange.js new file mode 100644 index 0000000..2f8a376 --- /dev/null +++ b/src/views/configCenter/utils/attrChange.js @@ -0,0 +1,215 @@ +export function translateAttr (data, localData, serverData) { + data.forEach(item => { + localData[item.local] = serverData[item.server] + }) + return localData +} + +export function propertyAddName (data, propertyList) { + const _propertyList = JSON.parse(JSON.stringify(propertyList)) + const result = [], _data = data || [] + for (const key of Object.keys(_data)) { + for (const property of _propertyList) { + if (key === property.code) { + const _item = property + if (_item.type === 'RADIO' || _item.type === 'SELECT') { + // 单选处理 + property.item.forEach(k => { + if (_data[key] === k.value) { + _item.detailValue = k.name + _item.propertyValue = k.value + } + }) + result.push(_item) + } else if (_item.type === 'CHECKBOX') { + // 多选处理 + _item.detailValue = '' + _item.propertyValue = _data[key] + const _dataArr = _data[key] && _data[key].split(',') + if (_dataArr) { + property.item.forEach(k => { + if (_dataArr.includes(k.value)) { + _item.detailValue += k.name + ' ' + } + }) + } + result.push(_item) + } else if (_item.type === 'TABLE') { + _item.propertyValue = _data[key] + _item.grid = JSON.parse(property.propertyValue) + result.push(_item) + } else { + _item.propertyValue = _data[key] + result.push(_item) + } + } + } + } + result.sort((a, b) => { + return a.orderNum - b.orderNum + }); + + return result +} + +/** + * 比较数据 + * @param {*} bf 变更前 + * @param {*} af 变更后 + */ +const checkRowData = (befD, aftD) => { + const keys = Object.keys(aftD) + keys.forEach(key => { + befD[key] = { + className: 'defaultColor', + value: befD[key] || '' + } + if (befD[key].value === aftD[key]) { + aftD[key] = { + className: 'defaultColor', + value: aftD[key] || '' + } + } else { + aftD[key] = { + className: 'hightColor', + value: aftD[key] || '' + } + } + }) +} + +const handleRow_a = (row) => { + const keys = Object.keys(row) + keys.forEach(key => { + row[key] = { + className: 'hightColor', + value: row[key] || '' + } + }) +} +const handleRow_b = (row) => { + const keys = Object.keys(row) + keys.forEach(key => { + row[key] = { + className: 'defaultColor', + value: row[key] || '' + } + }) +} + +export function addChangeFlag (beforeData, afterData) { + let hasTable = false + const tableData = {} + const tablePropList = {} + const tableName = {} + afterData.forEach((afItem, index) => { + let isHas = false + let afR = [] + if (afItem.type === 'TABLE') { + if (!hasTable) { + hasTable = true + } + tableName[afItem.code] = afItem.name + tablePropList[afItem.code] = afItem.item + afR = JSON.parse(afItem.propertyValue) + } + for (const beItem of beforeData) { + if (afItem?.code === beItem?.code) { + isHas = true + if (afItem?.propertyValue !== beItem?.propertyValue) { + afItem.isHight = true + } + if (beItem.type === 'TABLE') { + const bfR = JSON.parse(beItem.propertyValue) || [] + tableData[afItem.code] = {} + tableData[afItem.code].beforeData = bfR + tableData[afItem.code].afterData = afR + } + } + } + if (!isHas) { + afItem.isHight = true + } + }) + Object.keys(tableData).forEach(key => { + // 遍历表格 + const tabD = tableData[key] + const len = tabD.afterData.length > tabD.beforeData.length ? tabD.afterData.length : tabD.beforeData.length + for (let i = 0; i < len; i++) { + if (tabD.beforeData[i] && tabD.afterData[i]) { + checkRowData(tabD.beforeData[i], tabD.afterData[i]) + } else if (!tabD.beforeData[i] && tabD.afterData[i]) { + handleRow_a(tabD.afterData[i]) + } else if (tabD.beforeData[i] && !tabD.afterData[i]) { + handleRow_b(tabD.beforeData[i]) + } + } + }) + return { + result: afterData, + tableData, + tableName, + tablePropList, + hasTable + } +} + +export function syntaxHighlight (json) { + if (typeof json != 'string') { + json = JSON.stringify(json, undefined, 2); + } + json = json.replace(/&/g, '&').replace(//g, '>'); + return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\\-]?\d+)?)/g, function (match) { + var cls = 'number'; + if (/^"/.test(match)) { + if (/:$/.test(match)) { + cls = 'key'; + } else { + cls = 'string'; + } + } else if (/true|false/.test(match)) { + cls = 'boolean'; + } else if (/null/.test(match)) { + cls = 'null'; + } + return '' + match + ''; + }); +} + +// 数据添加属性name +export function handleDataAddAttr (data, attrList) { + const handleList = ['SELECT', 'RADIO', 'CHECKBOX'] + data && data.forEach(dataItem => { + Object.keys(dataItem).forEach(key => { + let checkItem = '' + for (const attr of attrList) { + if (key === attr.code && handleList.includes(attr.type)) { + if (attr.type === 'CHECKBOX') { + if (dataItem[key] && !dataItem[key].includes(',')) { + attr.item && attr.item.forEach(item => { + if (item.value === dataItem[key]) { + dataItem[key] = item.name + } + }) + } else if (dataItem[key] && dataItem[key].includes(',')) { + const valList = dataItem[key].split(',') + attr.item && attr.item.forEach(item => { + if (valList.includes(item.value)) { + checkItem += ` ${item.name}` + dataItem[key] = checkItem + } + }) + } + } else { + attr.item && attr.item.forEach(item => { + if (item.value === dataItem[key]) { + dataItem[key] = item.name + } + }) + } + } + } + }) + }) + return data +} diff --git a/src/views/configCenter/utils/request.js b/src/views/configCenter/utils/request.js new file mode 100644 index 0000000..b52a1c9 --- /dev/null +++ b/src/views/configCenter/utils/request.js @@ -0,0 +1,197 @@ +/* eslint-disable prefer-const */ +/** + * 获取属性字段 + * @param {*} self 组件实例this + * @param {number} id 配置项id + * @return 包含所有属性的对象 + */ +import { getModuls } from 'services/task/cmdb' +export function getProperty (self, id) { + // eslint-disable-next-line prefer-const + let params = {}, hostAttrs = {}, hostAttrsList = [], properTyGroups = [], + allProperties = []; + const that = self + params.id = id + + return new Promise((resolve, reject) => { + that.$http({ + method: 'get', + url: '/cmdb/bsm/module/property', + data: params + }).then(data => { + if (data.success) { + properTyGroups = data.data.groups + allProperties = data.data.properties + for (const item of allProperties) { + let { code, name, isRequired, type, isGrid, isUnique } = item + if (code !== 'id') { + hostAttrsList.push({ code, name, isRequired, type, isGrid, isUnique }) + that.checkData && that.$set(that.checkData, code, isGrid) + } + } + resolve({ hostAttrs, hostAttrsList, properTyGroups, allProperties }) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取所有属性字段 + * @param {*} self 穿入组件实例this + * @param { number } id 配置项id + * @return 包含所有属性的对象 + */ +export function getPropertyAll (self, id) { + let params = {}, allProperties = [], that = self + params.id = id + return new Promise((resolve, reject) => { + that.$http({ + method: 'get', + url: '/cmdb/bsm/module/propertyAll', + data: params + }).then(data => { + if (data.success) { + allProperties = data.data.properties + resolve({ allProperties }) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取属性字段 通过code + * @param {string} moduleCode 配置项code + * @return 包含所有属性的对象 + */ +export function getPropertyByCode (Vue, moduleCode) { + let hostAttrs = {}, + properties = [], + hostAttrsList = [], + properTyGroups = [] + + return new Promise((resolve, reject) => { + getModuls({ moduleCode: moduleCode }).then(data => { + if (data.success) { + properTyGroups = data.data.groups + properties = data.data.properties + for (let property of properties) { + let decimalNum = 0 + let { code, name, isRequired, type, isGrid, item, isUnique } = property + if (property.decimalNum) { + decimalNum = property.decimalNum + } + hostAttrs[property.code] = property.defaultValue || '' + if (code !== 'id') { + hostAttrsList.push({ code, name, isRequired, type, isGrid, item, decimalNum, isUnique }) + } + } + resolve({ + hostAttrs, + properties, + hostAttrsList, + properTyGroups + }) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取实例详情 + * @param {string} moduleCode 模型code + * @param {string} instanceId 实例id + */ +export function getInstanceDetail (Vue, moduleCode, instanceId, allProperties) { + let params = { + moduleCode: moduleCode, + id: instanceId + } + return new Promise((resolve, reject) => { + Vue.$http({ + method: 'get', + url: '/cmdb/bsm/resource/detail', + data: { isApp: true, params: JSON.stringify(params) }, + options: { + noParam: true + } + }).then(data => { + if (data.success) { + let _data = data.data, result = [] + for (let key of Object.keys(_data)) { + for (let property of allProperties) { + if (key === property.code) { + let _item = property + _item.propertyValue = _data[key] + result.push(_item) + } + } + } + // 字段位置排序 + result.sort((a, b) => { + return a.orderNum - b.orderNum + }); + resolve(result) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 按时间排序 + * @param {*} data 待处理数据 + */ +export function sortDataByTime (data) { + data && data.sort((s1, s2) => { + return new Date(s2.gmt_create) - new Date(s1.gmt_create) + }) + return data +} + +/** + * 查询时处理查询参数 + * @param { string } searchData 搜索内容 + * @param { string } attrList 字段列表 + * @param { string } sign 搜索类型 LK / EQ + */ +export function searchParam (searchData, attrList, sign) { + let result = [] + for (let item of attrList) { + if (searchData[item] !== null && searchData[item] !== undefined && searchData[item] !== '') { + if (sign === 'GET') { + result.push({ param: { [item]: searchData[item][0] }, sign: sign }) + } else if (sign === 'LET') { + result.push({ param: { [item]: searchData[item][1] }, sign: sign }) + } else { + result.push({ param: { [item]: Array.isArray(searchData[item]) ? parseInt(searchData[item][searchData[item].length - 1]) : searchData[item] }, sign: sign }) + } + } + } + + return result +} + +/** + * 获取配置项 + * @param {*} self + */ +export function getModuleList_byRequest (self) { + return new Promise((resolve) => { + self.$http({ + method: 'post', + url: '/cmdb/bsm/module/listAll' + }).then(res => { + if (res.success) { + self.moduleMap = res.data + resolve(res.data) + } + }) + }) +} diff --git a/src/views/configCenter/utils/validate.js b/src/views/configCenter/utils/validate.js new file mode 100644 index 0000000..66f32ad --- /dev/null +++ b/src/views/configCenter/utils/validate.js @@ -0,0 +1,3 @@ +const rules = { required: true, message: '请输入内容', trigger: ['blur', 'change'] } + +export default rules diff --git a/src/views/cron/index.vue b/src/views/cron/index.vue new file mode 100644 index 0000000..2dffa14 --- /dev/null +++ b/src/views/cron/index.vue @@ -0,0 +1,253 @@ + + + diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue new file mode 100644 index 0000000..b82d82d --- /dev/null +++ b/src/views/dashboard/index.vue @@ -0,0 +1,243 @@ + + + diff --git a/src/views/errorPage/401.vue b/src/views/errorPage/401.vue new file mode 100644 index 0000000..c3b14c7 --- /dev/null +++ b/src/views/errorPage/401.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/errorPage/404.vue b/src/views/errorPage/404.vue new file mode 100644 index 0000000..e65b41f --- /dev/null +++ b/src/views/errorPage/404.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/views/history/config.ts b/src/views/history/config.ts new file mode 100644 index 0000000..0b3fa14 --- /dev/null +++ b/src/views/history/config.ts @@ -0,0 +1,65 @@ +import { taskExeOptions as exeOpt } from '@/common/commonData' +import { getTenant } from 'services/system/tenant' + +const objToArr = (obj: any) => { + const arr = [] + for (const a in obj) { + arr.push({ + id: a, + name: obj[a] + }) + } + return arr +} +export const taskExeOptions = exeOpt; +export const columns = [ + { label: '任务名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '启动人', prop: 'operator' }, + { label: '任务状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '开始时间', prop: 'gmtStart', minWidth: '110px' }, + { label: '结束时间', prop: 'gmtFinish', minWidth: '110px' }, + { label: '启动方式', prop: 'executeMode', scopedSlots: { customRender: 'executeMode' } }, + { label: '总耗时(s)', prop: 'cost' }, + { label: '所属租户', prop: 'tenantName' }, + { label: '操作', disabled: true, width: '255px', scopedSlots: { customRender: 'operate' } } +] +export const executeModeOptions = { + WEB: '页面执行', + API: 'API调用', + CRON: '定时执行' +} +export const searchConfigs = [ + { + label: '任务名称', + value: 'name', + type: 'Input' + }, + { + label: '任务状态', + value: 'status', + type: 'Select', + data: objToArr(taskExeOptions) + }, + { + label: '执行', + value: 'gmtStart', + type: 'DateRange' + }, + { + label: '启动任务', + value: 'executeMode', + type: 'Select', + data: objToArr(executeModeOptions) + }, + { + label: '所属租户', + value: 'tenantId', + type: 'Select', + data: [], + service: { + api: getTenant, + params: { simple: true }, + attr: 'data.rows' + } + } +] diff --git a/src/views/history/index.vue b/src/views/history/index.vue new file mode 100644 index 0000000..0e202b8 --- /dev/null +++ b/src/views/history/index.vue @@ -0,0 +1,180 @@ + + diff --git a/src/views/inspect/alarm.vue b/src/views/inspect/alarm.vue new file mode 100644 index 0000000..7ae893a --- /dev/null +++ b/src/views/inspect/alarm.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/inspect/components/addTemp.vue b/src/views/inspect/components/addTemp.vue new file mode 100644 index 0000000..807616e --- /dev/null +++ b/src/views/inspect/components/addTemp.vue @@ -0,0 +1,143 @@ + + + diff --git a/src/views/inspect/components/inputParam.vue b/src/views/inspect/components/inputParam.vue new file mode 100644 index 0000000..8ab923f --- /dev/null +++ b/src/views/inspect/components/inputParam.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/views/inspect/components/paramSet.vue b/src/views/inspect/components/paramSet.vue new file mode 100644 index 0000000..33826f4 --- /dev/null +++ b/src/views/inspect/components/paramSet.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/inspect/components/ruleParam.vue b/src/views/inspect/components/ruleParam.vue new file mode 100644 index 0000000..cb716a3 --- /dev/null +++ b/src/views/inspect/components/ruleParam.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/inspect/config.js b/src/views/inspect/config.js new file mode 100644 index 0000000..1e62876 --- /dev/null +++ b/src/views/inspect/config.js @@ -0,0 +1,449 @@ +import { getUserList } from './utils/index' +// 常规巡检列表 +export const inspectColumns = [ + // { + // type: 'selection', + // disabled: true + // }, + { label: '巡检名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '巡检分类', prop: 'category' }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } } +] +// 定时巡检列表 +export const timingInspectColumns = [ + // { + // type: 'selection', + // disabled: true + // }, + { label: '巡检名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '状态', prop: 'running', scopedSlots: { customRender: 'running' } }, + { label: '执行计划', prop: 'cron' }, + { label: '巡检分类', prop: 'category' }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } } +] +// 巡检记录列表 +export const historyColumns = [ + + { label: '巡检名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '巡检分类', prop: 'category' }, + { label: '巡检类型', prop: 'type', scopedSlots: { customRender: 'type' } }, + { label: '执行人', prop: 'userName' }, + { label: '执行状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '巡检结果', prop: 'warning', scopedSlots: { customRender: 'warning' } }, + { label: '巡检时间', prop: 'gmtCreate' } +] +// 巡检报表列表 +export const inspectReportColumns = [ + // { + // type: 'selection', + // disabled: true + // }, + { label: '报表名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '巡检分类', prop: 'inspectType', scopedSlots: { customRender: 'inspectType' } }, + { label: '巡检名称', prop: 'inspectName' }, + { label: '报表周期', prop: 'period', scopedSlots: { customRender: 'period' } }, + { label: '报表状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '创建人', prop: 'creator' }, + { label: '最后修改人', prop: 'mender' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '250px', scopedSlots: { customRender: 'operate' } }] +// 告警设置列表 +export const inspectAlarmColumns = [ + { label: '告警级别', prop: 'warnLevel' }, + { label: '告警描述', prop: 'remark' }, + { label: '告警颜色', prop: 'color', scopedSlots: { customRender: 'color' } }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '操作', disabled: true, width: '200px', scopedSlots: { customRender: 'operate' } } +] +// 巡检模板列表 +export const inspectTempColumns = [ + { label: '模板名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] +// 巡检指标列表 +export const inspectNormColumns = [ + { label: '指标名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '指标分类', prop: 'targetType', scopedSlots: { customRender: 'targetType' } }, + { label: '创建人', prop: 'creatorName' }, + { label: '最后修改人', prop: 'modifierName' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '修改时间', prop: 'gmtModify' }, + { label: '操作', disabled: true, width: '150px', scopedSlots: { customRender: 'operate' } } +] + +const inspectTypeList = [ + { + id: 'APPLICATION', + name: '应用巡检' + }, + { + id: 'HOST', + name: '主机巡检' + }, + { + id: 'DB', + name: '数据库巡检' + }, + { + id: 'MIDDLEWARE', + name: '中间件巡检' + }, + { + id: 'NETWORK', + name: '网络巡检' + }, + { + id: 'OTHERS', + name: '其他巡检' + } +] + +const searchConfigs = [ + { + label: '巡检分类', + value: 'category', + type: 'Select', + sign: 'EQ', + data: inspectTypeList + }, + { + label: '巡检名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '巡检', + value: 'gmtCreate', + type: 'DateRange' + } +] +// 常规巡检查询 +export const routineInspectSearchConfigs = [...searchConfigs] +// 定时巡检查询 +export const timingInspectSearchConfigs = [ + ...searchConfigs, + { + label: '状态', + value: 'running', + type: 'Select', + sign: 'EQ', + data: [ + { id: '0', name: '停止' }, + { id: '1', name: '执行中' } + ] + } +] +// 巡检记录查询 +export const historySearchConfigs = [ + { + label: '巡检名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '巡检分类', + value: 'category', + type: 'Select', + sign: 'EQ', + data: inspectTypeList + }, + { + label: '巡检类型', + value: 'type', + type: 'Select', + sign: 'EQ', + data: [ + // 快速 常规巡检 定时巡检 人工录入 + // FAST(0),ROUTINE(1),TIMING(2),MANUAL(3) + { id: '0', name: '快速巡检-脚本' }, + { id: '1', name: '常规巡检' }, + { id: '2', name: '定时巡检' } + /* { id: '3', name: '人工巡检' } */ + ] + }, + { + label: '执行人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '执行状态', + value: 'status', + type: 'Select', + sign: 'EQ', + data: [ + { id: 'STARTING', name: '启动中' }, + { id: 'RUNNING', name: '执行中' }, + { id: 'SUCCESS', name: '成功' }, + { id: 'ERROR', name: '错误' } + ] + }, + { + label: '巡检结果', + value: 'warning', + type: 'Select', + sign: 'EQ', + data: [ + { id: false, code: 'false', name: '正常' }, + { id: true, code: 'true', name: '告警' } + ] + }, + { + label: '巡检时间', + value: 'gmtCreate', + type: 'DateRange' + } +] +// 巡检报表查询 +export const inspectReportSearchConfigs = [ + { + label: '报表名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '巡检分类', + value: 'inspectType', + type: 'Select', + sign: 'EQ', + data: inspectTypeList + }, + { + label: '巡检名称', + value: 'inspectName', + type: 'Input', + sign: 'LK' + }, + { + label: '报表周期', + value: 'period', + type: 'Select', + sign: 'EQ', + data: [ + { + id: 'Day', + name: '日报' + }, + { + id: 'Week', + name: '周报' + }, + { + id: 'Month', + name: '月报' + } + ] + }, + { + label: '报表状态', + value: 'status', + type: 'Select', + sign: 'EQ', + data: [ + { + id: 'Off', + name: '禁用' + }, + { + id: 'On', + name: '启用' + } + ] + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] +// 巡检模板查询 +export const inspectTempSearchConfigs = [ + { + label: '模板名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] +// 巡检指标查询 +export const inspectNormSearchConfigs = [ + { + label: '指标名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '指标分类', + value: 'targetType', + type: 'Select', + sign: 'EQ', + data: [ + { + id: 'host', + name: '主机' + }, + { + id: 'db', + name: '数据库' + }, + { + id: 'middle', + name: '中间件' + }, + { + id: 'net', + name: '网络' + }, + { + id: 'other', + name: '其他' + } + ] + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '最后修改人', + value: 'menderId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '创建', + value: 'gmtCreate', + type: 'DateRange' + }, + { + label: '修改', + value: 'gmtModify', + type: 'DateRange' + } +] diff --git a/src/views/inspect/createHistory.vue b/src/views/inspect/createHistory.vue new file mode 100644 index 0000000..8a2b199 --- /dev/null +++ b/src/views/inspect/createHistory.vue @@ -0,0 +1,178 @@ + + + diff --git a/src/views/inspect/createNorm.vue b/src/views/inspect/createNorm.vue new file mode 100644 index 0000000..2b6e402 --- /dev/null +++ b/src/views/inspect/createNorm.vue @@ -0,0 +1,396 @@ + + + + + diff --git a/src/views/inspect/fastInspect.vue b/src/views/inspect/fastInspect.vue new file mode 100644 index 0000000..70ded8e --- /dev/null +++ b/src/views/inspect/fastInspect.vue @@ -0,0 +1,653 @@ + + + + + diff --git a/src/views/inspect/history.vue b/src/views/inspect/history.vue new file mode 100644 index 0000000..a5ca216 --- /dev/null +++ b/src/views/inspect/history.vue @@ -0,0 +1,534 @@ + + + diff --git a/src/views/inspect/jumpServer/agentServerJump.vue b/src/views/inspect/jumpServer/agentServerJump.vue new file mode 100644 index 0000000..7b17656 --- /dev/null +++ b/src/views/inspect/jumpServer/agentServerJump.vue @@ -0,0 +1,52 @@ + + + diff --git a/src/views/inspect/jumpServer/selectAgent.vue b/src/views/inspect/jumpServer/selectAgent.vue new file mode 100644 index 0000000..3084deb --- /dev/null +++ b/src/views/inspect/jumpServer/selectAgent.vue @@ -0,0 +1,346 @@ + + + + diff --git a/src/views/inspect/jumpServer/selectServer.vue b/src/views/inspect/jumpServer/selectServer.vue new file mode 100644 index 0000000..63b112b --- /dev/null +++ b/src/views/inspect/jumpServer/selectServer.vue @@ -0,0 +1,163 @@ + + + + diff --git a/src/views/inspect/jumpServer/targetServerJump.vue b/src/views/inspect/jumpServer/targetServerJump.vue new file mode 100644 index 0000000..b280a5f --- /dev/null +++ b/src/views/inspect/jumpServer/targetServerJump.vue @@ -0,0 +1,115 @@ + + diff --git a/src/views/inspect/normInspect.vue b/src/views/inspect/normInspect.vue new file mode 100644 index 0000000..d696c6e --- /dev/null +++ b/src/views/inspect/normInspect.vue @@ -0,0 +1,110 @@ + + + diff --git a/src/views/inspect/overview.vue b/src/views/inspect/overview.vue new file mode 100644 index 0000000..a1cae14 --- /dev/null +++ b/src/views/inspect/overview.vue @@ -0,0 +1,428 @@ + + + diff --git a/src/views/inspect/report/add.vue b/src/views/inspect/report/add.vue new file mode 100644 index 0000000..885a278 --- /dev/null +++ b/src/views/inspect/report/add.vue @@ -0,0 +1,485 @@ + + + diff --git a/src/views/inspect/report/history.vue b/src/views/inspect/report/history.vue new file mode 100644 index 0000000..b9f8986 --- /dev/null +++ b/src/views/inspect/report/history.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/views/inspect/report/historyDetail.vue b/src/views/inspect/report/historyDetail.vue new file mode 100644 index 0000000..f207e47 --- /dev/null +++ b/src/views/inspect/report/historyDetail.vue @@ -0,0 +1,129 @@ + + + + diff --git a/src/views/inspect/report/index.vue b/src/views/inspect/report/index.vue new file mode 100644 index 0000000..b98700c --- /dev/null +++ b/src/views/inspect/report/index.vue @@ -0,0 +1,289 @@ + + + diff --git a/src/views/inspect/report/paramBase.vue b/src/views/inspect/report/paramBase.vue new file mode 100644 index 0000000..90ded2f --- /dev/null +++ b/src/views/inspect/report/paramBase.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/views/inspect/report/paramList.vue b/src/views/inspect/report/paramList.vue new file mode 100644 index 0000000..98596d4 --- /dev/null +++ b/src/views/inspect/report/paramList.vue @@ -0,0 +1,160 @@ + + + + diff --git a/src/views/inspect/report/templateHistory.vue b/src/views/inspect/report/templateHistory.vue new file mode 100644 index 0000000..2481827 --- /dev/null +++ b/src/views/inspect/report/templateHistory.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/inspect/report/templateHistoryDetail.vue b/src/views/inspect/report/templateHistoryDetail.vue new file mode 100644 index 0000000..880245d --- /dev/null +++ b/src/views/inspect/report/templateHistoryDetail.vue @@ -0,0 +1,163 @@ + + + + diff --git a/src/views/inspect/report/templateList.vue b/src/views/inspect/report/templateList.vue new file mode 100644 index 0000000..e7a8cd6 --- /dev/null +++ b/src/views/inspect/report/templateList.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/views/inspect/report/timeSet.vue b/src/views/inspect/report/timeSet.vue new file mode 100644 index 0000000..3d0ae61 --- /dev/null +++ b/src/views/inspect/report/timeSet.vue @@ -0,0 +1,205 @@ + + + diff --git a/src/views/inspect/routineInspect.vue b/src/views/inspect/routineInspect.vue new file mode 100644 index 0000000..d260490 --- /dev/null +++ b/src/views/inspect/routineInspect.vue @@ -0,0 +1,268 @@ + + + diff --git a/src/views/inspect/scriptExplain.vue b/src/views/inspect/scriptExplain.vue new file mode 100644 index 0000000..c7e4ec5 --- /dev/null +++ b/src/views/inspect/scriptExplain.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/inspect/server/selectServer.vue b/src/views/inspect/server/selectServer.vue new file mode 100644 index 0000000..7d3bd35 --- /dev/null +++ b/src/views/inspect/server/selectServer.vue @@ -0,0 +1,167 @@ + + + + diff --git a/src/views/inspect/server/targetServer.vue b/src/views/inspect/server/targetServer.vue new file mode 100644 index 0000000..32e28a0 --- /dev/null +++ b/src/views/inspect/server/targetServer.vue @@ -0,0 +1,237 @@ + + diff --git a/src/views/inspect/temp.vue b/src/views/inspect/temp.vue new file mode 100644 index 0000000..3b41c64 --- /dev/null +++ b/src/views/inspect/temp.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/views/inspect/timingInspect.vue b/src/views/inspect/timingInspect.vue new file mode 100644 index 0000000..c0a700f --- /dev/null +++ b/src/views/inspect/timingInspect.vue @@ -0,0 +1,331 @@ + + + diff --git a/src/views/inspect/utils/index.js b/src/views/inspect/utils/index.js new file mode 100644 index 0000000..8d8c6a1 --- /dev/null +++ b/src/views/inspect/utils/index.js @@ -0,0 +1,390 @@ +// 获取用户列表 +import { getUser } from 'services/system/user' +import { getTemplate } from 'services/task/task' +import { getTemplatesDetail } from 'services/task/inspect' +export function getUserList (self) { + const _data = { + page: 1, + rows: 9999 + } + _data.params = JSON.stringify([{ + param: { + tenantId: 0 + }, + sign: 'EQ' + }]) + return getUser(_data) + // return new Promise((resolve) => { + // getUser(_data).then(res => { + // if (res.success) { + // resolve(res.data.rows) + // } + // }) + // }) +} + +// 获取巡检分类 +export const inspectTypeList = [ + { + code: 'APPLICATION', + name: '应用巡检' + }, + { + code: 'HOST', + name: '主机巡检' + }, + { + code: 'DB', + name: '数据库巡检' + }, + { + code: 'MIDDLEWARE', + name: '中间件巡检' + }, + { + code: 'NETWORK', + name: '网络巡检' + }, + { + code: 'OTHERS', + name: '其他巡检' + } +] + +// 根据code获取巡检分类名称 +export function getInspectTypeName (code) { + for (const item of inspectTypeList) { + if (item.code === code) { + return item.name + } + } +} + +// 获取模板列表 +function getTemplateList (self, scenceId) { + const _scenceId = scenceId + return new Promise((resolve) => { + getTemplate({ + simple: true, + page: 1, + rows: 9999, + params: JSON.stringify([{ param: { sceneId: _scenceId, internal: false }, sign: 'EQ' }]) + }).then(res => { + if (res.success) { + resolve(res.data.rows) + } + }) + }) +} + +export function getNormTypeList () { + return [] +} + +function getWeekItem (val) { + switch (val) { + case 1: + return { name: '周一', value: 1 } + case 2: + return { name: '周二', value: 2 } + case 3: + return { name: '周三', value: 3 } + case 4: + return { name: '周四', value: 4 } + case 5: + return { name: '周五', value: 5 } + case 6: + return { name: '周六', value: 6 } + case 7: + return { name: '周日', value: 7 } + } +} +/** + * // 获取周数据 + * @param {*} start 起始日 + * @param {*} end 终止日 + */ +export function getWeekOptions (start, end) { + const result = [] + for (let i = start; i <= end; i++) { + result.push(getWeekItem(i)) + } + return result +} + +/** + * // 获取月数据 + * @param {*} start 起始日 + * @param {*} end 终止日 + */ +export function getMonthOptions (start, end) { + const result = [] + for (let i = start; i <= end; i++) { + result.push({ name: `${i}号`, value: i }) + } + return result +} + +/** + * 计算某年某月有多少天 + * @param {[number]} year 某年 + * @param {[number]} month 某月 + * @return {[number]} 某年某月有多少天 + */ +export function getDaysInYearMonth (year, month) { + let _year = year, _month = month + _month = parseInt(_month, 10) + 1; + if (_month > 12) { + _year += 1 + _month = 1 + } + const date = new Date(_year, _month, 0); + return date.getDate(); +} +// 指标分类包含全部 +export const normListAll = [ + { + id: 0, + code: 'all', + name: '全部分类' + }, + { + id: 1, + code: 'host', + name: '主机' + }, + { + id: 2, + code: 'db', + name: '数据库' + }, + { + id: 3, + code: 'middle', + name: '中间件' + }, + { + id: 4, + code: 'net', + name: '网络' + }, + { + id: 5, + code: 'other', + name: '其他' + } +] + +// 指标分类 +export const normList = [ + { + id: 1, + code: 'host', + name: '主机' + }, + { + id: 2, + code: 'db', + name: '数据库' + }, + { + id: 3, + code: 'middle', + name: '中间件' + }, + { + id: 4, + code: 'net', + name: '网络' + }, + { + id: 5, + code: 'other', + name: '其他' + } +] + +// 告警规则 +export const ruleList = [ + { + id: 0, + name: '>', + code: 'GT' + }, + { + id: 1, + name: '=', + code: 'EQ' + }, + { + id: 2, + name: '<', + code: 'LT' + }, + { + id: 3, + name: '>=', + code: 'GE' + }, + { + id: 4, + name: '<=', + code: 'LE' + }, + { + id: 5, + name: '不等于', + code: 'NEQ' + }, + { + id: 6, + name: '包含', + code: 'IN' + }, + { + id: 7, + name: '不包含', + code: 'NIN' + } +] + +// 告警级别 +export const levelList = [ + { + id: 1, + code: 'danger', + name: '严重' + }, + { + id: 2, + code: 'warning', + name: '警告' + }, + { + id: 3, + code: 'light', + name: '轻微' + } +] + +export const typeList = [ + { name: '自定义报表', value: 'custom' }, + { name: '报表模板', value: 'template' } +] + +export function getTempDetail (self, id) { + return new Promise((resolve, reject) => { + getTemplatesDetail(id).then(data => { + if (data.success) { + resolve(data.data) + } + }).catch(error => { + reject(error) + }) + }) +} + +export const allList = [ + { + id: 1, + name: 'name', + remark: '巡检名称' + }, + { + id: 2, + name: 'category', + remark: '巡检分类' + }, + { + id: 3, + name: 'userName', + remark: '执行人员' + }, + { + id: 4, + name: 'status', + remark: '巡检状态' + }, + { + id: 5, + name: 'warning', + remark: '巡检结果' + } +] + +export const preSelectList = [ + { + id: 1, + name: 'name', + remark: '巡检名称' + }, + { + id: 2, + name: 'category', + remark: '巡检分类' + }, + { + id: 3, + name: 'userName', + remark: '执行人员' + } +] + +export const paramListAll = [ + { + id: 1, + code: 'ip', + name: '主机IP' + }, + { + id: 2, + code: 'itemName', + name: '指标项' + }, + { + id: 3, + code: 'inspectResult', + name: '指标值' + }, + { + id: 4, + code: 'rule', + name: '规则' + }, + { + id: 5, + code: 'threshold', + name: '阈值' + }, + { + id: 6, + code: 'warning', + name: '告警等级' + } +] + +export const cycle = [ + { + code: 'Day', + name: '日报' + }, + { + code: 'Week', + name: '周报' + }, + { + code: 'Month', + name: '月报' + } +] + +export const status = [ + { + code: 'Off', + name: '禁用' + }, + { + code: 'On', + name: '启用' + } +] diff --git a/src/views/inspect/utils/methods.js b/src/views/inspect/utils/methods.js new file mode 100644 index 0000000..d520176 --- /dev/null +++ b/src/views/inspect/utils/methods.js @@ -0,0 +1,152 @@ +/** + * // 获取按钮权限 + * // hasRemote, hasAgent, hasJump, hasCmdb, hasNetwork, hasSafety + * @param {String} type 类型 + */ +import { getSystems, getInspectItem, getTemplates, getTemplatesDetail } from 'services/task/inspect' +export function getTabAuthor(type) { + let showTabList = [] + switch (type) { + case 'APPLICATION': // 应用巡检 + showTabList = ['hasRemote', 'hasAgent', 'hasJump', 'hasCmdb', 'hasNetwork', 'hasSafety'] + break; + case 'HOST': // 主机巡检 + showTabList = ['hasRemote', 'hasAgent', 'hasCmdb'] + break; + case 'DB': // 数据库巡检 + showTabList = ['hasRemote', 'hasAgent', 'hasCmdb'] + break; + case 'MIDDLEWARE': // 中间件巡检 + showTabList = ['hasRemote', 'hasAgent', 'hasCmdb'] + break; + case 'NETWORK': // 网络巡检 + showTabList = ['hasRemote', 'hasJump', 'hasCmdb', 'hasNetwork', 'hasSafety', 'hasAgent'] + break; + case 'OTHERS': + showTabList = ['hasRemote', 'hasAgent', 'hasJump', 'hasCmdb', 'hasNetwork', 'hasSafety'] + break; + } + + return showTabList +} + +/** + * // 获取应用系统 + * @param {*} slef + */ +export function getSystemList(self) { + return new Promise((resolve, reject) => { + const params = { + page: 1, + rows: 9999, + sorter: JSON.stringify({ gmtCreate: '1' }) + } + params.params = JSON.stringify([{ + moduleCode: 'application_system', + conditions: [] + }]) + getSystems(params).then(data => { + if (data.success) { + resolve(data.data.rows) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * // 根据指标获取巡检项 + */ +export function getInspectItemByType(self, index, data) { + return new Promise((resolve, reject) => { + if (!data) { + self.changeInspectItemType(index) + return + } + const params = { + page: 1, + rows: 999 + } + // 根据分类切换数据 + params.params = JSON.stringify([ + { + param: { + targetType: data + }, + sign: 'EQ' + } + ]) + getInspectItem(params).then(data => { + if (data.success) { + resolve(data.data.rows) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取巡检模板 +export function getTempList(self) { + return new Promise((resolve, reject) => { + const params = { + page: 1, + rows: 999 + } + getTemplates(params).then(data => { + if (data.success) { + resolve(data.data.rows) + } + }).catch(error => { + reject(error) + }) + }) +} + +export function getTempDetail(self, index, id) { + return new Promise((resolve, reject) => { + if (!id) { + self.clearInspectItemIds(index) + return; + } + getTemplatesDetail(id).then(data => { + if (data.success) { + const ids = [] + data.data.forEach(item => { + self.$nextTick(() => { + ids.push(item.id) + }) + }) + resolve(ids) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * // 数据校验 + * @param {*} self + * @param {*} item 数据源 + */ +export function testGroupData(self, item) { + if (!item.name) { + self.$message.error(`资源组名称不能为空【${item.name}】`) + return false + } + // if (item.name.match(/^\s+|\s+$/g)) { + // this.$message.error(`资源组名称首尾不能包含空格【${item.name}】`) + // return false + // } + if (!item.hostList.length) { + self.$message.error(`资源组服务器列表不能为空【${item.name}】`) + return false + } + if (!item.itemIds.length) { + self.$message.error(`资源组巡检项不能为空【${item.name}】`) + return false + } + return true +} diff --git a/src/views/login/lockme.vue b/src/views/login/lockme.vue new file mode 100644 index 0000000..d44d48d --- /dev/null +++ b/src/views/login/lockme.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/login/login.vue b/src/views/login/login.vue new file mode 100644 index 0000000..30c963e --- /dev/null +++ b/src/views/login/login.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/src/views/login/sso.vue b/src/views/login/sso.vue new file mode 100644 index 0000000..a40f066 --- /dev/null +++ b/src/views/login/sso.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/views/login/tools.js b/src/views/login/tools.js new file mode 100644 index 0000000..83d9422 --- /dev/null +++ b/src/views/login/tools.js @@ -0,0 +1,15 @@ +import { setToken } from 'utils/auth' +import { enablePermissionStorage, menuKey, enableUserStorage, userKey } from '@/config' + +export function setLoginData(data) { + 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/views/patch/components/addDeploy.vue b/src/views/patch/components/addDeploy.vue new file mode 100644 index 0000000..5129b5d --- /dev/null +++ b/src/views/patch/components/addDeploy.vue @@ -0,0 +1,358 @@ + + + diff --git a/src/views/patch/components/addHistory.vue b/src/views/patch/components/addHistory.vue new file mode 100644 index 0000000..f85f1fa --- /dev/null +++ b/src/views/patch/components/addHistory.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/src/views/patch/components/paramSet.vue b/src/views/patch/components/paramSet.vue new file mode 100644 index 0000000..01c25e1 --- /dev/null +++ b/src/views/patch/components/paramSet.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/views/patch/components/targetServer.vue b/src/views/patch/components/targetServer.vue new file mode 100644 index 0000000..6392f81 --- /dev/null +++ b/src/views/patch/components/targetServer.vue @@ -0,0 +1,147 @@ + + diff --git a/src/views/patch/config.js b/src/views/patch/config.js new file mode 100644 index 0000000..f2f73d9 --- /dev/null +++ b/src/views/patch/config.js @@ -0,0 +1,177 @@ +import { getUserList, getTempList } from './utils/index' +// 补丁部署列表 +export const deployColumns = [ + // { + // type: 'selection', + // disabled: true + // }, + { label: '任务名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + // { label: '类型', prop: 'type', scopedSlots: { customRender: 'type' } }, + { label: '编排模板', prop: 'templateName' }, + { label: '创建人', prop: 'creator' }, + { label: '创建时间', prop: 'gmtCreate' }, + { label: '操作', disabled: true, width: '220px', scopedSlots: { customRender: 'operate' } } +] + +export const historyColumns = [ + { label: '任务名称', prop: 'name', scopedSlots: { customRender: 'name' } }, + // { label: '任务类型', prop: 'type', scopedSlots: { customRender: 'type' } }, + { label: '补丁数', prop: 'patchNum' }, + { label: '服务器数', prop: 'serveNum' }, + { label: '失败数/成功数/总数', prop: 'failSuccessTotal' }, + { label: '编排模板', prop: 'executeTemplate' }, + { label: '执行人', prop: 'creator' }, + { label: '完成时间', prop: 'gmtCreate' } +] + +// 补丁安装详情查询 +export const historyDetailColumns = [ + { label: '名称', prop: 'name' }, + { label: '主机IP', prop: 'hostIp' }, + { label: '补丁名称', prop: 'patchName' }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: '更新时间', prop: 'gmtModify' }, + { label: '报错信息', prop: 'errorInfo', scopedSlots: { customRender: 'errorInfo' } } +] + +const typeList = [ + { + id: 'WIN', + name: 'windows' + }, + { + id: 'LINUX', + name: 'linux' + }, + { + id: 'DBO', + name: '单机' + }, + { + id: 'DBM', + name: '集群' + }, + { + id: 'TOMCAT', + name: 'tomcat' + }, + { + id: 'WEBLOGIC', + name: 'weblogic' + } +] + +const statusList = [ + { + id: 'DEVELOPING', + name: '开发中' + }, + { + id: 'APPROVED', + name: '已发布' + } +] + +// 巡检指标查询 +export const deploySearchConfigs = [ + { + label: '任务名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '状态', + value: 'status', + type: 'Select', + sign: 'EQ', + data: statusList + }, + // { + // label: '类型', + // value: 'type', + // type: 'Select', + // sign: 'EQ', + // data: typeList + // }, + { + label: '编排模板', + value: 'execute_template', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getTempList, + params: { simple: true }, + attr: 'data' + } + }, + { + label: '创建', + value: 'gmt_create', + type: 'DateRange' + }, + { + label: '定时', + value: 'timing', + type: 'DateRange' + } +] +// 历史记录查询 +export const historySearchConfigs = [ + { + label: '任务名称', + value: 'name', + type: 'Input', + sign: 'LK' + }, + { + label: '类型', + value: 'type', + type: 'Select', + sign: 'EQ', + data: typeList + }, + { + label: '编排模板', + value: 'execute_template', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getTempList, + params: { simple: true }, + attr: 'data' + } + }, + { + label: '创建人', + value: 'creatorId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getUserList, + params: { simple: true }, + attr: 'data.rows' + } + }, + { + label: '完成', + value: 'gmt_create', + type: 'DateRange' + } +] diff --git a/src/views/patch/deploy.vue b/src/views/patch/deploy.vue new file mode 100644 index 0000000..3d5b0a2 --- /dev/null +++ b/src/views/patch/deploy.vue @@ -0,0 +1,298 @@ + + + diff --git a/src/views/patch/history.vue b/src/views/patch/history.vue new file mode 100644 index 0000000..ace2220 --- /dev/null +++ b/src/views/patch/history.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/views/patch/utils/index.js b/src/views/patch/utils/index.js new file mode 100644 index 0000000..507af66 --- /dev/null +++ b/src/views/patch/utils/index.js @@ -0,0 +1,98 @@ +import { getUser } from 'services/system/user' +import { getTaskTemplates } from 'services/task/patch' +// 获取用户列表 +export function getUserList (self) { + const _data = { + page: 1, + rows: 9999 + } + _data.params = JSON.stringify([{ + param: { + tenantId: 0 + }, + sign: 'EQ' + }]) + return getUser(_data) + // return new Promise((resolve) => { + // getUser(_data).then(res => { + // if (res.success) { + // resolve(res.data.rows) + // } + // }) + // }) +} + +// 获取补丁分类 +export const typeList = [ + // { + // code: 'WIN', + // name: 'windows' + // }, + { + code: 'LINUX', + name: 'linux' + }, + { + code: 'DBO', + name: '单机' + }, + { + code: 'DBM', + name: '集群' + }, + { + code: 'TOMCAT', + name: 'tomcat' + }, + { + code: 'WEBLOGIC', + name: 'weblogic' + } +] + +export const headerList = [ + { + code: 'name', + name: '任务名称' + }, + { + code: 'type', + name: '任务类型' + }, + { + code: 'creator', + name: '执行人员' + }, + { + code: 'gmtCreate', + name: '完成时间' + } +] + +export function getInspectTypeName (code) { + for (const item of typeList) { + if (item.code === code) { + return item.name + } + } +} + +// 获取补丁模板 +export function getTempList (self) { + return getTaskTemplates() +} + +export const paramType = [ + { + code: 'String', + name: '字符串' + }, + { + code: 'password', + name: '密码' + }, + { + code: 'txt', + name: '富文本' + } +] diff --git a/src/views/repository/component/dotDropdown.vue b/src/views/repository/component/dotDropdown.vue new file mode 100644 index 0000000..6a764b3 --- /dev/null +++ b/src/views/repository/component/dotDropdown.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/views/repository/component/selectHost.vue b/src/views/repository/component/selectHost.vue new file mode 100644 index 0000000..d0d0e10 --- /dev/null +++ b/src/views/repository/component/selectHost.vue @@ -0,0 +1,318 @@ + + + + diff --git a/src/views/repository/component/selectServer.vue b/src/views/repository/component/selectServer.vue new file mode 100644 index 0000000..95f5c33 --- /dev/null +++ b/src/views/repository/component/selectServer.vue @@ -0,0 +1,267 @@ + + + + diff --git a/src/views/repository/components.vue b/src/views/repository/components.vue new file mode 100644 index 0000000..b3b02ac --- /dev/null +++ b/src/views/repository/components.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/src/views/repository/file_repository.vue b/src/views/repository/file_repository.vue new file mode 100644 index 0000000..cee95a0 --- /dev/null +++ b/src/views/repository/file_repository.vue @@ -0,0 +1,567 @@ + + + + + diff --git a/src/views/repository/script.vue b/src/views/repository/script.vue new file mode 100644 index 0000000..95af985 --- /dev/null +++ b/src/views/repository/script.vue @@ -0,0 +1,1100 @@ + + + + + diff --git a/src/views/repository/selectFile.vue b/src/views/repository/selectFile.vue new file mode 100644 index 0000000..3ea94bd --- /dev/null +++ b/src/views/repository/selectFile.vue @@ -0,0 +1,156 @@ + + diff --git a/src/views/repository/software_repository.vue b/src/views/repository/software_repository.vue new file mode 100644 index 0000000..5c81212 --- /dev/null +++ b/src/views/repository/software_repository.vue @@ -0,0 +1,675 @@ + + + + diff --git a/src/views/resource-apply/components/CategoryDisplay.vue b/src/views/resource-apply/components/CategoryDisplay.vue new file mode 100644 index 0000000..220bab7 --- /dev/null +++ b/src/views/resource-apply/components/CategoryDisplay.vue @@ -0,0 +1,50 @@ + + diff --git a/src/views/resource-apply/components/CommonWrapper.vue b/src/views/resource-apply/components/CommonWrapper.vue new file mode 100644 index 0000000..170ef65 --- /dev/null +++ b/src/views/resource-apply/components/CommonWrapper.vue @@ -0,0 +1,297 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/ConfirmOrder.vue b/src/views/resource-apply/components/ConfirmOrder.vue new file mode 100644 index 0000000..e5e40f9 --- /dev/null +++ b/src/views/resource-apply/components/ConfirmOrder.vue @@ -0,0 +1,167 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/DataDisk.vue b/src/views/resource-apply/components/DataDisk.vue new file mode 100644 index 0000000..c53bfaa --- /dev/null +++ b/src/views/resource-apply/components/DataDisk.vue @@ -0,0 +1,32 @@ + + diff --git a/src/views/resource-apply/components/Discount.vue b/src/views/resource-apply/components/Discount.vue new file mode 100644 index 0000000..d68285c --- /dev/null +++ b/src/views/resource-apply/components/Discount.vue @@ -0,0 +1,42 @@ + + diff --git a/src/views/resource-apply/components/DiscountDisplay.vue b/src/views/resource-apply/components/DiscountDisplay.vue new file mode 100644 index 0000000..b434ae5 --- /dev/null +++ b/src/views/resource-apply/components/DiscountDisplay.vue @@ -0,0 +1,34 @@ + + diff --git a/src/views/resource-apply/components/ImageItem.vue b/src/views/resource-apply/components/ImageItem.vue new file mode 100644 index 0000000..670b1fe --- /dev/null +++ b/src/views/resource-apply/components/ImageItem.vue @@ -0,0 +1,102 @@ + + diff --git a/src/views/resource-apply/components/LabelItem.vue b/src/views/resource-apply/components/LabelItem.vue new file mode 100644 index 0000000..1770bbf --- /dev/null +++ b/src/views/resource-apply/components/LabelItem.vue @@ -0,0 +1,90 @@ + + + diff --git a/src/views/resource-apply/components/PriceItem.vue b/src/views/resource-apply/components/PriceItem.vue new file mode 100644 index 0000000..a46b53a --- /dev/null +++ b/src/views/resource-apply/components/PriceItem.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/views/resource-apply/components/PublicCommonWrapper.vue b/src/views/resource-apply/components/PublicCommonWrapper.vue new file mode 100644 index 0000000..d06f25a --- /dev/null +++ b/src/views/resource-apply/components/PublicCommonWrapper.vue @@ -0,0 +1,262 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/RegionItem.vue b/src/views/resource-apply/components/RegionItem.vue new file mode 100644 index 0000000..5dd9120 --- /dev/null +++ b/src/views/resource-apply/components/RegionItem.vue @@ -0,0 +1,182 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/components/SkuPrice.vue b/src/views/resource-apply/components/SkuPrice.vue new file mode 100644 index 0000000..fa8d1c9 --- /dev/null +++ b/src/views/resource-apply/components/SkuPrice.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/views/resource-apply/components/SoftwareInstall.vue b/src/views/resource-apply/components/SoftwareInstall.vue new file mode 100644 index 0000000..73dba16 --- /dev/null +++ b/src/views/resource-apply/components/SoftwareInstall.vue @@ -0,0 +1,208 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/SuccessResult.vue b/src/views/resource-apply/components/SuccessResult.vue new file mode 100644 index 0000000..8399484 --- /dev/null +++ b/src/views/resource-apply/components/SuccessResult.vue @@ -0,0 +1,60 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/VpcItem.vue b/src/views/resource-apply/components/VpcItem.vue new file mode 100644 index 0000000..63d8062 --- /dev/null +++ b/src/views/resource-apply/components/VpcItem.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/views/resource-apply/components/ipPool.vue b/src/views/resource-apply/components/ipPool.vue new file mode 100644 index 0000000..421ab04 --- /dev/null +++ b/src/views/resource-apply/components/ipPool.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/resource-apply/components/publicConfirmOrder.vue b/src/views/resource-apply/components/publicConfirmOrder.vue new file mode 100644 index 0000000..65ab991 --- /dev/null +++ b/src/views/resource-apply/components/publicConfirmOrder.vue @@ -0,0 +1,163 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/components/publicImage.vue b/src/views/resource-apply/components/publicImage.vue new file mode 100644 index 0000000..b98dc06 --- /dev/null +++ b/src/views/resource-apply/components/publicImage.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/views/resource-apply/components/publicRegionItem.vue b/src/views/resource-apply/components/publicRegionItem.vue new file mode 100644 index 0000000..8e7592f --- /dev/null +++ b/src/views/resource-apply/components/publicRegionItem.vue @@ -0,0 +1,188 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/components/user.vue b/src/views/resource-apply/components/user.vue new file mode 100644 index 0000000..a969c87 --- /dev/null +++ b/src/views/resource-apply/components/user.vue @@ -0,0 +1,169 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/data/init.js b/src/views/resource-apply/data/init.js new file mode 100644 index 0000000..eeaee93 --- /dev/null +++ b/src/views/resource-apply/data/init.js @@ -0,0 +1,89 @@ +export const add = { + location: { + region: '', + az: '', + vendorId: '', + poolGroupId: '', + businessId: '', + projectId: '', + creatorId: '', + ownerId: '', + menderId: '', + vendorType: '' + }, + emption: { + duration: { + mode: 'Hour', + amount: 1 + }, + count: 1 + }, + serviceItem: {}, + nodes: 1, + regionName: '', + zoneName: '' +} +export const element = { + isLoadData: true, + categoryId: '', + skuList: [], + skuId: 0, + price: 0, + discount: 1, + amount: 1, + priceId: 0 +} +export const applyTimeList = [{ + name: '1个月', + value: '1|Month' +}, { + name: '2个月', + value: '2|Month' +}, { + name: '3个月', + value: '3|Month' +}, { + name: '4个月', + value: '4|Month' +}, { + name: '5个月', + value: '5|Month' +}, { + name: '6个月', + value: '6|Month' +}, { + name: '7个月', + value: '7|Month' +}, { + name: '8个月', + value: '8|Month' +}, { + name: '9个月', + value: '9|Month' +}, { + name: '1年', + value: '1|Year' +}, { + name: '2年', + value: '2|Year' +}, { + name: '3年', + value: '3|Year' +}, { + name: '4年', + value: '4|Year' +}] +export const softwareColumns = [ + { + label: 'CPU(核)', + value: 'cpu' + }, + { + label: '内存(GB)', + value: 'memory' + }, + { + label: '磁盘(GB)', + value: 'disk' + } +] diff --git a/src/views/resource-apply/data/mongodb.js b/src/views/resource-apply/data/mongodb.js new file mode 100644 index 0000000..f6c381d --- /dev/null +++ b/src/views/resource-apply/data/mongodb.js @@ -0,0 +1,11 @@ +export default { + mongodb_net_bindip: '0.0.0.0', + mongodb_net_maxconns: 65536, + mongodb_net_port: 27017, + mongodb_security_authorization: 'disabled', + mongodb_storage_dbpath: '/data/db', + mongodb_storage_engine: 'wiredTiger', + mongodb_storage_journal_enabled: 'true', + mongodb_storage_prealloc: 'true', + mongodb_replication_replindexprefetch: 'all' +} diff --git a/src/views/resource-apply/data/publicInit.js b/src/views/resource-apply/data/publicInit.js new file mode 100644 index 0000000..c04359d --- /dev/null +++ b/src/views/resource-apply/data/publicInit.js @@ -0,0 +1,32 @@ +export const add = { + location: { + region: '', + az: '', + vendorId: '', + poolGroupId: '', + businessId: '', + projectId: '', + creatorId: '', + ownerId: '', + menderId: '', + vendorType: '' + }, + emption: { + duration: { + mode: 'HOUR' + }, + count: 1 + }, + serviceItem: {}, + nodes: 1 +} +export const element = { + isLoadData: true, + categoryId: '', + skuList: [], + skuId: 0, + price: 0, + discount: 1, + amount: 1, + priceId: 0 +} diff --git a/src/views/resource-apply/data/redis.js b/src/views/resource-apply/data/redis.js new file mode 100644 index 0000000..1faee18 --- /dev/null +++ b/src/views/resource-apply/data/redis.js @@ -0,0 +1,48 @@ +export default { + redis_make_32bit: false, + redis_dir: '/var/lib/redis/6379', + redis_bind: '0.0.0.0', + redis_port: 6379, + redis_min_slaves_max_lag: 10, + redis_tcp_backlog: 511, + redis_tcp_keepalive: 0, + redis_maxclients: 100000, + redis_timeout: 0, + redis_slave_read_only: 'yes', + redis_slave_priority: 100, + redis_logfile: '', + redis_syslog_enabled: 'yes', + redis_syslog_facility: 'USER', + redis_daemonize: 'yes', + redis_databases: 16, + redis_loglevel: 'notice', + redis_slowlog_log_slower_than: 10000, + redis_slowlog_max_len: 128, + redis_maxmemory: 'noeviction', + redis_db_filename: 'dump.rdb', + redis_stop_writes_on_bgsave_error: 'yes', + redis_rdbcompression: 'yes', + redis_rdbchecksum: 'yes', + redis_appendonly: 'no', + redis_appendfilename: 'appendonly.aof', + redis_appendfsync: 'everysec', + redis_no_appendfsync_on_rewrite: 'no', + redis_auto_aof_rewrite_percentage: 100, + redis_auto_aof_rewrite_min_size: '64mb', + redis_notify_keyspace_events: '', + redis_sentinel_bind: '0.0.0.0', + redis_sentinel_port: 26379, + redis_sentinel_dir: '/var/lib/redis/sentinel_26379', + redis_sentinel_logfile: '', + redis_sentinel_quorum: 2, + redis_sentinel_down_after_milliseconds: 30000, + redis_sentinel_parallel_syncs: 1, + redis_sentinel_failover_timeout: 180000, + redis_sentinel_notification_script: false, + redis_sentinel_client_reconfig_script: false, + redis_save: [ + '900 1', + '300 10', + '60 10000' + ] +} diff --git a/src/views/resource-apply/data/software.js b/src/views/resource-apply/data/software.js new file mode 100644 index 0000000..6996783 --- /dev/null +++ b/src/views/resource-apply/data/software.js @@ -0,0 +1,86 @@ +export const versionMap = { + 'rds.mysql': 'MYSQL-VERSION', + 'rds.sqlserver': 'SQLSERVER-VERSION', + 'rds.postgresql': 'POSTGRESQL-VERSION', + 'cms.kafka': 'KAFKA-VERSION' +} + +export const configsMap = { + 'rds.mysql': { + mysql_username: 'root', + mysql_userhome: '/root', + mysql_password: 'meYFYTi9nzUAvo8bRrh3RA==', + mysql_root_password_update: 'true', + mysql_slow_query_log_enabled: true, + mysql_port: 3306, + mysql_bind_address: '0.0.0.0', + mysql_datadir: '/var/lib/mysql', + mysql_slow_query_time: 2, + mysql_key_buffer_size: '256M', + mysql_max_allowed_packet: '64M', + mysql_table_open_cache: 256, + mysql_sort_buffer_size: '1M', + mysql_read_buffer_size: '1M', + mysql_read_rnd_buffer_size: '4M', + mysql_myisam_sort_buffer_size: '64M', + mysql_thread_cache_size: 8, + mysql_query_cache_type: 0, + mysql_query_cache_size: '16M', + mysql_query_cache_limit: '1M', + mysql_max_connections: 1024, + mysql_tmp_table_size: '16M', + mysql_max_heap_table_size: '16M', + mysql_group_concat_max_len: 1024, + mysql_join_buffer_size: 262144, + mysql_lower_case_table_names: 0, + mysql_wait_timeout: 28800, + mysql_event_scheduler_state: 'OFF', + mysql_innodb_file_per_table: 1, + mysql_innodb_buffer_pool_size: '256M', + mysql_innodb_log_file_size: '64M', + mysql_innodb_log_buffer_size: '8M', + mysql_innodb_flush_log_at_trx_commit: 1, + mysql_innodb_lock_wait_timeout: 50, + mysql_innodb_large_prefix: 1, + mysql_innodb_file_format: 'barracuda', + mysql_mysqldump_max_allowed_packet: '64M', + mysql_max_binlog_size: '100M', + mysql_binlog_format: 'ROW', + mysql_expire_logs_days: 10 + }, + 'rds.sqlserver': { + // mssql_installation_source: 'https://go.microsoft.com/fwlink/?linkid=853016', + mssql_installation_path: 'C:\\\\SQLInstall', + mssql_temp_download_path: 'C:\\\\tmp', + mssql_instance_name: 'Test', + mssql_drive: 'C', + mssql_userdbvol_name: 'Userdbvol01', + mssql_port: 1433, + mssql_max_server_memory: 1024, + mssql_os_memory_reservation: 512, + mssql_suppress_reboot: 'false', + // mssql_sqlsvc_account: 'sql_svc', + // mssql_sqlsvc_account_pass: 'MyPlainTextPassWord01', + // mssql_agentsvc_account: 'sql_agt', + // mssql_agentsvc_account_pass: 'MyPlainTextPassWord01', + mssql_sa_pass: 'yq6CAP+QAMgxN+uYFKR8pw==', + mssql_installshared_path: 'C:\\\\Program Files\\\\Microsoft SQL Server', + mssql_installsharedwow_path: 'C:\\\\Program Files (x86)\\\\Microsoft SQL Server', + mssql_features: 'SQLENGINE,FULLTEXT,CONN', + mssql_browsersvc_mode: 'Automatic' + }, + 'rds.postgresql': { + postgresql_encoding: 'UTF-8', + postgresql_locale: 'en_US.UTF-8', + postgresql_ctype: 'en_US.UTF-8', + postgresql_admin_user: 'postgres', + postgresql_port: 5432, + postgresql_cluster_name: 'main' + }, + 'cms.kafka': { + data_dir: '/var/kafka', + log_dir: '/var/log/kafka', + port: 9092 + } + +} diff --git a/src/views/resource-apply/disk/ali.vue b/src/views/resource-apply/disk/ali.vue new file mode 100644 index 0000000..405988b --- /dev/null +++ b/src/views/resource-apply/disk/ali.vue @@ -0,0 +1,228 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/aws.vue b/src/views/resource-apply/disk/aws.vue new file mode 100644 index 0000000..06271f4 --- /dev/null +++ b/src/views/resource-apply/disk/aws.vue @@ -0,0 +1,194 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/huawei.vue b/src/views/resource-apply/disk/huawei.vue new file mode 100644 index 0000000..ec0f951 --- /dev/null +++ b/src/views/resource-apply/disk/huawei.vue @@ -0,0 +1,211 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/index.vue b/src/views/resource-apply/disk/index.vue new file mode 100644 index 0000000..707d55f --- /dev/null +++ b/src/views/resource-apply/disk/index.vue @@ -0,0 +1,56 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/op.vue b/src/views/resource-apply/disk/op.vue new file mode 100644 index 0000000..c6f218c --- /dev/null +++ b/src/views/resource-apply/disk/op.vue @@ -0,0 +1,275 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/tce.vue b/src/views/resource-apply/disk/tce.vue new file mode 100644 index 0000000..57d845d --- /dev/null +++ b/src/views/resource-apply/disk/tce.vue @@ -0,0 +1,207 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/disk/tencent.vue b/src/views/resource-apply/disk/tencent.vue new file mode 100644 index 0000000..61bb186 --- /dev/null +++ b/src/views/resource-apply/disk/tencent.vue @@ -0,0 +1,210 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/ImageItem.vue b/src/views/resource-apply/ecs/ImageItem.vue new file mode 100644 index 0000000..f77122f --- /dev/null +++ b/src/views/resource-apply/ecs/ImageItem.vue @@ -0,0 +1,90 @@ + + diff --git a/src/views/resource-apply/ecs/ali/DataDisk.vue b/src/views/resource-apply/ecs/ali/DataDisk.vue new file mode 100644 index 0000000..2b82035 --- /dev/null +++ b/src/views/resource-apply/ecs/ali/DataDisk.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/resource-apply/ecs/ali/flavor.vue b/src/views/resource-apply/ecs/ali/flavor.vue new file mode 100644 index 0000000..25109d1 --- /dev/null +++ b/src/views/resource-apply/ecs/ali/flavor.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/resource-apply/ecs/ali/image.vue b/src/views/resource-apply/ecs/ali/image.vue new file mode 100644 index 0000000..15b597e --- /dev/null +++ b/src/views/resource-apply/ecs/ali/image.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/views/resource-apply/ecs/ali/index.vue b/src/views/resource-apply/ecs/ali/index.vue new file mode 100644 index 0000000..daba1ad --- /dev/null +++ b/src/views/resource-apply/ecs/ali/index.vue @@ -0,0 +1,367 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/aws/addDisk/add.vue b/src/views/resource-apply/ecs/aws/addDisk/add.vue new file mode 100644 index 0000000..ad95fd6 --- /dev/null +++ b/src/views/resource-apply/ecs/aws/addDisk/add.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/addDisk/index.vue b/src/views/resource-apply/ecs/aws/addDisk/index.vue new file mode 100644 index 0000000..0aa174d --- /dev/null +++ b/src/views/resource-apply/ecs/aws/addDisk/index.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/addNics/add.vue b/src/views/resource-apply/ecs/aws/addNics/add.vue new file mode 100644 index 0000000..934301f --- /dev/null +++ b/src/views/resource-apply/ecs/aws/addNics/add.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/addNics/index.vue b/src/views/resource-apply/ecs/aws/addNics/index.vue new file mode 100644 index 0000000..c2031ca --- /dev/null +++ b/src/views/resource-apply/ecs/aws/addNics/index.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/flavor.vue b/src/views/resource-apply/ecs/aws/flavor.vue new file mode 100644 index 0000000..96901aa --- /dev/null +++ b/src/views/resource-apply/ecs/aws/flavor.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/image.vue b/src/views/resource-apply/ecs/aws/image.vue new file mode 100644 index 0000000..98551b5 --- /dev/null +++ b/src/views/resource-apply/ecs/aws/image.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/views/resource-apply/ecs/aws/index.vue b/src/views/resource-apply/ecs/aws/index.vue new file mode 100644 index 0000000..7f70931 --- /dev/null +++ b/src/views/resource-apply/ecs/aws/index.vue @@ -0,0 +1,382 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/components/manageoneNetwork/add.vue b/src/views/resource-apply/ecs/components/manageoneNetwork/add.vue new file mode 100644 index 0000000..b2035b9 --- /dev/null +++ b/src/views/resource-apply/ecs/components/manageoneNetwork/add.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/views/resource-apply/ecs/components/manageoneNetwork/index.vue b/src/views/resource-apply/ecs/components/manageoneNetwork/index.vue new file mode 100644 index 0000000..f6dff10 --- /dev/null +++ b/src/views/resource-apply/ecs/components/manageoneNetwork/index.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/views/resource-apply/ecs/components/manageoneNetwork/modify.vue b/src/views/resource-apply/ecs/components/manageoneNetwork/modify.vue new file mode 100644 index 0000000..805b6d0 --- /dev/null +++ b/src/views/resource-apply/ecs/components/manageoneNetwork/modify.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/views/resource-apply/ecs/components/setnetwork/add.vue b/src/views/resource-apply/ecs/components/setnetwork/add.vue new file mode 100644 index 0000000..09da648 --- /dev/null +++ b/src/views/resource-apply/ecs/components/setnetwork/add.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/views/resource-apply/ecs/components/setnetwork/index.vue b/src/views/resource-apply/ecs/components/setnetwork/index.vue new file mode 100644 index 0000000..6217f2a --- /dev/null +++ b/src/views/resource-apply/ecs/components/setnetwork/index.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/views/resource-apply/ecs/components/setnetwork/modify.vue b/src/views/resource-apply/ecs/components/setnetwork/modify.vue new file mode 100644 index 0000000..5197e23 --- /dev/null +++ b/src/views/resource-apply/ecs/components/setnetwork/modify.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/src/views/resource-apply/ecs/huawei/DataDisk.vue b/src/views/resource-apply/ecs/huawei/DataDisk.vue new file mode 100644 index 0000000..d5ee62e --- /dev/null +++ b/src/views/resource-apply/ecs/huawei/DataDisk.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/views/resource-apply/ecs/huawei/flavor.vue b/src/views/resource-apply/ecs/huawei/flavor.vue new file mode 100644 index 0000000..cca7e21 --- /dev/null +++ b/src/views/resource-apply/ecs/huawei/flavor.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/views/resource-apply/ecs/huawei/image.vue b/src/views/resource-apply/ecs/huawei/image.vue new file mode 100644 index 0000000..15b597e --- /dev/null +++ b/src/views/resource-apply/ecs/huawei/image.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/views/resource-apply/ecs/huawei/index.vue b/src/views/resource-apply/ecs/huawei/index.vue new file mode 100644 index 0000000..52cc817 --- /dev/null +++ b/src/views/resource-apply/ecs/huawei/index.vue @@ -0,0 +1,365 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/index.vue b/src/views/resource-apply/ecs/index.vue new file mode 100644 index 0000000..834edd5 --- /dev/null +++ b/src/views/resource-apply/ecs/index.vue @@ -0,0 +1,58 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/op/index.vue b/src/views/resource-apply/ecs/op/index.vue new file mode 100644 index 0000000..95ef90a --- /dev/null +++ b/src/views/resource-apply/ecs/op/index.vue @@ -0,0 +1,421 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/tce/DataDisk.vue b/src/views/resource-apply/ecs/tce/DataDisk.vue new file mode 100644 index 0000000..2b82035 --- /dev/null +++ b/src/views/resource-apply/ecs/tce/DataDisk.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/resource-apply/ecs/tce/flavor.vue b/src/views/resource-apply/ecs/tce/flavor.vue new file mode 100644 index 0000000..0ff6a58 --- /dev/null +++ b/src/views/resource-apply/ecs/tce/flavor.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/resource-apply/ecs/tce/image.vue b/src/views/resource-apply/ecs/tce/image.vue new file mode 100644 index 0000000..15b597e --- /dev/null +++ b/src/views/resource-apply/ecs/tce/image.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/views/resource-apply/ecs/tce/index.vue b/src/views/resource-apply/ecs/tce/index.vue new file mode 100644 index 0000000..ae2e937 --- /dev/null +++ b/src/views/resource-apply/ecs/tce/index.vue @@ -0,0 +1,352 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/tencent/DataDisk.vue b/src/views/resource-apply/ecs/tencent/DataDisk.vue new file mode 100644 index 0000000..2b82035 --- /dev/null +++ b/src/views/resource-apply/ecs/tencent/DataDisk.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/resource-apply/ecs/tencent/flavor.vue b/src/views/resource-apply/ecs/tencent/flavor.vue new file mode 100644 index 0000000..25109d1 --- /dev/null +++ b/src/views/resource-apply/ecs/tencent/flavor.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/resource-apply/ecs/tencent/image.vue b/src/views/resource-apply/ecs/tencent/image.vue new file mode 100644 index 0000000..1e80aa5 --- /dev/null +++ b/src/views/resource-apply/ecs/tencent/image.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/resource-apply/ecs/tencent/index.vue b/src/views/resource-apply/ecs/tencent/index.vue new file mode 100644 index 0000000..1139719 --- /dev/null +++ b/src/views/resource-apply/ecs/tencent/index.vue @@ -0,0 +1,354 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/vc/DataDisk.vue b/src/views/resource-apply/ecs/vc/DataDisk.vue new file mode 100644 index 0000000..aa9724a --- /dev/null +++ b/src/views/resource-apply/ecs/vc/DataDisk.vue @@ -0,0 +1,229 @@ + + + diff --git a/src/views/resource-apply/ecs/vc/assignIp.vue b/src/views/resource-apply/ecs/vc/assignIp.vue new file mode 100644 index 0000000..0e2eb21 --- /dev/null +++ b/src/views/resource-apply/ecs/vc/assignIp.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/views/resource-apply/ecs/vc/index.vue b/src/views/resource-apply/ecs/vc/index.vue new file mode 100644 index 0000000..2e10f97 --- /dev/null +++ b/src/views/resource-apply/ecs/vc/index.vue @@ -0,0 +1,302 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/ecs/vc/ippool.vue b/src/views/resource-apply/ecs/vc/ippool.vue new file mode 100644 index 0000000..fb8b368 --- /dev/null +++ b/src/views/resource-apply/ecs/vc/ippool.vue @@ -0,0 +1,169 @@ + + + diff --git a/src/views/resource-apply/fip/ali.vue b/src/views/resource-apply/fip/ali.vue new file mode 100644 index 0000000..eee5308 --- /dev/null +++ b/src/views/resource-apply/fip/ali.vue @@ -0,0 +1,131 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/aws.vue b/src/views/resource-apply/fip/aws.vue new file mode 100644 index 0000000..482df9f --- /dev/null +++ b/src/views/resource-apply/fip/aws.vue @@ -0,0 +1,140 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/huawei.vue b/src/views/resource-apply/fip/huawei.vue new file mode 100644 index 0000000..383242b --- /dev/null +++ b/src/views/resource-apply/fip/huawei.vue @@ -0,0 +1,143 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/index.vue b/src/views/resource-apply/fip/index.vue new file mode 100644 index 0000000..c0d61c2 --- /dev/null +++ b/src/views/resource-apply/fip/index.vue @@ -0,0 +1,56 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/op.vue b/src/views/resource-apply/fip/op.vue new file mode 100644 index 0000000..cd99593 --- /dev/null +++ b/src/views/resource-apply/fip/op.vue @@ -0,0 +1,97 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/tce.vue b/src/views/resource-apply/fip/tce.vue new file mode 100644 index 0000000..98c0ded --- /dev/null +++ b/src/views/resource-apply/fip/tce.vue @@ -0,0 +1,108 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/fip/tencent.vue b/src/views/resource-apply/fip/tencent.vue new file mode 100644 index 0000000..9943b28 --- /dev/null +++ b/src/views/resource-apply/fip/tencent.vue @@ -0,0 +1,108 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/index.scss b/src/views/resource-apply/index.scss new file mode 100644 index 0000000..a60d917 --- /dev/null +++ b/src/views/resource-apply/index.scss @@ -0,0 +1,110 @@ +.card { + background: #fff; + border-radius: 5px; + padding: 20px; + position: relative; + // 非订购样式调整 + &.no-order, + &.task-node { + padding: 0; + .fix-height { + height: auto; + overflow: inherit; + } + } + &.task-node { + .fixed_box { + display: none; + } + .fix-height { + padding-bottom: 0; + } + } + .fix-height { + box-sizing: border-box; + height: calc(100vh - 130px); + overflow: auto; + padding-bottom: 100px; + } + .fixed_box { + position: absolute; + left: 0; + bottom: 0; + border-top: 1px solid #dcdfe6; + width: 100%; + background: #fff; + padding: 20px 20px 20px 10px; + box-sizing: border-box; + background-color: #fefefe; + } + .card-title { + color: #000; + } +} + +::v-deep .el-divider { + margin: 12px 0; +} + +::v-deep .el-radio-button__orig-radio:checked+.el-radio-button__inner { + color: #409eff; + background-color: #d5e8fc; + border-color: #409eff; +} + +::v-deep .el-radio-button__inner { + min-width: 80px; +} + +.input-desc-text { + margin-left: 5px; + font-size: 12px; + color: #a7a7a0; +} + +.w-xxl { + width: 360px !important; +} + +.w-xxs { + width: 60px !important; +} + +.m-b-lg { + margin-bottom: 30px !important; +} + +.total-money { + font-weight: 400; + font-size: 26px; + color: #ff6600; +} + +.preview-card { + position: fixed; + top: 120px; + z-index: 1; + width: 300px !important; + right: 50px; + padding: 15px; + background: #f4f7fa; + max-height: calc(100vh - 160px); + box-sizing: border-box; + overflow: auto; + .title { + font-size: 16px; + } + .divider { + margin: 10px 0; + } + ::v-deep { + .el-form-item { + margin-bottom: 10px !important; + } + .el-form-item__label, + .el-form-item__content { + font-size: 12px; + line-height: 20px; + } + } +} \ No newline at end of file diff --git a/src/views/resource-apply/lb/ali.vue b/src/views/resource-apply/lb/ali.vue new file mode 100644 index 0000000..dedac6f --- /dev/null +++ b/src/views/resource-apply/lb/ali.vue @@ -0,0 +1,341 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/lb/aws.vue b/src/views/resource-apply/lb/aws.vue new file mode 100644 index 0000000..dbeccd6 --- /dev/null +++ b/src/views/resource-apply/lb/aws.vue @@ -0,0 +1,806 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/lb/index.vue b/src/views/resource-apply/lb/index.vue new file mode 100644 index 0000000..9eb660a --- /dev/null +++ b/src/views/resource-apply/lb/index.vue @@ -0,0 +1,48 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/mixins/create.js b/src/views/resource-apply/mixins/create.js new file mode 100644 index 0000000..52b74c9 --- /dev/null +++ b/src/views/resource-apply/mixins/create.js @@ -0,0 +1,25 @@ +import { getShoppingCartDetail } from 'services/system/shop_cart' +export default { + props: { + itemData: { + type: [Object, Boolean] + } + }, + data() { + return { + retention: false + } + }, + async created () { + if (this.itemData) { + this.retention = this.itemData + this.handleShowData() + } else if (this.$route.query.id) { + const res = await getShoppingCartDetail(this.$route.query.id) + if (res.success) { + this.retention = JSON.parse(res.data.inventory) + this.handleShowData() + } + } + } +} diff --git a/src/views/resource-apply/mixins/price.js b/src/views/resource-apply/mixins/price.js new file mode 100644 index 0000000..fcded26 --- /dev/null +++ b/src/views/resource-apply/mixins/price.js @@ -0,0 +1,72 @@ +// 小数精度 +import { getPrice } from 'components/sku-table/utils' +const decimalPrecision = 2 +export default { + data() { + return { + discountType: 'Tenant' + } + }, + computed: { + unit() { + const { + emption: { + duration: { mode } + }, + unit + } = this.addData + // 存在unit时自定义单位 + if (unit) { + const [{ amount }] = this.elements + return mode === 'Hour' ? unit : `${amount}${unit}` + } + return mode === 'Hour' ? '小时' : '月' + }, + discount() { + return this.$store.state.app.userData.discount + }, + discountPrice() { + return (this.price * this.discount).toFixed(decimalPrecision) + }, + price() { + let priceTotal = 0; + const { + emption: { count, duration: { amount = 1 } } + } = this.addData + this.elements.forEach(item => { + const price = this.getSkuPrice(item) + priceTotal += price + }) + return (priceTotal * amount * count).toFixed(decimalPrecision) + } + }, + methods: { + // 获取每个规格的具体信息 + getSkuPrice(item) { + const { skuId, skuList = [], insAmount = 1, otherAmount = 0, elements } = item; + if (elements) { + // 该元素下有多个类型 + let priceTotal = 0 + elements.forEach(cell => { + const price = this.getSkuPrice(cell) + priceTotal += price + }) + return priceTotal; + } + const sku = skuList.find(item => skuId === item.id); + if (!sku) return 0; + const { + emption: { + duration: { mode } + } + } = this.addData + const price = getPrice(sku, mode); + // 集群部署多个实例 + const { nodes = 1 } = this.addData + // 实例数量/计数单位向上取整 + const count = Math.ceil(insAmount + otherAmount / 1) + const finallPrice = Number((price * count * nodes).toFixed(decimalPrecision)); + return finallPrice + } + } +} diff --git a/src/views/resource-apply/mixins/sku.js b/src/views/resource-apply/mixins/sku.js new file mode 100644 index 0000000..45fd6fc --- /dev/null +++ b/src/views/resource-apply/mixins/sku.js @@ -0,0 +1,86 @@ +import { formatEqParams } from 'utils' +import { getCategoriesByCode, getSkus } from 'services/services/product' + +export default { + data() { + return { + loading: true + } + }, + created() { + this.initLoad() + }, + methods: { + // 初始化sku 通过skus配置去请求所有的数据 + initLoad() { + this.elements.forEach(item => { + if (item.isLoadData) { + this.getCategoryList(item) + } + }) + }, + // 获取商品的sku + getSku(item) { + const { categoryId } = item + this.setNodes(item) + this.loading = true + getSkus( + formatEqParams({ + categoryId + }) + ) + .then(data => { + if (data.success) { + this.$set(item, 'skuList', data.data.map(item => { + const spec = JSON.parse(item.spec) + return { + ...item, + spec + } + })); + if (!data.data.length) { + item.skuId = 0; + return this.$message.error('服务类型下不存在产品规格,请检查'); + } + if (!item.skuId || (item.skuId && !item.skuList.find(item1 => item1.id == item.skuId))) item.skuId = data.data[0].id + } + }) + .finally(() => { + this.loading = false + }) + }, + // 设置nodes数量 + setNodes(item) { + const { main, categoryId, categoryMap } = item; + if (!main) return // 不是主sku直接返回 + const { nodes = 1 } = JSON.parse(categoryMap[categoryId].props) || {} + this.addData.nodes = nodes + }, + // 获取服务类型 + getCategoryList(item) { + const { serviceCode } = item + getCategoriesByCode(serviceCode).then(data => { + if (data.success) { + if (!data.data.length) return this.$message.error(`服务【${item.name}】不存在产品类型请检查`) + item.categoryList = data.data + item.categoryMap = this.getCategoryMap(data.data) + if (!item.categoryId) item.categoryId = item.categoryList[0].id + this.getSku(item) + } + }) + }, + // 生成服务类型map + getCategoryMap(data) { + const map = {} + data.forEach(item => { + const { id, name, remark, props } = item + map[id] = { + name, + remark, + props + } + }) + return map + } + } +} diff --git a/src/views/resource-apply/mongodb.vue b/src/views/resource-apply/mongodb.vue new file mode 100644 index 0000000..05144fd --- /dev/null +++ b/src/views/resource-apply/mongodb.vue @@ -0,0 +1,78 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/rabbitmq.vue b/src/views/resource-apply/rabbitmq.vue new file mode 100644 index 0000000..a4b6da3 --- /dev/null +++ b/src/views/resource-apply/rabbitmq.vue @@ -0,0 +1,74 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/redis.vue b/src/views/resource-apply/redis.vue new file mode 100644 index 0000000..dc5eedf --- /dev/null +++ b/src/views/resource-apply/redis.vue @@ -0,0 +1,75 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/software.vue b/src/views/resource-apply/software.vue new file mode 100644 index 0000000..cbe76fa --- /dev/null +++ b/src/views/resource-apply/software.vue @@ -0,0 +1,40 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + diff --git a/src/views/resource-apply/task/index.vue b/src/views/resource-apply/task/index.vue new file mode 100644 index 0000000..1e2a20d --- /dev/null +++ b/src/views/resource-apply/task/index.vue @@ -0,0 +1,172 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + diff --git a/src/views/resource-apply/utils/index.ts b/src/views/resource-apply/utils/index.ts new file mode 100644 index 0000000..fff1a6e --- /dev/null +++ b/src/views/resource-apply/utils/index.ts @@ -0,0 +1,32 @@ +export function generateSpec(sourceSpec: any) { + const specName: string[] = []; + let spec = sourceSpec; + if (typeof sourceSpec === 'string') { + spec = JSON.parse(sourceSpec) + } + spec.forEach((cell:any) => { + specName.push(`${cell.specValue}${cell.unit || ''}`) + }) + return specName.join('/') +} +export function getSpecValue(item:any) { + const { skuId, skuList } = item; + const cell = skuList.find((a:any) => a.id === skuId); + if (!cell) return {}; + let spec = cell.spec; + if (typeof spec === 'string') spec = JSON.parse(spec); + const res:any = {}; + spec.forEach((element:any) => { + const { specName, specValue } = element; + res[specName] = specValue; + }); + return res +} +export function getSpec (skuId: number, skuList: any[]) { + const sku = skuList.find(cell => skuId === cell.id); + return sku.spec.map((item:any) => { + return { + [item.specName]: item.specValue + } + }) +} diff --git a/src/views/resource-apply/vpc/ali.vue b/src/views/resource-apply/vpc/ali.vue new file mode 100644 index 0000000..749fe81 --- /dev/null +++ b/src/views/resource-apply/vpc/ali.vue @@ -0,0 +1,150 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/aws.vue b/src/views/resource-apply/vpc/aws.vue new file mode 100644 index 0000000..3ae427c --- /dev/null +++ b/src/views/resource-apply/vpc/aws.vue @@ -0,0 +1,154 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/huawei.vue b/src/views/resource-apply/vpc/huawei.vue new file mode 100644 index 0000000..1fef5f7 --- /dev/null +++ b/src/views/resource-apply/vpc/huawei.vue @@ -0,0 +1,147 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/index.vue b/src/views/resource-apply/vpc/index.vue new file mode 100644 index 0000000..3da4564 --- /dev/null +++ b/src/views/resource-apply/vpc/index.vue @@ -0,0 +1,56 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/op.vue b/src/views/resource-apply/vpc/op.vue new file mode 100644 index 0000000..60b8b26 --- /dev/null +++ b/src/views/resource-apply/vpc/op.vue @@ -0,0 +1,127 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/tce.vue b/src/views/resource-apply/vpc/tce.vue new file mode 100644 index 0000000..ef2e70d --- /dev/null +++ b/src/views/resource-apply/vpc/tce.vue @@ -0,0 +1,147 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-apply/vpc/tencent.vue b/src/views/resource-apply/vpc/tencent.vue new file mode 100644 index 0000000..58c0396 --- /dev/null +++ b/src/views/resource-apply/vpc/tencent.vue @@ -0,0 +1,173 @@ +/** +* Created by HaijunZhang on 2019/4/28. +*/ + + + + + diff --git a/src/views/resource-manage/components/setGroup.vue b/src/views/resource-manage/components/setGroup.vue new file mode 100644 index 0000000..bd44ed8 --- /dev/null +++ b/src/views/resource-manage/components/setGroup.vue @@ -0,0 +1,67 @@ + + + + diff --git a/src/views/resource-manage/components/setSq.vue b/src/views/resource-manage/components/setSq.vue new file mode 100644 index 0000000..de25ecc --- /dev/null +++ b/src/views/resource-manage/components/setSq.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/views/resource-manage/group/network.vue b/src/views/resource-manage/group/network.vue new file mode 100644 index 0000000..7c8c787 --- /dev/null +++ b/src/views/resource-manage/group/network.vue @@ -0,0 +1,501 @@ + + + + + diff --git a/src/views/resource-manage/group/worker.vue b/src/views/resource-manage/group/worker.vue new file mode 100644 index 0000000..33e4f27 --- /dev/null +++ b/src/views/resource-manage/group/worker.vue @@ -0,0 +1,496 @@ + + + + + diff --git a/src/views/resource-manage/host/UserConfig.vue b/src/views/resource-manage/host/UserConfig.vue new file mode 100644 index 0000000..33cfe66 --- /dev/null +++ b/src/views/resource-manage/host/UserConfig.vue @@ -0,0 +1,734 @@ + + + + + diff --git a/src/views/resource-manage/host/config.js b/src/views/resource-manage/host/config.js new file mode 100644 index 0000000..73a51d0 --- /dev/null +++ b/src/views/resource-manage/host/config.js @@ -0,0 +1,62 @@ +import { getBsmHostNetwork } from '@/services/task/resource' +export const columns = [ + { label: '主机名称', prop: 'name' }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { label: 'IP', prop: 'ip' }, + { label: '所有IP', prop: 'ips', scopedSlots: { customRender: 'ips' } }, + { label: '系统类别', prop: 'osCategory' }, + { label: '所属网段', prop: 'segmentName' }, + { label: '所属平台', prop: 'vendorName' }, + { label: '平台类型', prop: 'vendorType' }, + // { label: 'Ansiable', prop: 'known', scopedSlots: { customRender: 'known' } }, + // { label: 'Salt纳管', prop: 'saltKnown', scopedSlots: { customRender: 'saltKnown' } }, + { label: '操作', disabled: true, width: '220px', scopedSlots: { customRender: 'operate' } } +] + +const searchConfigs = [ + { + label: '主机名称', + value: 'name', + type: 'Input' + }, + { + label: 'IP地址', + value: 'ips', + type: 'Input' + }, + { + label: '所属网段', + value: 'segmentId', + type: 'Select', + sign: 'EQ', + data: [], + service: { + api: getBsmHostNetwork, + params: { page: 1, rows: 999999, params: '[]' }, + attr: 'data.rows' + } + }, + { + label: '状态', + value: 'status', + type: 'Select', + sign: 'EQ', + data: [ + { id: 'RUNNING', name: '运行中' }, + { id: 'STOPPED', name: '已关机' }, + { id: 'SUSPENDED', name: '已挂起' }, + { id: 'PAUSED', name: '已停止' }, + { id: 'UNKNOWN', name: '已断开' }, + { id: 'EXCEPTION', name: '异常' }, + { id: 'UNKNOWSTATUS', name: '未知' } + ] + }, + { + label: '所属平台', + value: 'vendorName', + type: 'Input' + } +] + +export const pmSearchConfigs = [{ type: 'Const', value: 'category', initValue: 'PHYSICAL' }, ...searchConfigs] +export const vmSearchConfigs = [{ type: 'Const', value: 'category', initValue: 'LOGICAL' }, ...searchConfigs] diff --git a/src/views/resource-manage/host/host.vue b/src/views/resource-manage/host/host.vue new file mode 100644 index 0000000..72c840f --- /dev/null +++ b/src/views/resource-manage/host/host.vue @@ -0,0 +1,431 @@ + + + diff --git a/src/views/resource-manage/host/importDialog.vue b/src/views/resource-manage/host/importDialog.vue new file mode 100644 index 0000000..0bba915 --- /dev/null +++ b/src/views/resource-manage/host/importDialog.vue @@ -0,0 +1,98 @@ + + diff --git a/src/views/resource-manage/host/serverConfig.vue b/src/views/resource-manage/host/serverConfig.vue new file mode 100644 index 0000000..28d9898 --- /dev/null +++ b/src/views/resource-manage/host/serverConfig.vue @@ -0,0 +1,328 @@ + + + + + diff --git a/src/views/security/account.vue b/src/views/security/account.vue new file mode 100644 index 0000000..f53f8af --- /dev/null +++ b/src/views/security/account.vue @@ -0,0 +1,110 @@ +/* eslint-disable func-call-spacing */ + + + diff --git a/src/views/security/command/config.ts b/src/views/security/command/config.ts new file mode 100644 index 0000000..98526c2 --- /dev/null +++ b/src/views/security/command/config.ts @@ -0,0 +1,51 @@ +export const levelOptions = [ + { value: 'COMMON', name: '普通' }, + { value: 'MEDIUM', name: '中等' }, + { value: 'SERIOUS', name: '高危' }, + { value: 'HIGH', name: '严重' }, + { value: 'DEADLY', name: '致命' } +] +export const searchConfigs = [ + { label: '命令名称', value: 'name', type: 'Input' }, + { + label: '命令级别', + value: 'level', + type: 'Select', + data: levelOptions, + props: { + value: 'value' + } + } +] + +export const columns = [ + { label: '命令名称', prop: 'name' }, + { label: '命令级别', prop: 'level', scopedSlots: { customRender: 'level' } }, + { label: '内容', prop: 'content' }, + { label: '操作', disabled: true, width: '160px', scopedSlots: { customRender: 'operate' } } +] +export function levelFilter(level: string, name: string = 'name') { + const levelMap: any = { + DEADLY: { + name: '致命', + color: 'danger' + }, + HIGH: { + name: '严重', + color: 'warning' + }, + SERIOUS: { + name: '高危', + color: 'normal' + }, + MEDIUM: { + name: '中等', + color: 'primary' + }, + COMMON: { + name: '普通', + color: 'success' + } + } + return levelMap[level][name] +} diff --git a/src/views/security/command/index.vue b/src/views/security/command/index.vue new file mode 100644 index 0000000..ed716ac --- /dev/null +++ b/src/views/security/command/index.vue @@ -0,0 +1,117 @@ + + + + diff --git a/src/views/task/components/executeDialog.vue b/src/views/task/components/executeDialog.vue new file mode 100644 index 0000000..75d40f5 --- /dev/null +++ b/src/views/task/components/executeDialog.vue @@ -0,0 +1,43 @@ + + diff --git a/src/views/task/components/selectCron.vue b/src/views/task/components/selectCron.vue new file mode 100644 index 0000000..efe4ac0 --- /dev/null +++ b/src/views/task/components/selectCron.vue @@ -0,0 +1,316 @@ +/** +* Created by Zhang Haijun on 2017/11/25. +*/ + + + + diff --git a/src/views/task/graph/NodeCommon.vue b/src/views/task/graph/NodeCommon.vue new file mode 100644 index 0000000..0c24ff0 --- /dev/null +++ b/src/views/task/graph/NodeCommon.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/views/task/graph/attributeItem.vue b/src/views/task/graph/attributeItem.vue new file mode 100644 index 0000000..a831a02 --- /dev/null +++ b/src/views/task/graph/attributeItem.vue @@ -0,0 +1,92 @@ + + + diff --git a/src/views/task/graph/control/edgeItem.vue b/src/views/task/graph/control/edgeItem.vue new file mode 100644 index 0000000..1521ba4 --- /dev/null +++ b/src/views/task/graph/control/edgeItem.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/views/task/graph/control/judgeNode.vue b/src/views/task/graph/control/judgeNode.vue new file mode 100644 index 0000000..0b551a9 --- /dev/null +++ b/src/views/task/graph/control/judgeNode.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/views/task/graph/executeDetail/ExecuteLog.vue b/src/views/task/graph/executeDetail/ExecuteLog.vue new file mode 100644 index 0000000..b7c0176 --- /dev/null +++ b/src/views/task/graph/executeDetail/ExecuteLog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/views/task/graph/executeDetail/OutputResult.vue b/src/views/task/graph/executeDetail/OutputResult.vue new file mode 100644 index 0000000..3b5ed74 --- /dev/null +++ b/src/views/task/graph/executeDetail/OutputResult.vue @@ -0,0 +1,74 @@ + + + + diff --git a/src/views/task/graph/executeDetail/detailDialog.vue b/src/views/task/graph/executeDetail/detailDialog.vue new file mode 100644 index 0000000..23ac391 --- /dev/null +++ b/src/views/task/graph/executeDetail/detailDialog.vue @@ -0,0 +1,190 @@ + + + + diff --git a/src/views/task/graph/executeDetail/index.vue b/src/views/task/graph/executeDetail/index.vue new file mode 100644 index 0000000..7153789 --- /dev/null +++ b/src/views/task/graph/executeDetail/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/task/graph/executeDetail/resultServer.vue b/src/views/task/graph/executeDetail/resultServer.vue new file mode 100644 index 0000000..a45021a --- /dev/null +++ b/src/views/task/graph/executeDetail/resultServer.vue @@ -0,0 +1,63 @@ +* Created by Zhang Haijun on 2017/11/27. */ + + + diff --git a/src/views/task/graph/flow-editor/detail.vue b/src/views/task/graph/flow-editor/detail.vue new file mode 100644 index 0000000..ccd92a8 --- /dev/null +++ b/src/views/task/graph/flow-editor/detail.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/views/task/graph/flow-editor/filters.ts b/src/views/task/graph/flow-editor/filters.ts new file mode 100644 index 0000000..95b9096 --- /dev/null +++ b/src/views/task/graph/flow-editor/filters.ts @@ -0,0 +1,29 @@ +import { taskExeStatusFilter } from '@/filters' +export function statusFilter(status: string) { + const map: any = { + NotConfig: '未配置', + Complete: '配置完成', + Error: '配置有误', + Default: '初始化配置' + } + return map[status] || taskExeStatusFilter(status) +} +export function statusIconFilter (status: string) { + const map: any = { + NOREADY: 'skip.png', + READY: 'ready.png', + SUCCESS: 'success.png', + FAILED: 'fail.png', + SUSPENDED: 'warning.png', + RUNNING: 'el-icon-loading', + NotConfig: 'el-icon-warning', + Complete: 'el-icon-success', + Default: 'el-icon-success', + Error: 'el-icon-error' + } + return map[status] || 'warning.png' +} +export const flowNodeOption = { + statusFilter, + statusIconFilter +} diff --git a/src/views/task/graph/flow-editor/index.vue b/src/views/task/graph/flow-editor/index.vue new file mode 100644 index 0000000..d51a401 --- /dev/null +++ b/src/views/task/graph/flow-editor/index.vue @@ -0,0 +1,159 @@ + + diff --git a/src/views/task/graph/graph.vue b/src/views/task/graph/graph.vue new file mode 100644 index 0000000..ae1b5cf --- /dev/null +++ b/src/views/task/graph/graph.vue @@ -0,0 +1,372 @@ + + + diff --git a/src/views/task/graph/maintain/SelectFile.vue b/src/views/task/graph/maintain/SelectFile.vue new file mode 100644 index 0000000..12e303d --- /dev/null +++ b/src/views/task/graph/maintain/SelectFile.vue @@ -0,0 +1,335 @@ +/** +* Created by Zhang Haijun on 2017/9/5. +*/ + + + diff --git a/src/views/task/graph/maintain/SelectScript.vue b/src/views/task/graph/maintain/SelectScript.vue new file mode 100644 index 0000000..f19ecc1 --- /dev/null +++ b/src/views/task/graph/maintain/SelectScript.vue @@ -0,0 +1,148 @@ +/** * Created by Zhang Haijun on 2017/9/5. */ + + + + diff --git a/src/views/task/graph/maintain/SelectWork.vue b/src/views/task/graph/maintain/SelectWork.vue new file mode 100644 index 0000000..fc5a30e --- /dev/null +++ b/src/views/task/graph/maintain/SelectWork.vue @@ -0,0 +1,234 @@ +/** +* Created by Zhang Haijun on 2017/9/5. +*/ + + + + diff --git a/src/views/task/graph/maintain/components/BackupNode.vue b/src/views/task/graph/maintain/components/BackupNode.vue new file mode 100644 index 0000000..fed6848 --- /dev/null +++ b/src/views/task/graph/maintain/components/BackupNode.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/views/task/graph/maintain/components/DatabaseNode.vue b/src/views/task/graph/maintain/components/DatabaseNode.vue new file mode 100644 index 0000000..791f6a7 --- /dev/null +++ b/src/views/task/graph/maintain/components/DatabaseNode.vue @@ -0,0 +1,106 @@ + + + diff --git a/src/views/task/graph/maintain/components/HostallowNode.vue b/src/views/task/graph/maintain/components/HostallowNode.vue new file mode 100644 index 0000000..1db6760 --- /dev/null +++ b/src/views/task/graph/maintain/components/HostallowNode.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/views/task/graph/maintain/components/MethodNode.vue b/src/views/task/graph/maintain/components/MethodNode.vue new file mode 100644 index 0000000..551d03f --- /dev/null +++ b/src/views/task/graph/maintain/components/MethodNode.vue @@ -0,0 +1,159 @@ + + + diff --git a/src/views/task/graph/maintain/components/RecoveryNode.vue b/src/views/task/graph/maintain/components/RecoveryNode.vue new file mode 100644 index 0000000..a28a46c --- /dev/null +++ b/src/views/task/graph/maintain/components/RecoveryNode.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/views/task/graph/maintain/components/ScriptNode.vue b/src/views/task/graph/maintain/components/ScriptNode.vue new file mode 100644 index 0000000..9c379f2 --- /dev/null +++ b/src/views/task/graph/maintain/components/ScriptNode.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/views/task/graph/maintain/components/ScriptsNode.vue b/src/views/task/graph/maintain/components/ScriptsNode.vue new file mode 100644 index 0000000..231761e --- /dev/null +++ b/src/views/task/graph/maintain/components/ScriptsNode.vue @@ -0,0 +1,160 @@ + + + diff --git a/src/views/task/graph/maintain/components/ServiceNode.vue b/src/views/task/graph/maintain/components/ServiceNode.vue new file mode 100644 index 0000000..c84bb5a --- /dev/null +++ b/src/views/task/graph/maintain/components/ServiceNode.vue @@ -0,0 +1,137 @@ + + + diff --git a/src/views/task/graph/maintain/components/UploadNode.vue b/src/views/task/graph/maintain/components/UploadNode.vue new file mode 100644 index 0000000..4469aa2 --- /dev/null +++ b/src/views/task/graph/maintain/components/UploadNode.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/views/task/graph/maintain/components/UserNode.vue b/src/views/task/graph/maintain/components/UserNode.vue new file mode 100644 index 0000000..846f415 --- /dev/null +++ b/src/views/task/graph/maintain/components/UserNode.vue @@ -0,0 +1,280 @@ + + + diff --git a/src/views/task/graph/maintain/components/index.ts b/src/views/task/graph/maintain/components/index.ts new file mode 100644 index 0000000..1a55e47 --- /dev/null +++ b/src/views/task/graph/maintain/components/index.ts @@ -0,0 +1,21 @@ +import { upperFirst } from 'lodash-es'; +import { getModules } from 'utils/autoImport' + +const codeMap = new Map([ + ['task.software.iscsi', 'IscsiServer'], + ['task.software.memcache', 'MemCache'], + ['task.software.rocketmq', 'RocketMq'], + ['task.software.sqlserver', 'SqlServer'], + ['task.software.postgresql', 'PgSql'], + ['task.software.rabbitmq', 'RabbitMq'], + ['task.software.activemq', 'ActiveMq'] +]) +// const vueFiles = require.context('./', true, /\.vue$/); +const vueFiles = (import.meta as any).globEager('./*.vue'); +export const components = getModules(vueFiles); + +// 优先在map里取值, 组件命名规范 task.software.nginx => NginxNode task.software.iscsi.client=>IscsiClient +export function getCurrentComponent(code: string) { + const [f, s = 'Node'] = code.split('task.maintain.')[1].split('.') + return codeMap.get(code) || `${upperFirst(f)}${upperFirst(s)}` +} diff --git a/src/views/task/graph/maintain/index.vue b/src/views/task/graph/maintain/index.vue new file mode 100644 index 0000000..a9ca70b --- /dev/null +++ b/src/views/task/graph/maintain/index.vue @@ -0,0 +1,68 @@ + + + diff --git a/src/views/task/graph/maintain/tools.js b/src/views/task/graph/maintain/tools.js new file mode 100644 index 0000000..7c15d09 --- /dev/null +++ b/src/views/task/graph/maintain/tools.js @@ -0,0 +1,32 @@ +/** + * Created by Zhang Haijun on 2017/11/21. + */ +// 对目标机器处理 +export function judgeServer (data, mode) { + let keyIndex = 0 + if (!data.every((item, key) => { + keyIndex = key + if (mode === 'SINGLE') { + return item.host && item.port && item.user && item.pasd + } else { + return item.host && item.port + } + })) { + return `目标机器第${keyIndex + 1}条信息填写不完整,请检查` + } + return '' +} + +export function formatServerList (itemData) { + itemData.target.forEach(data => { + delete data.privateIps + delete data.isLoaded + }) +} + +// 判断当前页面显示组件 +export function judgeIfEdit (instance) { + if (instance.$route.name.indexOf('Tpl') > -1) instance.hideServer = true + if (instance.$route.name.indexOf('Cron') > -1) instance.hideSuspend = true + if (instance.$route.name.indexOf('Preview') > -1) instance.isPreview = true +} diff --git a/src/views/task/graph/mixins/graphTools.js b/src/views/task/graph/mixins/graphTools.js new file mode 100644 index 0000000..0aa8acd --- /dev/null +++ b/src/views/task/graph/mixins/graphTools.js @@ -0,0 +1,239 @@ +/** + * Created by Zhang Haijun on 2017/11/21. + */ +export default { + methods: { + // 递归获取对象的属性 + returnObjValue(obj, attr) { + // 容错处理 obj不存在 + if (!obj) return false; + const length = attr.length + // 大于1时递归取值 + if (length > 1) { + const head = attr.shift() + return this.returnObjValue(obj[head], attr) + } + return obj[attr[0]] + }, + getOutEdgesCode(item) { + const edges = this.editor.graph.getOutgoingEdges(item) + const outCodes = [] + edges && edges.forEach(cell => { + const cellModel = cell.getTargetNode() + cellModel && outCodes.push(cellModel.data.code) + }) + return outCodes + }, + getInEdgesCode(item) { + const edges = this.editor.graph.getIncomingEdges(item) + const inCodes = [] + edges && edges.forEach(cell => { + const cellModel = cell.getSourceNode() + inCodes.push(cellModel.data.code) + }) + return inCodes + }, + // 判断强依赖节点是否有连线 + judgeRequiredNodeIsLink(node) { + if (node.input?.fronts.origin === 'reuse') return true // 资源节点已有不做强依赖限制 + const postConstraints = JSON.parse(this.moduleMap[node.code].postConstraints) + const preConstraints = JSON.parse(this.moduleMap[node.code].preConstraints) + const itemNode = this.editor.graph.getCellById(node.id) + let postFlag = true + let preFlag = true + if (postConstraints.rule === 'white') { + postFlag = postConstraints.data.every(item => { + let reuqiredFlag = true + if (item.required) { + reuqiredFlag = this.getOutEdgesCode(itemNode).some(cell => { + return this.generateReg(item.code).test(cell) + }) + } + if (!reuqiredFlag) this.$message.error(`该节点【${node.label}】强依赖于后置模型【${this.moduleMap[item.code].name}】,要求必须连接`) + return reuqiredFlag + }) + } + if (preConstraints.rule === 'white') { + preFlag = preConstraints.data.every(item => { + let reuqiredFlag = true + if (item.required) { + reuqiredFlag = this.getInEdgesCode(itemNode).some(cell => { + return this.generateReg(item.code).test(cell) + }) + } + if (!reuqiredFlag) this.$message.error(`该节点【${node.label}】强依赖于前置模型【${this.moduleMap[item.code].name}】,要求必须连接`) + return reuqiredFlag + }) + } + return postFlag && preFlag + }, + // 判断节点加入order + handleJudgeOrder(data) { + data.forEach((item, index) => { + item.order = index + }) + }, + // 生成正则表达式 + generateReg(value) { + return new RegExp(value, 'g') + }, + // 判断是否为虚拟机节点 + judgeIsVm(code) { + return /^task[.]resource[.]cvm[.][a-z]{1,20}$/.test(code) + }, + judgeContextMenu(cell) { + + }, + // 节点连线:判断节点之前是否可以连线 + judgeNodeLink(sourceNode, targetNode) { + const source = sourceNode.getData() + const target = targetNode.getData() + // 前置依赖后置依赖处理 + const postConstraints = JSON.parse(this.moduleMap[source.code].postConstraints) + const preConstraints = JSON.parse(this.moduleMap[target.code].preConstraints) + // 后置依赖处理 + if (postConstraints.rule === 'black') { + const flag = postConstraints.data.some(item => { + return this.generateReg(item.code).test(target.code) + }) + if (flag) { + return false + } + } + if (postConstraints.rule === 'white') { + const flag = postConstraints.data.some(item => { + let unigueFlag = false + if (item.unique) { + unigueFlag = this.getOutEdgesCode(sourceNode).includes(target.code) + } + return this.generateReg(item.code).test(target.code) && !unigueFlag + }) + if (!flag) { + return false; + } + } + // 前置依赖 + if (preConstraints.rule === 'black') { + const flag = preConstraints.data.some(item => { + return this.generateReg(item.code).test(source.code) + }) + if (flag) { + return false + } + } + if (preConstraints.rule === 'white') { + const flag = preConstraints.data.some(item => { + let unigueFlag = false + if (item.unique) { + unigueFlag = this.getInEdgesCode(targetNode).includes(source.code) + } + return this.generateReg(item.code).test(source.code) && !unigueFlag + }) + if (!flag) { + return false + } + } + if (postConstraints.limit && this.getOutEdgesCode(sourceNode).length === postConstraints.limit) { + return false + } + return true; + }, + // 判断节点是否可以解组 + judgeUnGroup(command) { + setTimeout(() => { + command.snapShot.groups.forEach(item => { + if (item.internal && command.selectedItems.includes(item.id)) { + this.$message.error('内置分组不能进行解组') + command.back(this.editor.editor) + } + }) + }) + }, + // 判断节点是否可以删除 + judgeDelete(command) { + const nodes = command.getDeleteItems(this.editor.editor) + const itemIds = [] + nodes.forEach(item => { + const model = item.getModel() + if (model.ignore || model.mainNode) return this.$message.error('该节点不支持删除') + itemIds.push(model.id) + this.handleDelAfter(item) + }) + command.itemIds = itemIds + setTimeout(() => { + this.handleDependData() // 保证关联主机数据准确性 + }) + }, + // 节点删除逻辑处理 + handleDelAfter(item) { + if (item.type === 'edge') { + if (item.target.model.code === 'ctrl.judge') this.delJudgeEdgeToRmData(item.source, item.target) + } + if (item.type === 'node') { + const edges = item.getOutEdges() + edges.forEach(cell => { + if (cell.target.model.code === 'ctrl.judge') this.delJudgeEdgeToRmData(cell.source, cell.target) + }) + } + }, + // 节点新增逻辑处理 + handleAddAfter(command) { + if (command.type === 'edge') { + const targetModel = this.editor.graph.find(command.addModel.target).getModel() + const sourceModel = this.editor.graph.find(command.addModel.source).getModel() + if (targetModel.code === 'ctrl.judge') this.linkJudgeToAddData(sourceModel, targetModel) + if (sourceModel.code === 'ctrl.judge') this.addJudgeNodeEdge(command.addModel) + } + }, + // 判断节点新增输出 + addJudgeNodeEdge(model) { + const outEdges = this.editor.graph.find(model.source).getOutEdges() + let label = '成功' + let dicision = true + if (outEdges.length && outEdges[0].getModel().dicision) { + label = '失败' + dicision = false + } + model.label = label + model.dicision = dicision + this.updateNode(model) + }, + getRelationIds(id, visitedIds = []) { + this.editor.graph + .find(id) + .getInEdges() + .forEach(item => { + const model = item.source.getModel() + if (visitedIds.includes(model.id)) return + visitedIds.push(model.id) + this.getRelationIds(model.id, visitedIds) + }) + return visitedIds + }, + // 保证depend数据准确性 + handleDependData() { + this.editor.save().nodes.forEach(item => { + if (!(item.input && item.input.depend)) return + const depend = item.input.depend.data + if (!depend.length) return + const ids = this.getRelationIds(item.id) + const host = [] + depend.forEach(id => { + if (ids.includes(id)) host.push(id) + }) + item.input.depend.data = host + this.updateNode(item) + }) + }, + // 删除判断节点的连线同步删除数据 + delJudgeEdgeToRmData(source, target) { + const model = target.getModel() + const conditions = model.input.fronts.conditions + const ids = conditions.map(item => { + return item.id + }) + conditions.splice(ids.indexOf(source.id), 1) + this.updateNode(model) + } + } +} diff --git a/src/views/task/graph/mixins/index.js b/src/views/task/graph/mixins/index.js new file mode 100644 index 0000000..3d2fe50 --- /dev/null +++ b/src/views/task/graph/mixins/index.js @@ -0,0 +1,34 @@ +export default { + computed: { + graph () { + return this.$store.state.graph.editor.graph; + } + }, + methods: { + getPostData () { + let data = false; + this.$refs.form.validate(valid => { + if (valid) { + data = this.itemData; + } + }); + return data; + }, + getPreNodeData (nodeId, preCode) { + if (!nodeId) return {}; // 节点模板处理 + const node = this.graph.getCellById(nodeId) + const edges = this.graph.getIncomingEdges(node); + let data = {}; + if (edges) { + for (const cell of edges) { + const cellModel = cell.getSourceNode().getData() + if (cellModel.code === preCode) { + if (cellModel.input) data = cellModel.input.fronts; + break; + } + }; + } + return data; + } + } +} diff --git a/src/views/task/graph/mixins/show.js b/src/views/task/graph/mixins/show.js new file mode 100644 index 0000000..30c24e3 --- /dev/null +++ b/src/views/task/graph/mixins/show.js @@ -0,0 +1,121 @@ +export default { + data() { + return { + isPreview: this.$route.name.indexOf('Preview') > -1, // 详情预览 + isTemplate: this.$route.name.indexOf('Tpl') > -1, // 模板下不显示目标机器 + isTaskInstance: this.$route.name.indexOf('Instance') > -1, + isConsole: this.$route.name.indexOf('Service') > -1, // 自服务界面隐藏项目 + isHistoryDetail: this.$route.name.indexOf('History') > -1, // 执行历史的详情 + serverCount: {} + } + }, + computed: { + moduleMap() { + return this.$store.state.graph.moduleMap + }, + graph () { + return this.$store.state.graph.editor.graph; + }, + isHideSudo () { + return this.currentNode?.code.includes('task.software') + } + }, + methods: { + // 判断目标机器是否有误 + judgeTargetHost(node) { + const { + input: { + fronts: { cluster_install }, + target, + depend + }, + mainNode, + code, + role, + ignore, + pid + } = node + // 模板或者集群部署主节点不对目标机器校验 + if (!this.isTaskInstance || mainNode) return true; + const template = JSON.parse(this.moduleMap[code].template) + if (template) { + let nodeRule = { limits: '^[1-9]\\d*$' } + // 对节点机器数量做限制 + if (template.limits) { + const { limits, limits_message, sign, sign_message } = template.limits[cluster_install ? 'cluster' : 'standalone'] + nodeRule = { limits, limits_message, sign, sign_message } + } + // 集群部署角色节点 + if (ignore) { + nodeRule = this.getRoleRuleConfig(role, pid) + } + console.log(nodeRule) + return this.judgeTargetHostCount(node, nodeRule) + } + if (depend && !((target || { data: [] }).data.length + depend.data.length)) { + this.$message.error('请选择目标机器') + return false + } + return true + }, + // 集群节点查找配置 + getRoleRuleConfig(role, mainNodeId) { + const role1 = role.split('_')[0] + const roleMap = { + mongo: 'mongodb', + mysql: 'mysql', + redis: 'redis', + rocketmq: 'rocketmq', + memcached: 'memcache', + magent: 'memcache', + iscsi: 'iscsi' + } + const { + input: { + fronts: { cluster_type } + } + } = this.graph.getCellById(mainNodeId).getData(); + const cluster = JSON.parse(this.moduleMap[`task.software.${roleMap[role1]}`].template).deploy.cluster + const map = {} + // 集群部署分为多个方案,每种方案对机器限制不同 + const arr = cluster_type ? cluster[cluster_type] : cluster.topo; + arr.forEach(item => { + map[item.role] = item + }) + return map[role] + }, + // 判断目标机器数量是否符合要求 + judgeTargetHostCount(node, nodeRule) { + const { + input: { target = { data: [] }, depend = { data: [] } }, + role + } = node + let success = true + const serverLength = target.data.length + depend.data.length + const reg = new RegExp(nodeRule.limits, 'g'); + if (!reg.test(serverLength)) { + this.$message.error(nodeRule.limits_message || '请选择主机') + success = false + } + // 两个角色节点之间数量限制 + if (nodeRule.sign) { + const count = this.serverCount[nodeRule.object] + const sign = nodeRule.sign + this.serverCount[role] = serverLength + if (count && sign === '>=') { + if (count && count > serverLength) { + this.$message.error(nodeRule.sign_message) + success = false + } + } + if (count && sign === '<=') { + if (count && count < serverLength) { + this.$message.error(nodeRule.sign_message) + success = false + } + } + } + return success + } + } +} diff --git a/src/views/task/graph/resource/BareMetalNode.vue b/src/views/task/graph/resource/BareMetalNode.vue new file mode 100644 index 0000000..4be9151 --- /dev/null +++ b/src/views/task/graph/resource/BareMetalNode.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/views/task/graph/resource/components/index.ts b/src/views/task/graph/resource/components/index.ts new file mode 100644 index 0000000..cb2a8b4 --- /dev/null +++ b/src/views/task/graph/resource/components/index.ts @@ -0,0 +1,13 @@ +import { upperFirst } from 'lodash-es'; +import { getModules } from 'utils/autoImport' + +const codeMap = new Map() +// const vueFiles = require.context('./', true, /\.vue$/); +const vueFiles = (import.meta as any).globEager('./*/*.vue'); +export const components = getModules(vueFiles); + +// 优先在map里取值, 组件命名规范 task.software.nginx => NginxItem task.software.iscsi.client=>IscsiClient +export function getCurrentComponent(code: string) { + const [f, s = 'Item'] = code.split('task.resource.')[1].split('.') + return codeMap.get(code) || `${upperFirst(f)}${upperFirst(s)}` +} diff --git a/src/views/task/graph/resource/components/op/CbsOsp.vue b/src/views/task/graph/resource/components/op/CbsOsp.vue new file mode 100644 index 0000000..50391ea --- /dev/null +++ b/src/views/task/graph/resource/components/op/CbsOsp.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/views/task/graph/resource/components/op/CfwOsp.vue b/src/views/task/graph/resource/components/op/CfwOsp.vue new file mode 100644 index 0000000..39af6af --- /dev/null +++ b/src/views/task/graph/resource/components/op/CfwOsp.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/views/task/graph/resource/components/op/ClbOsp.vue b/src/views/task/graph/resource/components/op/ClbOsp.vue new file mode 100644 index 0000000..da6e148 --- /dev/null +++ b/src/views/task/graph/resource/components/op/ClbOsp.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/views/task/graph/resource/components/op/ClmOsp.vue b/src/views/task/graph/resource/components/op/ClmOsp.vue new file mode 100644 index 0000000..62d2c00 --- /dev/null +++ b/src/views/task/graph/resource/components/op/ClmOsp.vue @@ -0,0 +1,217 @@ + + + diff --git a/src/views/task/graph/resource/components/op/ClsOsp.vue b/src/views/task/graph/resource/components/op/ClsOsp.vue new file mode 100644 index 0000000..1e6e254 --- /dev/null +++ b/src/views/task/graph/resource/components/op/ClsOsp.vue @@ -0,0 +1,207 @@ + + + + diff --git a/src/views/task/graph/resource/components/op/CrsOsp.vue b/src/views/task/graph/resource/components/op/CrsOsp.vue new file mode 100644 index 0000000..1b8abd8 --- /dev/null +++ b/src/views/task/graph/resource/components/op/CrsOsp.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/views/task/graph/resource/components/op/CvmOsp.vue b/src/views/task/graph/resource/components/op/CvmOsp.vue new file mode 100644 index 0000000..3a800db --- /dev/null +++ b/src/views/task/graph/resource/components/op/CvmOsp.vue @@ -0,0 +1,67 @@ + + + diff --git a/src/views/task/graph/resource/components/op/FwpOsp.vue b/src/views/task/graph/resource/components/op/FwpOsp.vue new file mode 100644 index 0000000..d26e0b4 --- /dev/null +++ b/src/views/task/graph/resource/components/op/FwpOsp.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/views/task/graph/resource/components/op/FwrOsp.vue b/src/views/task/graph/resource/components/op/FwrOsp.vue new file mode 100644 index 0000000..ac96f7e --- /dev/null +++ b/src/views/task/graph/resource/components/op/FwrOsp.vue @@ -0,0 +1,166 @@ + + + diff --git a/src/views/task/graph/resource/components/op/SbnOsp.vue b/src/views/task/graph/resource/components/op/SbnOsp.vue new file mode 100644 index 0000000..f16ad57 --- /dev/null +++ b/src/views/task/graph/resource/components/op/SbnOsp.vue @@ -0,0 +1,201 @@ + + + diff --git a/src/views/task/graph/resource/components/op/SegOsp.vue b/src/views/task/graph/resource/components/op/SegOsp.vue new file mode 100644 index 0000000..16178cf --- /dev/null +++ b/src/views/task/graph/resource/components/op/SegOsp.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/views/task/graph/resource/components/op/SgrOsp.vue b/src/views/task/graph/resource/components/op/SgrOsp.vue new file mode 100644 index 0000000..39f919e --- /dev/null +++ b/src/views/task/graph/resource/components/op/SgrOsp.vue @@ -0,0 +1,68 @@ + + + diff --git a/src/views/task/graph/resource/components/op/VpcOsp.vue b/src/views/task/graph/resource/components/op/VpcOsp.vue new file mode 100644 index 0000000..0497af2 --- /dev/null +++ b/src/views/task/graph/resource/components/op/VpcOsp.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/views/task/graph/resource/components/op/components/OpProject.vue b/src/views/task/graph/resource/components/op/components/OpProject.vue new file mode 100644 index 0000000..b2592d2 --- /dev/null +++ b/src/views/task/graph/resource/components/op/components/OpProject.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/views/task/graph/resource/components/vc/CvmVsp.vue b/src/views/task/graph/resource/components/vc/CvmVsp.vue new file mode 100644 index 0000000..9ce17d1 --- /dev/null +++ b/src/views/task/graph/resource/components/vc/CvmVsp.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/task/graph/resource/components/vc/VpcVip.vue b/src/views/task/graph/resource/components/vc/VpcVip.vue new file mode 100644 index 0000000..11debab --- /dev/null +++ b/src/views/task/graph/resource/components/vc/VpcVip.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/views/task/graph/resource/data/init.js b/src/views/task/graph/resource/data/init.js new file mode 100644 index 0000000..8b60b96 --- /dev/null +++ b/src/views/task/graph/resource/data/init.js @@ -0,0 +1,39 @@ +export const add = { + location: { + region: '', + az: '', + vendorId: '', + poolGroupId: '' + } +} +export const element = { + isLoadData: true, + categoryId: '', + skuList: [], + skuId: 0, + price: 0, + discount: 1, + amount: 1, + priceId: 0 +} +export const initOpItem = { + origin: 'create', + id: '', + location: { + region: '', + az: '', + vendorId: '', + vendorType: 'OPENSTACK', + poolGroupId: '' + } +} +export const initOpProps = { + itemData: { + type: Object, + default: function () { + return { + ...initOpItem + } + } + } +} diff --git a/src/views/task/graph/resource/hooks/useApplication.ts b/src/views/task/graph/resource/hooks/useApplication.ts new file mode 100644 index 0000000..d01f73e --- /dev/null +++ b/src/views/task/graph/resource/hooks/useApplication.ts @@ -0,0 +1,31 @@ +import { ref } from '@vue/composition-api' +export default function (itemData:any) { + const { origin, id, ...others } = itemData + const applyData = others.configs ? others : null + const nodeRef = ref(); + const formRef = ref() + function getPostData() { + let data = false + formRef.value.validate((valid:boolean) => { + if (valid) { + if (itemData.origin === 'create') { + const result = nodeRef.value && nodeRef.value.getPostData() + if (result === false) return + data = { + ...itemData, + ...(result || {}) + } + } else { + data = itemData + } + } + }) + return data + } + return { + nodeRef, + formRef, + applyData, + getPostData + } +} diff --git a/src/views/task/graph/resource/hooks/useGraph.ts b/src/views/task/graph/resource/hooks/useGraph.ts new file mode 100644 index 0000000..14ad817 --- /dev/null +++ b/src/views/task/graph/resource/hooks/useGraph.ts @@ -0,0 +1,21 @@ +import { computed, ref } from '@vue/composition-api' +export default function (store: any) { + const graph = computed(() => store.state.graph.graph) + function getPreNodeData (nodeId: string, preCode: string) { + if (!nodeId) return {}; // 节点模板处理 + const edges = graph.value.find(nodeId).getInEdges(); + let data = {}; + for (const cell of edges) { + const cellModel = cell.source.getModel() + if (cellModel.code === preCode) { + if (cellModel.input) data = cellModel.input.fronts; + break; + } + }; + return data; + } + return { + graph, + getPreNodeData + } +} diff --git a/src/views/task/graph/resource/index.scss b/src/views/task/graph/resource/index.scss new file mode 100644 index 0000000..a531812 --- /dev/null +++ b/src/views/task/graph/resource/index.scss @@ -0,0 +1,78 @@ +.card { + background: #fff; + border-radius: 5px; + padding: 20px; + &.fix-height { + box-sizing: border-box; + height: calc(100vh - 130px); + overflow: auto; + } + .card-title { + color: #000; + font-size: 16px; + margin-bottom: 25px; + } +} + +::v-deep .el-radio-button__orig-radio:checked+.el-radio-button__inner { + color: #409eff; + background-color: #d5e8fc; + border-color: #409eff; +} + +::v-deep .el-radio-button__inner { + min-width: 80px; +} + +.input-desc-text { + margin-left: 5px; + font-size: 12px; + color: #a7a7a0; +} + +.w-xxl { + width: 360px !important; +} + +.w-xxs { + width: 60px !important; +} + +.m-b-lg { + margin-bottom: 30px !important; +} + +.total-money { + font-weight: 400; + font-size: 26px; + color: #ff6600; +} + +.preview-card { + position: fixed; + top: 120px; + z-index: 1; + width: 300px !important; + right: 50px; + padding: 15px; + background: #f4f7fa; + max-height: calc(100vh - 160px); + box-sizing: border-box; + overflow: auto; + .title { + font-size: 16px; + } + .divider { + margin: 10px 0; + } + & ::v-deep { + .el-form-item { + margin-bottom: 10px !important; + } + .el-form-item__label, + .el-form-item__content { + font-size: 12px; + line-height: 20px; + } + } +} \ No newline at end of file diff --git a/src/views/task/graph/resource/index.vue b/src/views/task/graph/resource/index.vue new file mode 100644 index 0000000..7abf096 --- /dev/null +++ b/src/views/task/graph/resource/index.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/task/graph/resource/mixins/application.js b/src/views/task/graph/resource/mixins/application.js new file mode 100644 index 0000000..61f5245 --- /dev/null +++ b/src/views/task/graph/resource/mixins/application.js @@ -0,0 +1,76 @@ +import { getServiceDetail } from 'services/services/spec' +export default { + methods: { + // 获取规格 + getSpec(item) { + const { skuId, skuList } = item + const sku = skuList.find(cell => skuId === cell.id) + return sku.spec.map(item => { + return { + [item.specName]: item.specValue + } + }) + }, + // 对elements进行处理 + getSkuParams(data) { + const params = [] + data.forEach(item => { + // 忽略此elements + if (item.ignore) return + const { serviceCode, skuId, priceId, insAmount, elements, categoryId, categoryMap, main, ignore } = item + // 如果存在子节点对子节点进行处理 + if (elements) { + const returnData = this.getSkuParams(elements) + params.push(...returnData) + return + } + const result = { + serviceCode, + skuId, + priceId, + category: categoryMap[categoryId].remark, + main, + ignore + } + let specs = [] + switch (serviceCode) { + case 'vmware.storage.disk': + case 'manageone.standard.volume': + case 'openstack.standard.volume': + specs = [{ disk: insAmount }] + break + default: + specs = this.getSpec(item) + } + result.specs = specs + params.push(result) + }) + return params + }, + getApplyData() { + if (this.getParams) { + const config = this.getParams() + // 校验不通过 + if (!config) return false + const { configs } = this.addData + this.addData.configs = { + ...configs, + ...config + } + } + const { location, configs, service } = this.addData + if (configs.osTenantName) { + configs.extension = { + osTenantName: configs.osTenantName + } + } + const elements = this.getSkuParams(this.elements) + return { + location, + configs, + elements, + service + } + } + } +} diff --git a/src/views/task/graph/resource/mixins/price.js b/src/views/task/graph/resource/mixins/price.js new file mode 100644 index 0000000..a9983a5 --- /dev/null +++ b/src/views/task/graph/resource/mixins/price.js @@ -0,0 +1,97 @@ +// 小数精度 +const decimalPrecision = 2 + +export default { + data() { + return { + discountType: 'Tenant' + } + }, + created() {}, + computed: { + unit() { + const { + emption: { + duration: { mode } + }, + unit + } = this.addData + // 存在unit时自定义单位 + if (unit) { + const [{ amount }] = this.elements + return mode === 'Hour' ? unit : `${amount}${unit}` + } + return mode === 'Hour' ? '小时' : '月' + }, + discount() { + return this.$store.state.app.userData.discount + }, + price: { + get() { + let priceTotal = 0 + let productPriceTotal = 0 + let tenantPriceTotal = 0 + this.elements.forEach(item => { + const { discount = 1 } = item + const { price, discountPrice } = this.getSkuPrice(item) + productPriceTotal += discountPrice + tenantPriceTotal += price * this.discount + priceTotal += price + }) + this.getTotalPrice(productPriceTotal, tenantPriceTotal) + return priceTotal.toFixed(decimalPrecision) + }, + set() {} + } + }, + methods: { + getTotalPrice(productPriceTotal, tenantPriceTotal) { + let price = tenantPriceTotal + // 商品与租户折扣哪个优惠用哪个 + if (productPriceTotal <= tenantPriceTotal) { + price = productPriceTotal + this.discountType = 'Product' + } else { + this.discountType = 'Tenant' + } + const { + emption: { count } + } = this.addData + this.totalPrice = (price * count).toFixed(decimalPrecision) + }, + // 获取每个规格的具体信息 + getSkuPrice(item) { + const { amount = 1, price = 0, discount = 1, insAmount = 1, otherAmount = 0, elements } = item + if (elements && elements.length) { + // 该元素下有多个类型 + let priceTotal = 0 + let discountPriceTotal = 0 + elements.forEach(cell => { + const { price, discountPrice } = this.getSkuPrice(cell) + priceTotal += price + discountPriceTotal += discountPrice + }) + return { + price: priceTotal, + discountPrice: discountPriceTotal + } + } + // 集群部署多个实例 + const { nodes } = this.addData + // 没有价格没必要进行下面的计算逻辑 + if (!price) { + return { + price: 0, + discountPrice: 0 + } + } + // 实例数量/计数单位向上取整 + const count = Math.ceil((insAmount + otherAmount / 1) / amount) + const finallPrice = Number((price * count * nodes).toFixed(decimalPrecision)) + return { + price: finallPrice, + discountPrice: finallPrice * discount + } + } + } +} diff --git a/src/views/task/graph/resource/mixins/sku.js b/src/views/task/graph/resource/mixins/sku.js new file mode 100644 index 0000000..61b387a --- /dev/null +++ b/src/views/task/graph/resource/mixins/sku.js @@ -0,0 +1,116 @@ +import { formatEqParams } from 'utils' +import { getCategoriesByCode, getSkus, getPrices } from 'services/services/product' + +export default { + data() { + return { + loading: true + } + }, + methods: { + // 初始化sku 通过skus配置去请求所有的数据 + initLoad() { + this.elements.forEach(item => { + if (item.isLoadData) { + this.getCategoryList(item) + } + }) + }, + // 计费周期改变,重新计算价格 + resetPrices() { + this.elements.forEach(item => { + if (item.isLoadData) { + this.getPrices(item) + } + }) + }, + // 获取商品的sku + getSku(item) { + const { categoryId } = item + this.setNodes(item) + this.loading = true + getSkus( + formatEqParams({ + categoryId + }) + ) + .then(data => { + if (data.success) { + if (!data.data.length) return this.$message.error(`服务【${item.name}】类型下不存在产品,请检查`) + item.skuList = data.data.map(item => { + const spec = JSON.parse(item.spec) + return { + ...item, + spec + } + }) + if (!item.skuId) { + item.skuId = data.data[0].id + } + this.getPrices(item) + } + }) + .finally(() => { + this.loading = false + }) + }, + // 设置nodes数量 + setNodes(item) { + const { main, categoryId, categoryMap } = item + if (!main) return // 不是主sku直接返回 + const { nodes = 1 } = JSON.parse(categoryMap[categoryId].props) || {} + this.addData.nodes = nodes + }, + // 获取价格 + async getPrices(item) { + const { skuId, serviceCode = this.addData.service } = item + this.loading = true + const data = await getPrices( + formatEqParams({ + skuId, + period: 'Hour' + }) + ) + this.loading = false + if (data.success) { + const list = data.data.rows + if (!list.length) return this.$message.error('该产品没有设置价格,请检查') + const { price, discount, amount, id: priceId } = list[0] + item = Object.assign(item, { + price, + discount, + amount, + priceId + }) + } + }, + // 获取服务类型 + getCategoryList(item) { + const { serviceCode } = item + getCategoriesByCode(serviceCode).then(data => { + if (data.success) { + if (!data.data.length) return this.$message.error(`服务【${item.name}】不存在产品类型请检查`) + item.categoryList = data.data + item.categoryMap = this.getCategoryMap(data.data) + if (!item.categoryId) { + item.categoryId = item.categoryList[0].id + } + this.getSku(item) + } + }) + }, + // 生成服务类型map + getCategoryMap(data) { + const map = {} + data.forEach(item => { + const { id, name, remark, props } = item + map[id] = { + name, + remark, + props + } + }) + return map + } + } +} diff --git a/src/views/task/graph/sceneSelect.vue b/src/views/task/graph/sceneSelect.vue new file mode 100644 index 0000000..dc784cf --- /dev/null +++ b/src/views/task/graph/sceneSelect.vue @@ -0,0 +1,58 @@ + + diff --git a/src/views/task/graph/software/NginxPart.vue b/src/views/task/graph/software/NginxPart.vue new file mode 100644 index 0000000..f51cd5d --- /dev/null +++ b/src/views/task/graph/software/NginxPart.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/views/task/graph/software/clusterCoor.ts b/src/views/task/graph/software/clusterCoor.ts new file mode 100644 index 0000000..4a526e5 --- /dev/null +++ b/src/views/task/graph/software/clusterCoor.ts @@ -0,0 +1,29 @@ +// 返回集群节点坐标数据 +export const roleWidth = 130; +export class ClusterCoor { + roleCount = 0 + groupWidth =0 + xOffset = 0 + yOffset = 85 + constructor(roleCount: number) { + this.roleCount = roleCount; + this.groupWidth = roleWidth * roleCount + 15 * (roleCount + 1); + this.xOffset = (this.groupWidth - 180) / 2; + } + + getCoor(index: number) { + const offset = (180 - roleWidth) / 2 + if (index === 0) { + return [-(this.xOffset - 15), this.yOffset]; + } + if (index === this.roleCount - 1) return [(this.groupWidth - this.xOffset - roleWidth - 15), this.yOffset]; + return [offset, this.yOffset] + } + + getPort(index: number) { + if (index === 0) return 3; + if (index === this.roleCount - 1) return 1; + if (index === 1) return 2; + return index + } +} diff --git a/src/views/task/graph/software/components/ActiveMq.vue b/src/views/task/graph/software/components/ActiveMq.vue new file mode 100644 index 0000000..9f1d3e7 --- /dev/null +++ b/src/views/task/graph/software/components/ActiveMq.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/views/task/graph/software/components/ApacheItem.vue b/src/views/task/graph/software/components/ApacheItem.vue new file mode 100644 index 0000000..e3080d3 --- /dev/null +++ b/src/views/task/graph/software/components/ApacheItem.vue @@ -0,0 +1,103 @@ + + + diff --git a/src/views/task/graph/software/components/EtcdItem.vue b/src/views/task/graph/software/components/EtcdItem.vue new file mode 100644 index 0000000..b18fab3 --- /dev/null +++ b/src/views/task/graph/software/components/EtcdItem.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/task/graph/software/components/IscsiClient.vue b/src/views/task/graph/software/components/IscsiClient.vue new file mode 100644 index 0000000..ad46264 --- /dev/null +++ b/src/views/task/graph/software/components/IscsiClient.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/task/graph/software/components/IscsiServer.vue b/src/views/task/graph/software/components/IscsiServer.vue new file mode 100644 index 0000000..067bc33 --- /dev/null +++ b/src/views/task/graph/software/components/IscsiServer.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/views/task/graph/software/components/JdkItem.vue b/src/views/task/graph/software/components/JdkItem.vue new file mode 100644 index 0000000..4a0eeab --- /dev/null +++ b/src/views/task/graph/software/components/JdkItem.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/views/task/graph/software/components/KafkaItem.vue b/src/views/task/graph/software/components/KafkaItem.vue new file mode 100644 index 0000000..d5c2ce8 --- /dev/null +++ b/src/views/task/graph/software/components/KafkaItem.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/views/task/graph/software/components/MemCache.vue b/src/views/task/graph/software/components/MemCache.vue new file mode 100644 index 0000000..697fdf3 --- /dev/null +++ b/src/views/task/graph/software/components/MemCache.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/task/graph/software/components/MongodbItem.vue b/src/views/task/graph/software/components/MongodbItem.vue new file mode 100644 index 0000000..57c034c --- /dev/null +++ b/src/views/task/graph/software/components/MongodbItem.vue @@ -0,0 +1,210 @@ + + + diff --git a/src/views/task/graph/software/components/MysqlItem.vue b/src/views/task/graph/software/components/MysqlItem.vue new file mode 100644 index 0000000..f661885 --- /dev/null +++ b/src/views/task/graph/software/components/MysqlItem.vue @@ -0,0 +1,268 @@ + + + diff --git a/src/views/task/graph/software/components/NfsClient.vue b/src/views/task/graph/software/components/NfsClient.vue new file mode 100644 index 0000000..d306bd0 --- /dev/null +++ b/src/views/task/graph/software/components/NfsClient.vue @@ -0,0 +1,70 @@ + + diff --git a/src/views/task/graph/software/components/NfsServer.vue b/src/views/task/graph/software/components/NfsServer.vue new file mode 100644 index 0000000..35cf167 --- /dev/null +++ b/src/views/task/graph/software/components/NfsServer.vue @@ -0,0 +1,152 @@ + + + diff --git a/src/views/task/graph/software/components/NginxItem.vue b/src/views/task/graph/software/components/NginxItem.vue new file mode 100644 index 0000000..ad11653 --- /dev/null +++ b/src/views/task/graph/software/components/NginxItem.vue @@ -0,0 +1,292 @@ + + + diff --git a/src/views/task/graph/software/components/OracleItem.vue b/src/views/task/graph/software/components/OracleItem.vue new file mode 100644 index 0000000..f7d80bb --- /dev/null +++ b/src/views/task/graph/software/components/OracleItem.vue @@ -0,0 +1,328 @@ + + + diff --git a/src/views/task/graph/software/components/PgSql.vue b/src/views/task/graph/software/components/PgSql.vue new file mode 100644 index 0000000..4932d09 --- /dev/null +++ b/src/views/task/graph/software/components/PgSql.vue @@ -0,0 +1,223 @@ + + + diff --git a/src/views/task/graph/software/components/RabbitMq.vue b/src/views/task/graph/software/components/RabbitMq.vue new file mode 100644 index 0000000..df253d6 --- /dev/null +++ b/src/views/task/graph/software/components/RabbitMq.vue @@ -0,0 +1,235 @@ + + + diff --git a/src/views/task/graph/software/components/RedisItem.vue b/src/views/task/graph/software/components/RedisItem.vue new file mode 100644 index 0000000..4924fbf --- /dev/null +++ b/src/views/task/graph/software/components/RedisItem.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/views/task/graph/software/components/RocketMq.vue b/src/views/task/graph/software/components/RocketMq.vue new file mode 100644 index 0000000..aecbf0f --- /dev/null +++ b/src/views/task/graph/software/components/RocketMq.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/views/task/graph/software/components/SqlServer.vue b/src/views/task/graph/software/components/SqlServer.vue new file mode 100644 index 0000000..00f368d --- /dev/null +++ b/src/views/task/graph/software/components/SqlServer.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/views/task/graph/software/components/TomcatItem.vue b/src/views/task/graph/software/components/TomcatItem.vue new file mode 100644 index 0000000..034b77c --- /dev/null +++ b/src/views/task/graph/software/components/TomcatItem.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/views/task/graph/software/components/WeblogicItem.vue b/src/views/task/graph/software/components/WeblogicItem.vue new file mode 100644 index 0000000..fb7bd36 --- /dev/null +++ b/src/views/task/graph/software/components/WeblogicItem.vue @@ -0,0 +1,90 @@ + + + diff --git a/src/views/task/graph/software/components/WebsphereItem.vue b/src/views/task/graph/software/components/WebsphereItem.vue new file mode 100644 index 0000000..e729864 --- /dev/null +++ b/src/views/task/graph/software/components/WebsphereItem.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/views/task/graph/software/components/ZookeeperItem.vue b/src/views/task/graph/software/components/ZookeeperItem.vue new file mode 100644 index 0000000..8341514 --- /dev/null +++ b/src/views/task/graph/software/components/ZookeeperItem.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/views/task/graph/software/components/index.scss b/src/views/task/graph/software/components/index.scss new file mode 100644 index 0000000..84b1270 --- /dev/null +++ b/src/views/task/graph/software/components/index.scss @@ -0,0 +1,15 @@ +.title{ + border-left: 2px solid #1890ff; + padding-left: 5px; + margin-bottom: 15px; +} +.line{ + height: 1px; + background: #eee; + margin-bottom: 10px; +} +.del_operate{ + position: absolute; + top: -16px; + right: 5px; +} diff --git a/src/views/task/graph/software/components/index.ts b/src/views/task/graph/software/components/index.ts new file mode 100644 index 0000000..ded51cc --- /dev/null +++ b/src/views/task/graph/software/components/index.ts @@ -0,0 +1,21 @@ +import { upperFirst } from 'lodash-es'; +import { getModules } from 'utils/autoImport' + +const codeMap = new Map([ + ['task.software.iscsi', 'IscsiServer'], + ['task.software.memcache', 'MemCache'], + ['task.software.rocketmq', 'RocketMq'], + ['task.software.sqlserver', 'SqlServer'], + ['task.software.postgresql', 'PgSql'], + ['task.software.rabbitmq', 'RabbitMq'], + ['task.software.activemq', 'ActiveMq'] +]) +// const vueFiles = require.context('./', true, /\.vue$/); +const vueFiles = (import.meta as any).globEager('./*.vue'); +export const components = getModules(vueFiles); + +// 优先在map里取值, 组件命名规范 task.software.nginx => NginxItem task.software.iscsi.client=>IscsiClient +export function getCurrentComponent(code: string) { + const [f, s = 'Item'] = code.split('task.software.')[1].split('.') + return codeMap.get(code) || `${upperFirst(f)}${upperFirst(s)}` +} diff --git a/src/views/task/graph/software/data.ts b/src/views/task/graph/software/data.ts new file mode 100644 index 0000000..2b8ef5a --- /dev/null +++ b/src/views/task/graph/software/data.ts @@ -0,0 +1,42 @@ +export const clusterTypeList = [{ + name: '主从模式(一主一从)', + value: 'msv' +}, { + name: '主备模式(一主一从)', + value: 'msb' +}, { + name: 'MHA模式(一主两从)', + value: 'mha' +}, { + name: 'MGR单主(一主两从)', + value: 'mgr.single' +}, { + name: 'MGR多主(三|五|七)', + value: 'mgr.multi' +}]; +export const redisClusterTypeList = [{ + name: '一主两从', + value: 'omts' +}, { + name: '一主两从三哨兵', + value: 'omtsts' +}, { + name: '三主三从', + value: 'tmts' +}]; +const translateArrToMap = (list: any[]) => { + const map: any = {}; + list.forEach(item => { + const { name, value } = item; + map[value] = name; + }); + return map; +} +export const clusterModeTypeMap = translateArrToMap([...clusterTypeList, ...redisClusterTypeList]) + +export const clusterTypeMap = { + 'task.software.mongodb': '一主两从一仲裁', + 'task.software.memcache': '一主一备一代理', + 'task.software.rocketmq': '两主两从一服务', + 'task.software.iscsi': '' +} diff --git a/src/views/task/graph/software/defaultParamDialog.vue b/src/views/task/graph/software/defaultParamDialog.vue new file mode 100644 index 0000000..4422622 --- /dev/null +++ b/src/views/task/graph/software/defaultParamDialog.vue @@ -0,0 +1,179 @@ + + + diff --git a/src/views/task/graph/software/index.vue b/src/views/task/graph/software/index.vue new file mode 100644 index 0000000..009836c --- /dev/null +++ b/src/views/task/graph/software/index.vue @@ -0,0 +1,240 @@ + + + diff --git a/src/views/task/graph/software/mixins/itemOperate.js b/src/views/task/graph/software/mixins/itemOperate.js new file mode 100644 index 0000000..d2e2151 --- /dev/null +++ b/src/views/task/graph/software/mixins/itemOperate.js @@ -0,0 +1,16 @@ +export default { + methods: { + addItem (row, value) { + let data = {}; + if (value !== undefined) data = value; + row.push(data); + }, + removeItem (data, index, required) { + if (required && data.length === 1) { + this.$message.error('至少存在一个该节点'); + return; + } + data.splice(index, 1); + } + } +} diff --git a/src/views/task/graph/software/moduleItemDetail.vue b/src/views/task/graph/software/moduleItemDetail.vue new file mode 100644 index 0000000..e3f0793 --- /dev/null +++ b/src/views/task/graph/software/moduleItemDetail.vue @@ -0,0 +1,156 @@ +/** +* Created by Zhang Haijun on 2018/1/11. +*/ + + + diff --git a/src/views/task/graph/software/moduleTools.js b/src/views/task/graph/software/moduleTools.js new file mode 100644 index 0000000..4f9460b --- /dev/null +++ b/src/views/task/graph/software/moduleTools.js @@ -0,0 +1,52 @@ +/** + * Created by Zhang Haijun on 2017/12/8. + */ +import { Message } from 'element-ui' +// 验证字段长度 +export const validateLength = function (data) { + if (data.length) data.length = parseInt(Math.abs(data.length)) + else data.length = 100 +} +// 添加值 +export const addItem = function (data) { + data.push({}) +} +// 删除某组件的item值 +export const removeItem = function (index, data) { + if (data.length == 1) return Message({ message: '值不能少于一项', type: 'warning' }) + data.splice(index, 1) +} +// 对最大值和最小值进行验证 +export const validateValue = function (flag, data) { + if (flag === 1 && data.minValue) { + data.minValue = parseInt(Math.abs(data.minValue)) + } else if (data.maxValue) { + data.maxValue = parseInt(Math.abs(data.maxValue)) + } + if (data.minValue && data.maxValue && data.minValue > data.maxValue) { + const sum = data.minValue / 1 + data.maxValue / 1 + data.minValue = sum - data.minValue + data.maxValue = sum - data.minValue + } +} +// 选中item +export const togglePopover = function (item) { + item.selected = !item.selected +} +// 对表格的操作 +export const handleOperate = function (command) { + switch (command.flag) { + case 1: + command.item.splice(command.index + 1, 0, {}) + break + case 2: + command.item.splice(command.index, 1) + break + case 3: + command.item.push({}) + break + } +} +export const showPassword = function (data) { + data.showType = data.showType == 'password' ? 'text' : 'password' +} diff --git a/src/views/task/graph/software/tools.js b/src/views/task/graph/software/tools.js new file mode 100644 index 0000000..8723688 --- /dev/null +++ b/src/views/task/graph/software/tools.js @@ -0,0 +1,128 @@ +/** + * Created by HaijunZhang on 2019/1/4. + */ +// 软件安装集群数据重组 +export function handleGroupData(graph, node) { + const groupNode = graph.getCellById(node.config.parent) + const nodes = groupNode.getChildren().filter(item => item.isNode()) + const groups = [] + let hosts = [] + const target = { + authenMode: 'SINGLE', + sudo: true, + data: [] + } + const depend = { + type: 'host', + data: [] + } + // 分组内节点 + nodes.forEach(item => { + const model = item.getData() + if (model.ignore) { + const { input: { depend: dependData = { data: [] }, target: targetData = { data: [] } } = {} } = model + const obj = { + name: model.role, + hosts: [] + } + dependData.data.forEach(item => { + obj.hosts.push({ host: item }) + }) + targetData.data.forEach(item => { + obj.hosts.push({ host: item.host }) + }) + hosts = hosts.concat(obj.hosts) + groups.push(obj) + depend.data = depend.data.concat(dependData.data) + target.data = target.data.concat(targetData.data) + } + }) + if (node.code === 'task.software.mysql') { + // mysql特殊处理 + groups.push({ + name: 'mysql', + hosts: hosts + }) + } + node.input.fronts.groups = groups + node.input = { + ...node.input, + target, + depend + } +} +// 初始化数据处理 +export function handleArrAttribute(arr, self) { + arr.forEach(attr => { + if (!self.itemData[attr]) { + self.$set(self.itemData, attr, []) + } + }) +} +// oracle特殊化数据处理 +export function handleOracleData(node) { + const { + input: { + depend = { data: [] }, + target = { data: [] }, + fronts, + fronts: { manage_config } + } + } = node + const middleStr = fronts.cluster_install ? 'rac' : 'si' + const name = `oracle-${middleStr}` + manage_config.hostgroup = name + // 版本号去掉. + base + manage_config.install_name = `${fronts.version.split('.').join('')}-base` + if (fronts.cluster_install) manage_config.cluster_master = `${middleStr}1` + const groups = { + name: name, + hosts: [] + } + let i = 1 + depend.data.forEach(item => { + groups.hosts.push({ host: item, vars: { alias: `${middleStr}${i}` } }) + i++ + }) + target.data.forEach(item => { + groups.hosts.push({ host: item.host, vars: { alias: `${middleStr}${i}` } }) + i++ + }) + fronts.groups = [groups] +} +// groups特殊化数据处理 +export function handleSingleGroups(node) { + const { + input: { depend = { data: [] }, target = { data: [] }, fronts }, + code + } = node + const nameMap = { + 'task.software.kafka': 'kafka', + 'task.software.postgresql': 'postgres_cluster', + 'task.software.nfs.server': 'nfs_server', + 'task.software.nfs.client': 'nfs_client', + 'task.software.zookeeper': 'zookeeper', + 'task.software.mongodb': 'mongo_master', + 'task.software.mysql': 'mysql_master', + 'task.software.iscsi.server': 'iscsi_server', + 'task.software.iscsi.client': 'iscsi_client' + } + const groups = { + name: nameMap[code], + hosts: [] + } + depend.data.forEach(item => { + groups.hosts.push({ host: item }) + }) + target.data.forEach(item => { + groups.hosts.push({ host: item.host }) + }) + fronts.groups = [groups]; + // mysql特殊处理 + if (code === 'task.software.mysql') { + fronts.groups.push({ + name: 'mysql', + hosts: groups.hosts + }) + } +} diff --git a/src/views/task/graph/targetServer/SelectServer.vue b/src/views/task/graph/targetServer/SelectServer.vue new file mode 100644 index 0000000..264ce18 --- /dev/null +++ b/src/views/task/graph/targetServer/SelectServer.vue @@ -0,0 +1,271 @@ +/** * Created by Zhang Haijun on 2017/9/5. */ + + + + diff --git a/src/views/task/graph/targetServer/TargetServer.vue b/src/views/task/graph/targetServer/TargetServer.vue new file mode 100644 index 0000000..e69a0aa --- /dev/null +++ b/src/views/task/graph/targetServer/TargetServer.vue @@ -0,0 +1,120 @@ + + diff --git a/src/views/task/graph/targetServer/relationServer.vue b/src/views/task/graph/targetServer/relationServer.vue new file mode 100644 index 0000000..ec9422d --- /dev/null +++ b/src/views/task/graph/targetServer/relationServer.vue @@ -0,0 +1,115 @@ +/** +* Created by Zhang Haijun on 2017/9/5. +*/ + + + diff --git a/src/views/task/graph/targetServer/selectServerConfig.ts b/src/views/task/graph/targetServer/selectServerConfig.ts new file mode 100644 index 0000000..ae29668 --- /dev/null +++ b/src/views/task/graph/targetServer/selectServerConfig.ts @@ -0,0 +1,43 @@ +import { getCloudVendor } from 'services/platform/index' + +export const columns = [ + { + type: 'selection', + width: 60, + selectable(row: any) { + const { segmentId, ip, status, osCategory } = row + // 没有 ip,没有网络分组、非运行状态不能选择 + if (!ip || !segmentId || status !== 'RUNNING' || osCategory.toUpperCase() === 'AIX' || osCategory === 'VMware ESXi') return false + else return true + } + }, + { label: '主机名', prop: 'name' }, + { label: 'IP', prop: 'ip' }, + { label: '状态', prop: 'status', scopedSlots: { customRender: 'status' } }, + { + label: '主机类型', + prop: 'category', + customRender(val: string) { + return val === 'LOGICAL' ? '虚拟机' : '物理机' + } + }, + { label: '平台名称', prop: 'vendorName' }, + { label: '系统类别', prop: 'osCategory' } +] + +export const searchConfigs = [ + { + label: '所属平台', + value: 'vendorId', + type: 'Select', + service: { + api: getCloudVendor, + params: { simple: true }, + attr: 'data.rows' + } + }, + { label: 'IP地址', value: 'ip', type: 'Input' }, + { label: '主机名', value: 'name', type: 'Input' }, + { value: 'catalog', type: 'Const', initValue: 'Computer' }, + { value: 'osCategory', type: 'Const', initValue: '' } +] diff --git a/src/views/task/graph/tools.ts b/src/views/task/graph/tools.ts new file mode 100644 index 0000000..bc3029e --- /dev/null +++ b/src/views/task/graph/tools.ts @@ -0,0 +1,49 @@ +export function handleReadData(data: any, configStatus: string) { + const { groups = [], edges = [] } = data; + const graph: { nodes: any[], groups: any[], edges: any[] } = { + nodes: [], + groups: groups.map((item:any) => ({ shape: 'groupNode', ...item })), + edges: edges.map((item:any) => { + const { dicision, ignore, ...others } = item + return { + ...others, + data: { + dicision, + ignore + } + } + }) + } + for (const node of data.nodes) { + const { id: nodeId, name: label, code, input, control, status = configStatus, config: { id, icon, ignore, role, nodeType, mainNode, pid, ...other } } = node + const obj = { + size: { + width: ignore ? 120 : 180, + height: 40 + }, + ...other, + id, + data: { + mainNode, + control, + status, + label, + nodeType, + code, + icon, + ignore, + role, + pid, + id, + nodeId + } + } + // fronts有值时进行赋值 + if (input && Object.keys(input?.fronts).length !== 0) { + obj.data.input = input; + } + graph.nodes.push(obj) + } + console.log(graph) + return graph +} diff --git a/src/views/task/list.vue b/src/views/task/list.vue new file mode 100644 index 0000000..552d02a --- /dev/null +++ b/src/views/task/list.vue @@ -0,0 +1,304 @@ + + + + diff --git a/src/views/tpl/addDialog.vue b/src/views/tpl/addDialog.vue new file mode 100644 index 0000000..bad056e --- /dev/null +++ b/src/views/tpl/addDialog.vue @@ -0,0 +1,71 @@ + + diff --git a/src/views/tpl/index.vue b/src/views/tpl/index.vue new file mode 100644 index 0000000..3e25353 --- /dev/null +++ b/src/views/tpl/index.vue @@ -0,0 +1,148 @@ + + + + diff --git a/src/views/tpl/list.vue b/src/views/tpl/list.vue new file mode 100644 index 0000000..34f57ba --- /dev/null +++ b/src/views/tpl/list.vue @@ -0,0 +1,211 @@ + + + diff --git a/src/views/tpl/sceneMixins.js b/src/views/tpl/sceneMixins.js new file mode 100644 index 0000000..8624338 --- /dev/null +++ b/src/views/tpl/sceneMixins.js @@ -0,0 +1,31 @@ +import { getScene } from 'services/task/task' + +export default { + created() { + this.getSceneData() + }, + methods: { + getSceneData() { + const sceneList = [ + { id: 1, name: '内置场景', data: [] }, + { id: 2, name: '自定义场景', data: [] } + ] + getScene({ + page: 1, + rows: 10000 + }).then(data => { + if (data.success) { + const arr = data.data.rows + arr.forEach(item => { + let index = 0 + if (!item.internal) { + index = 1 + } + sceneList[index].data.push(item) + }) + this.searchConfigs[1].data = sceneList + } + }) + } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c1f5725 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "sourceMap": true, + "allowJs": true, + "baseUrl": ".", + "types": ["webpack-env"], + // "typeRoots": ["./node_modules/@types/", "./types"], + "paths": { + "@/*": ["src/*"], + "services/*": ["src/services/*"], + "utils/*": ["src/common/utils/*"], + "components/*": ["src/common/components/*"], + "hooks/*": ["src/common/hooks/*"], + "filters/*": ["src/common/filters/*"] + }, + "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "tests/**/*.ts", "tests/**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..d383da5 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,181 @@ +/** + * Created by Zhang Haijun on 2018/7/24. + */ +const path = require('path') +const { name } = require('./package') +const webpack = require('webpack') +const CompressPlugin = require('compress-webpack-plugin') +// const Components = require('unplugin-vue-components/webpack') +// const AutoImport = require('unplugin-auto-import/webpack') +// const { ElementUiResolver } = require('unplugin-vue-components/resolvers') + +function resolve(dir) { + return path.join(__dirname, dir) +} +const httpType = 'https://' +// const proxyUrl = 'develop.cmp56.com:60006/' // 代理地址设置 +const proxyUrl = '10.20.12.56:60006/' // 代理地址设置 +// const publicPath = process.env.NODE_ENV === 'production' ? '/cop-web/' : '/cop-web/'; +const publicPath = '/cop-web/' +module.exports = { + publicPath, + assetsDir: 'static', + outputDir: 'cop-web', + // 构建时不进行eslint校验 + lintOnSave: process.env.NODE_ENV !== 'production', + // 生产环境禁止source map + productionSourceMap: false, + runtimeCompiler: true, + devServer: { + // https: true, + headers: { + 'Access-Control-Allow-Origin': '*' + }, + port: 8082, + overlay: { + warnings: true, + errors: true + }, + proxy: { + '/api/sms/messageService': { + target: 'ws://' + proxyUrl, + changeOrigin: true, + ws: false + }, + '/api': { + target: httpType + proxyUrl, + changeOrigin: true, + secure: false + }, + '/captcha': { + target: httpType + proxyUrl + }, + '/config-files': { + target: httpType + proxyUrl + }, + '/web-common-resource': { + target: httpType + proxyUrl + } + } + }, + css: { + loaderOptions: { + sass: { + prependData: '@import "@/common/css/common-var.scss";' + } + } + }, + configureWebpack: config => { + const plugins = [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery' + }) + // new webpack.DllReferencePlugin({ + // context: process.cwd(), + // manifest: require('./public/vendor/vendor-manifest.json') + // }) + // AutoImport({ + // resolvers: [ElementUiResolver()] + // }), + // Components({ + // resolvers: [ElementUiResolver()] + // }) + ] + if (process.env.NODE_ENV === 'production') { + plugins.push( + new CompressPlugin({ + test: /\.js$|\.html$|\.css$/, + threshold: 10240, + deleteOriginalAssets: false + }) + ) + } + return { + plugins, + output: { + // 把子应用打包成 umd 库格式 + library: `${name}-[name]`, + libraryTarget: 'umd', + jsonpFunction: `webpackJsonp_${name}` + } + } + }, + chainWebpack: config => { + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/icons')) + .end() + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + config.resolve.alias + .set('@', resolve('src')) + .set('assets', resolve('src/assets')) + .set('services', resolve('src/services')) + .set('utils', resolve('src/common/utils')) + .set('interface', resolve('src/common/interface')) + .set('components', resolve('src/common/components')) + .set('hooks', resolve('src/common/hooks')) + .set('filters', resolve('src/filters')) + .set('views', resolve('src/views')) + .set('task', resolve('src/views/task')) + .set('CodeMirror', 'codemirror') + .set('jQuery', 'jquery') + config.module + .rule('fonts') + .use('url-loader') + .loader('url-loader') + .options({ + limit: 4096, // 小于4kb将会被打包成 base64 + fallback: { + loader: 'file-loader', + options: { + name: 'fonts/[name].[ext]', + publicPath: '/web-common-resource' + } + } + }) + .end() + + config.when(process.env.NODE_ENV !== 'development', config => { + config.optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + common: { + name: 'chunk-common', + minChunks: 3, + priority: 0, + chunks: 'initial', + reuseExistingChunk: true + }, + vendors: { + name: 'chunk-vendors', + test: /[\\/]node_modules[\\/]/, + priority: 1, + chunks: 'initial' // only package third parties that are initially dependent + }, + // elementUI: { + // name: 'chunk-element-ui', // split elementUI into a single package + // priority: 2, // the weight needs to be larger than libs and app or it will be packaged into libs or app + // test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + // }, + graphEditor: { + name: 'chunk-graph-editor', + priority: 2, + test: /[\\/]node_modules[\\/]_?cmp-graph-editor(.*)/ + } + } + }) + }) + } +}