commit 3792acd4c7d734e7fd01281d37d1d394d2d6825d Author: make Date: Sun Apr 6 21:51:01 2025 +0800 first diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..765263e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# @see: http://editorconfig.org + +root = true + +[*] # 表示所有文件适用 +charset = utf-8 # 设置文件字符集为 utf-8 +end_of_line = lf # 控制换行类型(lf | cr | crlf) +insert_final_newline = true # 始终在文件末尾插入一个新行 +indent_style = space # 缩进风格(tab | space) +indent_size = 4 # 缩进大小 +max_line_length = 130 # 最大行长度 + +[*.md] # 表示仅对 md 文件适用以下规则 +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/.env.development.example b/.env.development.example new file mode 100644 index 0000000..be787a2 --- /dev/null +++ b/.env.development.example @@ -0,0 +1,18 @@ +#本地环境 +VITE_USER_NODE_ENV=development +#公共基础路径 +VITE_PUBLIC_PATH=/ +#路由模式 +#Optional:hash|history +VITE_ROUTER_MODE=hash +#打包时是否删除console +VITE_DROP_CONSOLE=true +#是否开启VitePWA +VITE_PWA=false +#开发环境接口地址 +VITE_API_URL=/api +#以下部署需要改动的---- +#开发环境跨域代理,支持配置多个 +VITE_PROXY=[["/api","https://api.123.com"]] +#当前项目网址 +VITE_URL=https://api.123.com diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..2cdc59b --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +#title +VITE_GLOB_APP_TITLE=**管理系统 +#本地运行端口号 +VITE_PORT=7777 +#启动时自动打开浏览器 +VITE_OPEN=true +#打包后是否生成包分析文件 +VITE_REPORT=false diff --git a/.env.production.example b/.env.production.example new file mode 100644 index 0000000..9462cae --- /dev/null +++ b/.env.production.example @@ -0,0 +1,23 @@ +#线上环境 +VITE_USER_NODE_ENV=production +#公共基础路径 +VITE_PUBLIC_PATH=./ +#路由模式 +#Optional:hash|history +VITE_ROUTER_MODE=hash +#是否启用gzip或brotli压缩打包,如果需要多个压缩规则,可以使用“,”分隔 +#Optional:gzip|brotli|none +VITE_BUILD_COMPRESS=none +#打包压缩后是否删除源文件 +VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE=false +#打包时是否删除console +VITE_DROP_CONSOLE=true +#是否开启VitePWA +VITE_PWA=true +#打包输出目录 +VITE_OUT_PATH=dist +#以下部署需要改动的---- +#开发环境跨域代理,支持配置多个 +VITE_API_URL=https://api.123.live +#当前项目网址 +VITE_URL=https://api.123.com/ diff --git a/.env.test.example b/.env.test.example new file mode 100644 index 0000000..f9808ec --- /dev/null +++ b/.env.test.example @@ -0,0 +1,23 @@ +#测试环境 +VITE_USER_NODE_ENV=test +#公共基础路径 +VITE_PUBLIC_PATH=./ +#路由模式 +#Optional:hash|history +VITE_ROUTER_MODE=hash +#是否启用gzip或brotli压缩打包,如果需要多个压缩规则,可以使用“,”分隔 +#Optional:gzip|brotli|none +VITE_BUILD_COMPRESS=none +#打包压缩后是否删除源文件 +VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE=false +#打包时是否删除console +VITE_DROP_CONSOLE=true +#是否开启VitePWA +VITE_PWA=false +#打包输出目录 +VITE_OUT_PATH=test +#以下部署需要改动的---- +#测试环境接口地址 +VITE_API_URL=https://api.123.live +#当前项目网址 +VITE_URL=https://api.123.com/ diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..a4c017a --- /dev/null +++ b/.eslintignore @@ -0,0 +1,16 @@ +*.sh +node_modules +*.md +*.woff +*.ttf +.vscode +.idea +dist +/public +/docs +.husky +.local +/bin +/src/mock/* +stats.html +* diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..de89e65 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,68 @@ +// @see: http://eslint.cn + +module.exports = { + root: true, + env: { + browser: true, + node: true, + es6: true + }, + // 指定如何解析语法 + parser: "vue-eslint-parser", + // 优先级低于 parse 的语法解析配置 + parserOptions: { + parser: "@typescript-eslint/parser", + ecmaVersion: 2020, + sourceType: "module", + jsxPragma: "React", + ecmaFeatures: { + jsx: true + } + }, + // 继承某些已有的规则 + extends: ["plugin:vue/vue3-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"], + /** + * "off" 或 0 ==> 关闭规则 + * "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行) + * "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错) + */ + rules: { + // eslint (http://eslint.cn/docs/rules) + "no-var": "error", // 要求使用 let 或 const 而不是 var + "no-multiple-empty-lines": ["error", { max: 1 }], // 不允许多个空行 + "prefer-const": "off", // 使用 let 关键字声明但在初始分配后从未重新分配的变量,要求使用 const + "no-use-before-define": "off", // 禁止在 函数/类/变量 定义之前使用它们 + + // typeScript (https://typescript-eslint.io/rules) + "@typescript-eslint/no-unused-vars": "error", // 禁止定义未使用的变量 + "@typescript-eslint/prefer-ts-expect-error": "error", // 禁止使用 @ts-ignore + "@typescript-eslint/ban-ts-comment": "error", // 禁止 @ts- 使用注释或要求在指令后进行描述 + "@typescript-eslint/no-inferrable-types": "off", // 可以轻松推断的显式类型可能会增加不必要的冗长 + "@typescript-eslint/no-namespace": "off", // 禁止使用自定义 TypeScript 模块和命名空间 + "@typescript-eslint/no-explicit-any": "off", // 禁止使用 any 类型 + "@typescript-eslint/ban-types": "off", // 禁止使用特定类型 + "@typescript-eslint/no-var-requires": "off", // 允许使用 require() 函数导入模块 + "@typescript-eslint/no-empty-function": "off", // 禁止空函数 + "@typescript-eslint/no-non-null-assertion": "off", // 不允许使用后缀运算符的非空断言(!) + + // vue (https://eslint.vuejs.org/rules) + "vue/script-setup-uses-vars": "error", // 防止 + + + diff --git a/lint-staged.config.cjs b/lint-staged.config.cjs new file mode 100644 index 0000000..9aab8b6 --- /dev/null +++ b/lint-staged.config.cjs @@ -0,0 +1,8 @@ +module.exports = { + "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"], + "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"], + "package.json": ["prettier --write"], + "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"], + "*.{scss,less,styl,html}": ["stylelint --fix", "prettier --write"], + "*.md": ["prettier --write"] +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..de1f31b --- /dev/null +++ b/package.json @@ -0,0 +1,124 @@ +{ + "name": "geeker-admin", + "private": true, + "version": "1.2.0", + "type": "module", + "description": "geeker-admin open source management system", + "author": { + "name": "Geeker", + "email": "848130454@qq.com", + "url": "https://github.com/HalseySpicy" + }, + "license": "MIT", + "homepage": "https://github.com/HalseySpicy/Geeker-Admin", + "repository": { + "type": "git", + "url": "git@github.com:HalseySpicy/Geeker-Admin.git" + }, + "bugs": { + "url": "https://github.com/HalseySpicy/Geeker-Admin/issues" + }, + "scripts": { + "dev": "vite", + "serve": "vite", + "build": "vite build", + "build:dev": " vite build --mode development", + "build:test": "vite build --mode test", + "build:pro": "vite build --mode production", + "type:check": "vue-tsc --noEmit --skipLibCheck", + "preview": "npm run build:dev && vite preview", + "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", + "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", + "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", + "lint:lint-staged": "lint-staged", + "prepare": "husky install", + "release": "standard-version", + "commit": "git add -A && czg && git push" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@vueuse/core": "^10.4.1", + "axios": "^1.5.0", + "dayjs": "^1.11.9", + "dplayer": "^1.27.1", + "echarts": "^5.4.0", + "echarts-liquidfill": "^3.1.0", + "element-plus": "^2.7.7", + "hls.js": "^1.5.7", + "md5": "^2.3.0", + "mitt": "^3.0.1", + "nprogress": "^0.2.0", + "pinia": "^2.1.6", + "pinia-plugin-persistedstate": "^3.2.0", + "print-js": "^1.6.0", + "qrcode": "^1.5.3", + "qs": "^6.11.2", + "screenfull": "^6.0.2", + "sortablejs": "^1.15.0", + "typescript": "^5.1.6", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@commitlint/cli": "^17.7.1", + "@commitlint/config-conventional": "^17.7.0", + "@types/md5": "^2.3.2", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.8", + "@types/sortablejs": "^1.15.2", + "@typescript-eslint/eslint-plugin": "^7.11.0", + "@typescript-eslint/parser": "^7.11.0", + "@vitejs/plugin-vue": "^4.3.4", + "@vitejs/plugin-vue-jsx": "^3.0.2", + "autoprefixer": "^10.4.15", + "cz-git": "^1.7.1", + "czg": "^1.7.1", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-vue": "^9.17.0", + "husky": "^8.0.3", + "lint-staged": "^14.0.1", + "postcss": "^8.4.29", + "postcss-html": "^1.5.0", + "prettier": "^3.1.0", + "rollup-plugin-visualizer": "^5.9.2", + "sass": "^1.66.1", + "standard-version": "^9.5.0", + "stylelint": "^15.10.3", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.3.0", + "stylelint-config-recommended-scss": "^13.0.0", + "stylelint-config-recommended-vue": "^1.5.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-config-standard-scss": "^11.0.0", + "unplugin-vue-setup-extend-plus": "^1.0.0", + "vite": "^4.4.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.16.5", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.8.11" + }, + "engines": { + "node": ">=16.0.0" + }, + "browserslist": { + "production": [ + "> 1%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..488b9a8 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,8440 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@element-plus/icons-vue': + specifier: ^2.1.0 + version: 2.1.0(vue@3.3.4) + '@vueuse/core': + specifier: ^10.4.1 + version: 10.4.1(vue@3.3.4) + axios: + specifier: ^1.5.0 + version: 1.5.0 + dayjs: + specifier: ^1.11.9 + version: 1.11.9 + element-plus: + specifier: ^2.3.4 + version: 2.3.4(vue@3.3.4) + md5: + specifier: ^2.3.0 + version: 2.3.0 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + pinia: + specifier: ^2.1.6 + version: 2.1.6(typescript@5.1.6)(vue@3.3.4) + pinia-plugin-persistedstate: + specifier: ^3.2.0 + version: 3.2.0(pinia@2.1.6) + print-js: + specifier: ^1.6.0 + version: 1.6.0 + qs: + specifier: ^6.11.2 + version: 6.11.2 + screenfull: + specifier: ^6.0.2 + version: 6.0.2 + sortablejs: + specifier: ^1.15.0 + version: 1.15.0 + vue: + specifier: ^3.3.4 + version: 3.3.4 + vue-router: + specifier: ^4.2.4 + version: 4.2.4(vue@3.3.4) + +devDependencies: + '@commitlint/cli': + specifier: ^17.7.1 + version: 17.7.1 + '@commitlint/config-conventional': + specifier: ^17.7.0 + version: 17.7.0 + '@types/md5': + specifier: ^2.3.2 + version: 2.3.2 + '@types/nprogress': + specifier: ^0.2.0 + version: 0.2.0 + '@types/qs': + specifier: ^6.9.8 + version: 6.9.8 + '@types/sortablejs': + specifier: ^1.15.2 + version: 1.15.2 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.0 + version: 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: ^6.7.0 + version: 6.7.0(eslint@8.49.0)(typescript@5.1.6) + '@vitejs/plugin-vue': + specifier: ^4.3.4 + version: 4.3.4(vite@4.4.9)(vue@3.3.4) + '@vitejs/plugin-vue-jsx': + specifier: ^3.0.2 + version: 3.0.2(vite@4.4.9)(vue@3.3.4) + autoprefixer: + specifier: ^10.4.15 + version: 10.4.15(postcss@8.4.29) + cz-git: + specifier: ^1.7.1 + version: 1.7.1 + czg: + specifier: ^1.7.1 + version: 1.7.1 + eslint: + specifier: ^8.49.0 + version: 8.49.0 + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.0.0(eslint@8.49.0) + eslint-plugin-prettier: + specifier: ^5.0.0 + version: 5.0.0(eslint-config-prettier@9.0.0)(eslint@8.49.0)(prettier@3.0.3) + eslint-plugin-vue: + specifier: ^9.17.0 + version: 9.17.0(eslint@8.49.0) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^14.0.1 + version: 14.0.1 + postcss: + specifier: ^8.4.29 + version: 8.4.29 + postcss-html: + specifier: ^1.5.0 + version: 1.5.0 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + rollup-plugin-visualizer: + specifier: ^5.9.2 + version: 5.9.2(rollup@2.79.1) + sass: + specifier: ^1.66.1 + version: 1.66.1 + standard-version: + specifier: ^9.5.0 + version: 9.5.0 + stylelint: + specifier: ^15.10.3 + version: 15.10.3 + stylelint-config-html: + specifier: ^1.1.0 + version: 1.1.0(postcss-html@1.5.0)(stylelint@15.10.3) + stylelint-config-recess-order: + specifier: ^4.3.0 + version: 4.3.0(stylelint@15.10.3) + stylelint-config-recommended-scss: + specifier: ^13.0.0 + version: 13.0.0(postcss@8.4.29)(stylelint@15.10.3) + stylelint-config-recommended-vue: + specifier: ^1.5.0 + version: 1.5.0(postcss-html@1.5.0)(stylelint@15.10.3) + stylelint-config-standard: + specifier: ^34.0.0 + version: 34.0.0(stylelint@15.10.3) + stylelint-config-standard-scss: + specifier: ^11.0.0 + version: 11.0.0(postcss@8.4.29)(stylelint@15.10.3) + typescript: + specifier: ^5.1.6 + version: 5.1.6 + unplugin-vue-setup-extend-plus: + specifier: ^1.0.0 + version: 1.0.0 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@4.4.9) + vite-plugin-eslint: + specifier: ^1.8.1 + version: 1.8.1(eslint@8.49.0)(vite@4.4.9) + vite-plugin-html: + specifier: ^3.2.0 + version: 3.2.0(vite@4.4.9) + vite-plugin-pwa: + specifier: ^0.16.5 + version: 0.16.5(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0) + vite-plugin-svg-icons: + specifier: ^2.0.1 + version: 2.0.1(vite@4.4.9) + vue-tsc: + specifier: ^1.8.11 + version: 1.8.11(typescript@5.1.6) + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping@2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + + /@babel/code-frame@7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.13 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.19: + resolution: {integrity: sha512-Q8Yj5X4LHVYTbLCKVz0//2D2aDmHF4xzCdEttYvKOnWvErGsa6geHXD6w46x64n5tP69VfeH+IfSrdyH3MLhwA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.22.19(@babel/core@7.22.19) + '@babel/helpers': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.19 + '@babel/types': 7.22.19 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.15: + resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: + resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.19): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.19) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.21.8(@babel/core@7.22.19): + resolution: {integrity: sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.22.19): + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-member-expression-to-functions@7.22.15: + resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-module-transforms@7.22.19(@babel/core@7.22.19): + resolution: {integrity: sha512-m6h1cJvn+OJ+R3jOHp30faq5xKJ7VbjwDj5RGgHuRlU9hrMeKsGC+JpihkR5w1g7IfseCPPtZ0r7/hB4UKaYlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.19 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.22.19 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.19): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.19: + resolution: {integrity: sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.20.5: + resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.19 + '@babel/types': 7.22.19 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers@7.22.15: + resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.19 + '@babel/types': 7.22.19 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.19 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.21.3: + resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types@7.21.5 + dev: true + + /@babel/parser@7.22.16: + resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.19 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.19) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.22.19): + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.19 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.19): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.22.19): + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.19) + dev: true + + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.19): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.19): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.19): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.22.19): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.19): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.19): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.19): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.19): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.19): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.19): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.19): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.19): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.19) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.19): + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.22.19): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.19) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: true + + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.19): + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.22.19): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-transforms': 7.22.19(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-transforms': 7.22.19(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.22.19): + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.19(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.19 + dev: true + + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-transforms': 7.22.19(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.22.19): + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.19) + dev: true + + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.22.19): + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.22.19): + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.19): + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.19): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.19) + dev: true + + /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.19): + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.22.19) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.21.5(@babel/core@7.22.19): + resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.19 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.22.19) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.19) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.22.19) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.19) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.19) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.19) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.19) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.19) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.19) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.19) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.19) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.19) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.19) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.19) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.19) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.19) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.19) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.19) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.19) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.19) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.19) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.19) + '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.22.19) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.19) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.19) + '@babel/types': 7.22.19 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.19) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.19) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.19) + core-js-compat: 3.30.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.22.19): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.19) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.19) + '@babel/types': 7.22.19 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.19 + dev: true + + /@babel/traverse@7.22.19: + resolution: {integrity: sha512-ZCcpVPK64krfdScRbpxF6xA5fz7IOsfMwx1tcACvCzt6JY+0aHkBk7eIU8FRDSZRU5Zei6Z4JfgAxN1bqXGECg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.15 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.19 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.22.19: + resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.19 + to-fast-properties: 2.0.0 + dev: true + + /@commitlint/cli@17.7.1: + resolution: {integrity: sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==} + engines: {node: '>=v14'} + hasBin: true + dependencies: + '@commitlint/format': 17.4.4 + '@commitlint/lint': 17.7.0 + '@commitlint/load': 17.7.1 + '@commitlint/read': 17.5.1 + '@commitlint/types': 17.4.4 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/config-conventional@17.7.0: + resolution: {integrity: sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==} + engines: {node: '>=v14'} + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + dev: true + + /@commitlint/config-validator@17.6.7: + resolution: {integrity: sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + ajv: 8.12.0 + dev: true + + /@commitlint/ensure@17.6.7: + resolution: {integrity: sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + dev: true + + /@commitlint/execute-rule@17.4.0: + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/format@17.4.4: + resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + chalk: 4.1.2 + dev: true + + /@commitlint/is-ignored@17.7.0: + resolution: {integrity: sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + semver: 7.5.4 + dev: true + + /@commitlint/lint@17.7.0: + resolution: {integrity: sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/is-ignored': 17.7.0 + '@commitlint/parse': 17.7.0 + '@commitlint/rules': 17.7.0 + '@commitlint/types': 17.4.4 + dev: true + + /@commitlint/load@17.7.1: + resolution: {integrity: sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.6.7 + '@commitlint/execute-rule': 17.4.0 + '@commitlint/resolve-extends': 17.6.7 + '@commitlint/types': 17.4.4 + '@types/node': 20.4.7 + chalk: 4.1.2 + cosmiconfig: 8.2.0 + cosmiconfig-typescript-loader: 4.3.0(@types/node@20.4.7)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.6) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.1(@types/node@20.4.7)(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/message@17.4.2: + resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/parse@17.7.0: + resolution: {integrity: sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + dev: true + + /@commitlint/read@17.5.1: + resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/top-level': 17.4.0 + '@commitlint/types': 17.4.4 + fs-extra: 11.1.0 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + dev: true + + /@commitlint/resolve-extends@17.6.7: + resolution: {integrity: sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.6.7 + '@commitlint/types': 17.4.4 + import-fresh: 3.3.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true + + /@commitlint/rules@17.7.0: + resolution: {integrity: sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/ensure': 17.6.7 + '@commitlint/message': 17.4.2 + '@commitlint/to-lines': 17.4.0 + '@commitlint/types': 17.4.4 + execa: 5.1.1 + dev: true + + /@commitlint/to-lines@17.4.0: + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/top-level@17.4.0: + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} + engines: {node: '>=v14'} + dependencies: + find-up: 5.0.0 + dev: true + + /@commitlint/types@17.4.4: + resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} + engines: {node: '>=v14'} + dependencies: + chalk: 4.1.2 + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/css-parser-algorithms@2.3.1(@csstools/css-tokenizer@2.2.0): + resolution: {integrity: sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.0 + dependencies: + '@csstools/css-tokenizer': 2.2.0 + dev: true + + /@csstools/css-tokenizer@2.2.0: + resolution: {integrity: sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/media-query-list-parser@2.1.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0): + resolution: {integrity: sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.1 + '@csstools/css-tokenizer': ^2.2.0 + dependencies: + '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0) + '@csstools/css-tokenizer': 2.2.0 + dev: true + + /@csstools/selector-specificity@3.0.0(postcss-selector-parser@6.0.13): + resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.13 + dev: true + + /@ctrl/tinycolor@3.6.0: + resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==} + engines: {node: '>=10'} + dev: false + + /@element-plus/icons-vue@2.1.0(vue@3.3.4): + resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.3.4 + dev: false + + /@esbuild/android-arm64@0.18.11: + resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.11: + resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.11: + resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.11: + resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.11: + resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.11: + resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.11: + resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.11: + resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.11: + resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.11: + resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.11: + resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.11: + resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.11: + resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.11: + resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.11: + resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.11: + resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.11: + resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.11: + resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.11: + resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.11: + resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.11: + resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.11: + resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.49.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.49.0: + resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@floating-ui/core@1.2.4: + resolution: {integrity: sha512-SQOeVbMwb1di+mVWWJLpsUTToKfqVNioXys011beCAhyOIFtS+GQoW4EQSneuxzmQKddExDwQ+X0hLl4lJJaSQ==} + dev: false + + /@floating-ui/dom@1.2.4: + resolution: {integrity: sha512-4+k+BLhtWj+peCU60gp0+rHeR8+Ohqx6kjJf/lHMnJ8JD5Qj6jytcq1+SZzRwD7rvHKRhR7TDiWWddrNrfwQLg==} + dependencies: + '@floating-ui/core': 1.2.4 + dev: false + + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@hutson/parse-repository-url@3.0.2: + resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@jridgewell/gen-mapping@0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping@0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map@0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + /@jridgewell/trace-mapping@0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.0 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.1 + dev: true + + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.19)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: true + + /@sxzz/popperjs-es@2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@types/eslint@8.21.2: + resolution: {integrity: sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==} + dependencies: + '@types/estree': 1.0.0 + '@types/json-schema': 7.0.11 + dev: true + + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree@1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + dev: true + + /@types/json-schema@7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/lodash-es@4.17.7: + resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} + dependencies: + '@types/lodash': 4.14.191 + dev: false + + /@types/lodash@4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} + dev: false + + /@types/md5@2.3.2: + resolution: {integrity: sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==} + dev: true + + /@types/minimist@1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + + /@types/node@18.15.3: + resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} + dev: true + + /@types/node@20.4.7: + resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==} + dev: true + + /@types/normalize-package-data@2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/nprogress@0.2.0: + resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} + dev: true + + /@types/qs@6.9.8: + resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + dev: true + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.4.7 + dev: true + + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/sortablejs@1.15.2: + resolution: {integrity: sha512-mOIv/EnPMzAZAVbuh9uGjOZ1BBdimP9Y6IPGntsvQJtko5yapSDKB7GwB3AOlF5N3bkpk4sBwQRpS3aEkiUbaA==} + dev: true + + /@types/svgo@2.6.4: + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + dependencies: + '@types/node': 18.15.3 + dev: true + + /@types/trusted-types@2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + dev: true + + /@types/web-bluetooth@0.0.16: + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + dev: false + + /@types/web-bluetooth@0.0.17: + resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} + dev: false + + /@typescript-eslint/eslint-plugin@6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.1.6): + resolution: {integrity: sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/type-utils': 6.7.0(eslint@8.49.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.0 + debug: 4.3.4 + eslint: 8.49.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.7.0(eslint@8.49.0)(typescript@5.1.6): + resolution: {integrity: sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.7.0 + debug: 4.3.4 + eslint: 8.49.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.7.0: + resolution: {integrity: sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/visitor-keys': 6.7.0 + dev: true + + /@typescript-eslint/type-utils@6.7.0(eslint@8.49.0)(typescript@5.1.6): + resolution: {integrity: sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.1.6) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.1.6) + debug: 4.3.4 + eslint: 8.49.0 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.7.0: + resolution: {integrity: sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.7.0(typescript@5.1.6): + resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/visitor-keys': 6.7.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.7.0(eslint@8.49.0)(typescript@5.1.6): + resolution: {integrity: sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.1.6) + eslint: 8.49.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.7.0: + resolution: {integrity: sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.9)(vue@3.3.4): + resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.0.0 + dependencies: + '@babel/core': 7.22.19 + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.19) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.19) + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + vue: 3.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@vitejs/plugin-vue@4.3.4(vite@4.4.9)(vue@3.3.4): + resolution: {integrity: sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + vue: 3.3.4 + dev: true + + /@volar/language-core@1.10.0: + resolution: {integrity: sha512-ddyWwSYqcbEZNFHm+Z3NZd6M7Ihjcwl/9B5cZd8kECdimVXUFdFi60XHWD27nrWtUQIsUYIG7Ca1WBwV2u2LSQ==} + dependencies: + '@volar/source-map': 1.10.0 + dev: true + + /@volar/source-map@1.10.0: + resolution: {integrity: sha512-/ibWdcOzDGiq/GM1JU2eX8fH1bvAhl66hfe8yEgLEzg9txgr6qb5sQ/DEz5PcDL75tF5H5sCRRwn8Eu8ezi9mw==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.10.0: + resolution: {integrity: sha512-OtqGtFbUKYC0pLNIk3mHQp5xWnvL1CJIUc9VE39VdZ/oqpoBh5jKfb9uJ45Y4/oP/WYTrif/Uxl1k8VTPz66Gg==} + dependencies: + '@volar/language-core': 1.10.0 + dev: true + + /@vue/babel-helper-vue-transform-on@1.1.5: + resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} + dev: true + + /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.19): + resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-module-imports': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.19) + '@babel/template': 7.22.15 + '@babel/traverse': 7.22.19 + '@babel/types': 7.22.19 + '@vue/babel-helper-vue-transform-on': 1.1.5 + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/compiler-core@3.2.47: + resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + source-map: 0.6.1 + dev: true + + /@vue/compiler-dom@3.2.47: + resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} + dependencies: + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.47 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + dev: true + + /@vue/compiler-dom@3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + dependencies: + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + + /@vue/compiler-sfc@3.2.47: + resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} + dependencies: + '@babel/parser': 7.21.3 + '@vue/compiler-core': 3.2.47 + '@vue/compiler-dom': 3.2.47 + '@vue/compiler-ssr': 3.2.47 + '@vue/reactivity-transform': 3.2.47 + '@vue/shared': 3.2.47 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.4.29 + source-map: 0.6.1 + dev: true + + /@vue/compiler-sfc@3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4 + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + magic-string: 0.30.0 + postcss: 8.4.29 + source-map-js: registry.npmmirror.com/source-map-js@1.0.2 + + /@vue/compiler-ssr@3.2.47: + resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} + dependencies: + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.2.47 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + dev: true + + /@vue/compiler-ssr@3.3.4: + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + dependencies: + '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + + /@vue/devtools-api@6.5.0: + resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + dev: false + + /@vue/language-core@1.8.11(typescript@5.1.6): + resolution: {integrity: sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.10.0 + '@volar/source-map': 1.10.0 + '@vue/compiler-dom': 3.3.4 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + minimatch: 9.0.0 + muggle-string: 0.3.1 + typescript: 5.1.6 + vue-template-compiler: 2.7.14 + dev: true + + /@vue/reactivity-transform@3.2.47: + resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.47 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + magic-string: 0.25.9 + dev: true + + /@vue/reactivity-transform@3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + magic-string: 0.30.0 + + /@vue/reactivity@3.3.4: + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} + dependencies: + '@vue/shared': 3.3.4 + dev: true + + /@vue/runtime-core@3.3.4: + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + dependencies: + '@vue/reactivity': registry.npmmirror.com/@vue/reactivity@3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + + /@vue/runtime-dom@3.3.4: + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + dependencies: + '@vue/runtime-core': 3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + csstype: 3.1.2 + + /@vue/server-renderer@3.3.4(vue@3.3.4): + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + peerDependencies: + vue: 3.3.4 + dependencies: + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + vue: 3.3.4 + + /@vue/shared@3.2.47: + resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} + dev: true + + /@vue/shared@3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + + /@vue/typescript@1.8.11(typescript@5.1.6): + resolution: {integrity: sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==} + dependencies: + '@volar/typescript': 1.10.0 + '@vue/language-core': 1.8.11(typescript@5.1.6) + transitivePeerDependencies: + - typescript + dev: true + + /@vueuse/core@10.4.1(vue@3.3.4): + resolution: {integrity: sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==} + dependencies: + '@types/web-bluetooth': 0.0.17 + '@vueuse/metadata': 10.4.1 + '@vueuse/shared': 10.4.1(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/core@9.13.0(vue@3.3.4): + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/metadata@10.4.1: + resolution: {integrity: sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==} + dev: false + + /@vueuse/metadata@9.13.0: + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + dev: false + + /@vueuse/shared@10.4.1(vue@3.3.4): + resolution: {integrity: sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==} + dependencies: + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/shared@9.13.0(vue@3.3.4): + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + dependencies: + vue-demi: 0.14.5(vue@3.3.4) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /add-stream@1.0.0: + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + 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 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + dev: false + + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /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@10.4.15(postcss@8.4.29): + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.10 + caniuse-lite: 1.0.30001534 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.29 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axios@1.5.0: + resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.22.19): + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.19 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.19) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.22.19): + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.19) + core-js-compat: 3.30.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.22.19): + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.19 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.19) + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + dev: true + + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: registry.npmmirror.com/balanced-match@1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001534 + electron-to-chromium: 1.4.522 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.0 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.3.0 + dev: true + + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite@1.0.30001534: + resolution: {integrity: sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==} + dev: true + + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /clean-css@5.3.2: + resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + 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 + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /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 + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + + /colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true + + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + 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 + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + + /component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + 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 + + /consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + dev: true + + /conventional-changelog-angular@5.0.13: + resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-angular@6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-atom@2.0.8: + resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-codemirror@2.0.8: + resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-config-spec@2.1.0: + resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} + dev: true + + /conventional-changelog-conventionalcommits@4.6.3: + resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + dev: true + + /conventional-changelog-conventionalcommits@6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-core@4.2.4: + resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} + engines: {node: '>=10'} + dependencies: + add-stream: 1.0.0 + conventional-changelog-writer: 5.0.1 + conventional-commits-parser: 3.2.4 + dateformat: 3.0.3 + get-pkg-repo: 4.2.1 + git-raw-commits: 2.0.11 + git-remote-origin-url: 2.0.0 + git-semver-tags: 4.1.1 + lodash: 4.17.21 + normalize-package-data: 3.0.3 + q: 1.5.1 + read-pkg: 3.0.0 + read-pkg-up: 3.0.0 + through2: 4.0.2 + dev: true + + /conventional-changelog-ember@2.0.9: + resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-eslint@3.0.9: + resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-express@2.0.6: + resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-jquery@3.0.11: + resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} + engines: {node: '>=10'} + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-jshint@2.0.9: + resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} + engines: {node: '>=10'} + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-preset-loader@2.3.4: + resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} + engines: {node: '>=10'} + dev: true + + /conventional-changelog-writer@5.0.1: + resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + conventional-commits-filter: 2.0.7 + dateformat: 3.0.3 + handlebars: 4.7.7 + json-stringify-safe: 5.0.1 + lodash: 4.17.21 + meow: 8.1.2 + semver: 6.3.0 + split: 1.0.1 + through2: 4.0.2 + dev: true + + /conventional-changelog@3.1.25: + resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} + engines: {node: '>=10'} + dependencies: + conventional-changelog-angular: 5.0.13 + conventional-changelog-atom: 2.0.8 + conventional-changelog-codemirror: 2.0.8 + conventional-changelog-conventionalcommits: 4.6.3 + conventional-changelog-core: 4.2.4 + conventional-changelog-ember: 2.0.9 + conventional-changelog-eslint: 3.0.9 + conventional-changelog-express: 2.0.6 + conventional-changelog-jquery: 3.0.11 + conventional-changelog-jshint: 2.0.9 + conventional-changelog-preset-loader: 2.3.4 + dev: true + + /conventional-commits-filter@2.0.7: + resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} + engines: {node: '>=10'} + dependencies: + lodash.ismatch: 4.4.0 + modify-values: 1.0.1 + dev: true + + /conventional-commits-parser@3.2.4: + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + dev: true + + /conventional-recommended-bump@6.1.0: + resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + concat-stream: 2.0.0 + conventional-changelog-preset-loader: 2.3.4 + conventional-commits-filter: 2.0.7 + conventional-commits-parser: 3.2.4 + git-raw-commits: 2.0.11 + git-semver-tags: 4.1.1 + meow: 8.1.2 + q: 1.5.1 + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /core-js-compat@3.30.2: + resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==} + dependencies: + browserslist: 4.21.10 + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: true + + /cosmiconfig-typescript-loader@4.3.0(@types/node@20.4.7)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.6): + resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=3' + dependencies: + '@types/node': 20.4.7 + cosmiconfig: 8.2.0 + ts-node: 10.9.1(@types/node@20.4.7)(typescript@5.1.6) + typescript: 5.1.6 + dev: true + + /cosmiconfig@8.2.0: + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /css-functions-list@3.2.0: + resolution: {integrity: sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==} + engines: {node: '>=12.22'} + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /cz-git@1.7.1: + resolution: {integrity: sha512-NMe4REukCS7op1YA1jixRXOgII8Um2/Ii8TeyFEOISgp2ZzeobzkMOP8dXSrTQ3bvmm7YpPOdr2301yJkOJcbA==} + engines: {node: '>=v12.20.0'} + dev: true + + /czg@1.7.1: + resolution: {integrity: sha512-KP93cTbZxgWYDKJzZpjnLe0sy/2FwyegatnrOaqsath04WinvsdhZl5QCGkxTKBY2DavpKloIBW/WGZzCKmrlA==} + engines: {node: '>=v12.20.0'} + hasBin: true + dev: true + + /dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /dateformat@3.0.3: + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + dev: true + + /dayjs@1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + 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==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + 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 + + /decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + dev: true + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + 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 + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.4.0 + dev: true + + /domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + dependencies: + domelementtype: 1.3.1 + dev: true + + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + + /domutils@3.0.1: + resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.0 + 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@8.0.3: + resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==} + engines: {node: '>=12'} + dev: true + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /dotgitignore@2.1.0: + resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + minimatch: 3.1.2 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.5 + dev: true + + /electron-to-chromium@1.4.522: + resolution: {integrity: sha512-KGKjcafTpOxda0kqwQ72M0tDmX6RsGhUJTy0Hr7slt0+CgHh9Oex8JdjY9Og68dUkTLUlBOJC0A5W5Mw3QSGCg==} + dev: true + + /element-plus@2.3.4(vue@3.3.4): + resolution: {integrity: sha512-SQr0J9z7N4z48WYk/l9NE2tizl8Q7j2OhqlpTc42k4pGncry3+rVX6dsmcsglFynn6vt3NzYxWJqmLFyDKQq+g==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@ctrl/tinycolor': 3.6.0 + '@element-plus/icons-vue': 2.1.0(vue@3.3.4) + '@floating-ui/dom': 1.2.4 + '@popperjs/core': /@sxzz/popperjs-es@2.11.7 + '@types/lodash': 4.14.191 + '@types/lodash-es': 4.17.7 + '@vueuse/core': 9.13.0(vue@3.3.4) + async-validator: 4.2.5 + dayjs: 1.11.9 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.3.4 + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + dev: true + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /entities@4.4.0: + resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + engines: {node: '>=0.12'} + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.18.11: + resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.11 + '@esbuild/android-arm64': 0.18.11 + '@esbuild/android-x64': 0.18.11 + '@esbuild/darwin-arm64': 0.18.11 + '@esbuild/darwin-x64': 0.18.11 + '@esbuild/freebsd-arm64': 0.18.11 + '@esbuild/freebsd-x64': 0.18.11 + '@esbuild/linux-arm': 0.18.11 + '@esbuild/linux-arm64': 0.18.11 + '@esbuild/linux-ia32': 0.18.11 + '@esbuild/linux-loong64': 0.18.11 + '@esbuild/linux-mips64el': 0.18.11 + '@esbuild/linux-ppc64': 0.18.11 + '@esbuild/linux-riscv64': 0.18.11 + '@esbuild/linux-s390x': 0.18.11 + '@esbuild/linux-x64': 0.18.11 + '@esbuild/netbsd-x64': 0.18.11 + '@esbuild/openbsd-x64': 0.18.11 + '@esbuild/sunos-x64': 0.18.11 + '@esbuild/win32-arm64': 0.18.11 + '@esbuild/win32-ia32': 0.18.11 + '@esbuild/win32-x64': 0.18.11 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier@9.0.0(eslint@8.49.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.49.0 + dev: true + + /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.49.0)(prettier@3.0.3): + resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.49.0 + eslint-config-prettier: 9.0.0(eslint@8.49.0) + prettier: 3.0.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + dev: true + + /eslint-plugin-vue@9.17.0(eslint@8.49.0): + resolution: {integrity: sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + eslint: 8.49.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.13 + semver: 7.5.4 + vue-eslint-parser: 9.3.1(eslint@8.49.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.49.0: + resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.49.0 + '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + 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 + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.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 + transitivePeerDependencies: + - supports-color + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: true + + /fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-glob@3.3.0: + resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + 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@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: registry.npmmirror.com/minimatch@5.1.6 + dev: true + + /fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@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@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + 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 + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-extra@11.1.0: + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + 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.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + 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.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + + /get-pkg-repo@4.2.1: + resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} + engines: {node: '>=6.9.0'} + hasBin: true + dependencies: + '@hutson/parse-repository-url': 3.0.2 + hosted-git-info: 4.1.0 + through2: 2.0.5 + yargs: 16.2.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: true + + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /git-remote-origin-url@2.0.0: + resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} + engines: {node: '>=4'} + dependencies: + gitconfiglocal: 1.0.0 + pify: 2.3.0 + dev: true + + /git-semver-tags@4.1.1: + resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + meow: 8.1.2 + semver: registry.npmmirror.com/semver@6.3.0 + dev: true + + /gitconfiglocal@1.0.0: + resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} + dependencies: + ini: 1.3.8 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + dependencies: + ini: 1.3.8 + dev: true + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /handlebars@4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + 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.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + 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-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.2 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.16.6 + dev: true + + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + 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.2 + dev: true + + /htmlparser2@8.0.1: + resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.0.1 + entities: 4.4.0 + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.0: + resolution: {integrity: sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==} + engines: {node: '>=14.18.0'} + dev: true + + /husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /immutable@4.3.0: + resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + 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-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + 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-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + 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.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + 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.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + 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-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + 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@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + 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-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + 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-typed-array@1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.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 + + /jake@10.8.5: + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: registry.npmmirror.com/minimatch@3.1.2 + dev: true + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.4.7 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-tokens@8.0.1: + resolution: {integrity: sha512-3AGrZT6tuMm1ZWWn9mLXh7XMfi2YtiLNPALCVxBCiUVq0LD1OQMxV/AdS/s7rLJU5o9i/jBZw/N4vXXL5dm29A==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + 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-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + 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 + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /known-css-properties@0.28.0: + resolution: {integrity: sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==} + dev: true + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lint-staged@14.0.1: + resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.3.0 + wrap-ansi: 8.1.0 + dev: true + + /load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + dependencies: + graceful-fs: registry.npmmirror.com/graceful-fs@4.2.10 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + + /loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + 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-unified@1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21): + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + dependencies: + '@types/lodash-es': 4.17.7 + lodash: 4.17.21 + lodash-es: 4.17.21 + dev: false + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + dev: true + + /lodash.ismatch@4.4.0: + resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + dev: true + + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: true + + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.0.1 + wrap-ansi: 8.1.0 + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.3.0 + 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: registry.npmmirror.com/yallist@4.0.0 + dev: true + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.14 + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + dev: true + + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + + /meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + dev: true + + /meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + + /merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 1.0.0 + extend-shallow: 2.0.1 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 5.1.0 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.0: + resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: false + + /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 + + /modify-values@1.0.1: + resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} + engines: {node: '>=0.10.0'} + dev: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.3.0 + dev: true + + /node-html-parser@5.4.2: + resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} + dependencies: + css-select: 4.3.0 + he: 1.2.0 + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.1 + semver: registry.npmmirror.com/semver@5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.11.0 + semver: registry.npmmirror.com/semver@7.5.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + dev: false + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /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.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + 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-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 + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.3.0 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@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.21.4 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.0 + dev: true + + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + 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-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + 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 + + /pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + 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 + + /pinia-plugin-persistedstate@3.2.0(pinia@2.1.6): + resolution: {integrity: sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==} + peerDependencies: + pinia: ^2.0.0 + dependencies: + pinia: 2.1.6(typescript@5.1.6)(vue@3.3.4) + dev: false + + /pinia@2.1.6(typescript@5.1.6)(vue@3.3.4): + resolution: {integrity: sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + dependencies: + '@vue/devtools-api': 6.5.0 + typescript: 5.1.6 + vue: 3.3.4 + vue-demi: 0.14.5(vue@3.3.4) + dev: false + + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-html@1.5.0: + resolution: {integrity: sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==} + engines: {node: ^12 || >=14} + dependencies: + htmlparser2: 8.0.1 + js-tokens: 8.0.1 + postcss: 8.4.29 + postcss-safe-parser: 6.0.0(postcss@8.4.29) + dev: true + + /postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + dev: true + + /postcss-prefix-selector@1.16.0(postcss@5.2.18): + resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} + peerDependencies: + postcss: '>4 <9' + dependencies: + postcss: 5.2.18 + dev: true + + /postcss-resolve-nested-selector@0.1.1: + resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + dev: true + + /postcss-safe-parser@6.0.0(postcss@8.4.29): + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + dependencies: + postcss: 8.4.29 + dev: true + + /postcss-scss@4.0.8(postcss@8.4.29): + resolution: {integrity: sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + dependencies: + postcss: 8.4.29 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-sorting@8.0.2(postcss@8.4.29): + resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} + peerDependencies: + postcss: ^8.4.20 + dependencies: + postcss: 8.4.29 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + dev: true + + /postcss@8.4.29: + resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + dev: true + + /posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + dev: true + + /posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + + /posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.2.0 + dev: true + + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + + /print-js@1.6.0: + resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==} + dev: false + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + 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.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /read-pkg-up@3.0.0: + resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + read-pkg: 3.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-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + dev: true + + /read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 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.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + 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.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + dev: true + + /regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + 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.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-transform@0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + dependencies: + '@babel/runtime': 7.21.0 + 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.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + dependencies: + global-dirs: 0.1.1 + dev: true + + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve@1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.22.13 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.16.6 + dev: true + + /rollup-plugin-visualizer@5.9.2(rollup@2.79.1): + resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + rollup: 2.79.1 + source-map: 0.7.4 + yargs: 17.7.1 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /rollup@3.29.1: + resolution: {integrity: sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer@5.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-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: true + + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /sass@1.66.1: + resolution: {integrity: sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.0 + source-map-js: 1.0.2 + dev: true + + /screenfull@6.0.2: + resolution: {integrity: sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: false + + /semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + engines: {node: '>=14'} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.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 + transitivePeerDependencies: + - supports-color + dev: true + + /sortablejs@1.15.0: + resolution: {integrity: sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==} + dev: false + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + 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 + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.13 + 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.13 + dev: true + + /spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + 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.2 + dev: true + + /split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + dependencies: + through: 2.3.8 + dev: true + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /standard-version@9.5.0: + resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + chalk: 2.4.2 + conventional-changelog: 3.1.25 + conventional-changelog-config-spec: 2.1.0 + conventional-changelog-conventionalcommits: 4.6.3 + conventional-recommended-bump: 6.1.0 + detect-indent: 6.1.0 + detect-newline: 3.1.0 + dotgitignore: 2.1.0 + figures: 3.2.0 + find-up: 5.0.0 + git-semver-tags: 4.1.1 + semver: 7.3.8 + stringify-package: 1.0.1 + yargs: 16.2.0 + dev: true + + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + 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-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.0.1 + dev: true + + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + 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 + + /stringify-package@1.0.1: + resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==} + deprecated: This module is not used anymore, and has been replaced by @npmcli/package-json + dev: true + + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + 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-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + 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 + + /style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + dev: true + + /stylelint-config-html@1.1.0(postcss-html@1.5.0)(stylelint@15.10.3): + resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + dependencies: + postcss-html: 1.5.0 + stylelint: 15.10.3 + dev: true + + /stylelint-config-recess-order@4.3.0(stylelint@15.10.3): + resolution: {integrity: sha512-EWVtxZ8oq4/meTrRNUDrS5TqMz6TX72JjKDwVQq0JJDXE+P/o7UuFw3wWV/0O9yvJfh/da6nJY71ZUn/wSfB4g==} + peerDependencies: + stylelint: '>=15' + dependencies: + stylelint: 15.10.3 + stylelint-order: 6.0.3(stylelint@15.10.3) + dev: true + + /stylelint-config-recommended-scss@13.0.0(postcss@8.4.29)(stylelint@15.10.3): + resolution: {integrity: sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.10.0 + peerDependenciesMeta: + postcss: + optional: true + dependencies: + postcss: 8.4.29 + postcss-scss: 4.0.8(postcss@8.4.29) + stylelint: 15.10.3 + stylelint-config-recommended: 13.0.0(stylelint@15.10.3) + stylelint-scss: 5.2.0(stylelint@15.10.3) + dev: true + + /stylelint-config-recommended-vue@1.5.0(postcss-html@1.5.0)(stylelint@15.10.3): + resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + dependencies: + postcss-html: 1.5.0 + semver: 7.5.4 + stylelint: 15.10.3 + stylelint-config-html: 1.1.0(postcss-html@1.5.0)(stylelint@15.10.3) + stylelint-config-recommended: 13.0.0(stylelint@15.10.3) + dev: true + + /stylelint-config-recommended@13.0.0(stylelint@15.10.3): + resolution: {integrity: sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + stylelint: ^15.10.0 + dependencies: + stylelint: 15.10.3 + dev: true + + /stylelint-config-standard-scss@11.0.0(postcss@8.4.29)(stylelint@15.10.3): + resolution: {integrity: sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.10.0 + peerDependenciesMeta: + postcss: + optional: true + dependencies: + postcss: 8.4.29 + stylelint: 15.10.3 + stylelint-config-recommended-scss: 13.0.0(postcss@8.4.29)(stylelint@15.10.3) + stylelint-config-standard: 34.0.0(stylelint@15.10.3) + dev: true + + /stylelint-config-standard@34.0.0(stylelint@15.10.3): + resolution: {integrity: sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + stylelint: ^15.10.0 + dependencies: + stylelint: 15.10.3 + stylelint-config-recommended: 13.0.0(stylelint@15.10.3) + dev: true + + /stylelint-order@6.0.3(stylelint@15.10.3): + resolution: {integrity: sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 + dependencies: + postcss: 8.4.29 + postcss-sorting: 8.0.2(postcss@8.4.29) + stylelint: 15.10.3 + dev: true + + /stylelint-scss@5.2.0(stylelint@15.10.3): + resolution: {integrity: sha512-m/os6B7xHKakM9TkEbnity0gnDEqNbISpclvjOwIU+xIHk/8dQNGcTI2UlC5/QLzaG+tzQ9eMFZH8Iq7roQI2w==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + dependencies: + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.1 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + stylelint: 15.10.3 + dev: true + + /stylelint@15.10.3: + resolution: {integrity: sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0) + '@csstools/css-tokenizer': 2.2.0 + '@csstools/media-query-list-parser': 2.1.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0) + '@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 8.2.0 + css-functions-list: 3.2.0 + css-tree: 2.3.1 + debug: 4.3.4 + fast-glob: 3.3.1 + fastest-levenshtein: 1.0.16 + file-entry-cache: 6.0.1 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.2.4 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.28.0 + mathml-tag-names: 2.1.3 + meow: 10.1.5 + micromatch: 4.0.5 + normalize-path: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.29 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 6.0.0(postcss@8.4.29) + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + style-search: 0.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.1 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + + /supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + dependencies: + bluebird: 3.7.2 + clone: 2.1.2 + he: 1.2.0 + image-size: 0.5.5 + loader-utils: 1.4.2 + merge-options: 1.0.1 + micromatch: 3.1.0 + postcss: 5.2.18 + postcss-prefix-selector: 1.16.0(postcss@5.2.18) + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.7 + transitivePeerDependencies: + - supports-color + dev: true + + /svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true + + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.1 + dev: true + + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: true + + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /terser@5.16.6: + resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.2 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + 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 + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + + /through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + 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 + + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + + /traverse@0.6.7: + resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} + dev: true + + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + + /trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + dev: true + + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + + /ts-node@10.9.1(@types/node@20.4.7)(typescript@5.1.6): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 20.4.7 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.1.6 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + dev: true + + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + 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 + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unplugin-vue-setup-extend-plus@1.0.0: + resolution: {integrity: sha512-Qb34atQ/elvkErQ12PNv6UWJPWIG4dEgjjizYKyycPeiRqQaMVNCKqRIqfxlhXntcU2l+o3VQuk1NNZN6QJ/xw==} + dependencies: + '@vue/compiler-sfc': 3.2.47 + magic-string: 0.26.7 + unplugin: 1.3.1 + dev: true + + /unplugin@1.3.1: + resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} + dependencies: + acorn: 8.8.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + 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 + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /vite-plugin-compression@0.5.1(vite@4.4.9): + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + chalk: 4.1.2 + debug: 4.3.4 + fs-extra: 10.1.0 + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + transitivePeerDependencies: + - supports-color + dev: true + + /vite-plugin-eslint@1.8.1(eslint@8.49.0)(vite@4.4.9): + resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} + peerDependencies: + eslint: '>=7' + vite: '>=2' + dependencies: + '@rollup/pluginutils': 4.2.1 + '@types/eslint': 8.21.2 + eslint: 8.49.0 + rollup: 2.79.1 + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + dev: true + + /vite-plugin-html@3.2.0(vite@4.4.9): + resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + colorette: 2.0.19 + connect-history-api-fallback: 1.6.0 + consola: 2.15.3 + dotenv: 16.0.3 + dotenv-expand: 8.0.3 + ejs: 3.1.9 + fast-glob: 3.2.12 + fs-extra: 10.1.0 + html-minifier-terser: 6.1.0 + node-html-parser: 5.4.2 + pathe: 0.2.0 + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + dev: true + + /vite-plugin-pwa@0.16.5(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0): + resolution: {integrity: sha512-Ahol4dwhMP2UHPQXkllSlXbihOaDFnvBIDPmAxoSZ1EObBUJGP4CMRyCyAVkIHjd6/H+//vH0DM2ON+XxHr81g==} + engines: {node: '>=16.0.0'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0 + workbox-build: ^7.0.0 + workbox-window: ^7.0.0 + dependencies: + debug: 4.3.4 + fast-glob: 3.3.1 + pretty-bytes: 6.1.1 + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + workbox-build: 7.0.0 + workbox-window: 7.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /vite-plugin-svg-icons@2.0.1(vite@4.4.9): + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + dependencies: + '@types/svgo': 2.6.4 + cors: 2.8.5 + debug: 4.3.4 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 4.4.9(@types/node@20.4.7)(sass@1.66.1) + transitivePeerDependencies: + - supports-color + dev: true + + /vite@4.4.9(@types/node@20.4.7)(sass@1.66.1): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.4.7 + esbuild: 0.18.11 + postcss: 8.4.29 + rollup: 3.29.1 + sass: 1.66.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vue-demi@0.14.5(vue@3.3.4): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: false + + /vue-eslint-parser@9.3.1(eslint@8.49.0): + resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.49.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /vue-router@4.2.4(vue@3.3.4): + resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.5.0 + vue: 3.3.4 + dev: false + + /vue-template-compiler@2.7.14: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-tsc@1.8.11(typescript@5.1.6): + resolution: {integrity: sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@vue/language-core': 1.8.11(typescript@5.1.6) + '@vue/typescript': 1.8.11(typescript@5.1.6) + semver: 7.5.4 + typescript: 5.1.6 + dev: true + + /vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + 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 + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /workbox-background-sync@7.0.0: + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + dependencies: + idb: 7.1.1 + workbox-core: 7.0.0 + dev: true + + /workbox-broadcast-update@7.0.0: + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-build@7.0.0: + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + engines: {node: '>=16.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.22.19 + '@babel/preset-env': 7.21.5(@babel/core@7.22.19) + '@babel/runtime': 7.21.0 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.19)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.0.0 + workbox-broadcast-update: 7.0.0 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-google-analytics: 7.0.0 + workbox-navigation-preload: 7.0.0 + workbox-precaching: 7.0.0 + workbox-range-requests: 7.0.0 + workbox-recipes: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + workbox-streams: 7.0.0 + workbox-sw: 7.0.0 + workbox-window: 7.0.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-cacheable-response@7.0.0: + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-core@7.0.0: + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + dev: true + + /workbox-expiration@7.0.0: + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + dependencies: + idb: 7.1.1 + workbox-core: 7.0.0 + dev: true + + /workbox-google-analytics@7.0.0: + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + dependencies: + workbox-background-sync: 7.0.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-navigation-preload@7.0.0: + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-precaching@7.0.0: + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + dependencies: + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-range-requests@7.0.0: + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-recipes@7.0.0: + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + dependencies: + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-precaching: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-routing@7.0.0: + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-strategies@7.0.0: + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-streams@7.0.0: + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + dependencies: + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + dev: true + + /workbox-sw@7.0.0: + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} + dev: true + + /workbox-window@7.0.0: + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 7.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.0.2 + dev: true + + /xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + 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.8 + yargs-parser: 20.2.9 + dev: true + + /yargs@17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + registry.npmmirror.com/@babel/helper-string-parser@7.21.5: + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz} + name: '@babel/helper-string-parser' + version: 7.21.5 + engines: {node: '>=6.9.0'} + + registry.npmmirror.com/@babel/helper-validator-identifier@7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz} + name: '@babel/helper-validator-identifier' + version: 7.19.1 + engines: {node: '>=6.9.0'} + + registry.npmmirror.com/@babel/parser@7.21.8: + resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.21.8.tgz} + name: '@babel/parser' + version: 7.21.8 + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': registry.npmmirror.com/@babel/types@7.21.5 + + registry.npmmirror.com/@babel/types@7.21.5: + resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.21.5.tgz} + name: '@babel/types' + version: 7.21.5 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser@7.21.5 + '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.19.1 + to-fast-properties: registry.npmmirror.com/to-fast-properties@2.0.0 + + registry.npmmirror.com/@vue/compiler-core@3.2.47: + resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz} + name: '@vue/compiler-core' + version: 3.2.47 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + source-map: 0.6.1 + dev: true + + registry.npmmirror.com/@vue/compiler-core@3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz} + name: '@vue/compiler-core' + version: 3.3.4 + dependencies: + '@babel/parser': registry.npmmirror.com/@babel/parser@7.21.8 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + estree-walker: registry.npmmirror.com/estree-walker@2.0.2 + source-map-js: registry.npmmirror.com/source-map-js@1.0.2 + + registry.npmmirror.com/@vue/compiler-dom@3.2.47: + resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz} + name: '@vue/compiler-dom' + version: 3.2.47 + dependencies: + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.47 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.47 + dev: true + + registry.npmmirror.com/@vue/compiler-dom@3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz} + name: '@vue/compiler-dom' + version: 3.3.4 + dependencies: + '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.3.4 + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + + registry.npmmirror.com/@vue/reactivity@3.3.4: + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz} + name: '@vue/reactivity' + version: 3.3.4 + dependencies: + '@vue/shared': registry.npmmirror.com/@vue/shared@3.3.4 + + registry.npmmirror.com/@vue/shared@3.2.47: + resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz} + name: '@vue/shared' + version: 3.2.47 + dev: true + + registry.npmmirror.com/@vue/shared@3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz} + name: '@vue/shared' + version: 3.3.4 + + registry.npmmirror.com/balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} + name: balanced-match + version: 1.0.2 + dev: true + + registry.npmmirror.com/brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz} + name: brace-expansion + version: 1.1.11 + dependencies: + balanced-match: registry.npmmirror.com/balanced-match@1.0.2 + concat-map: 0.0.1 + dev: true + + registry.npmmirror.com/brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} + name: brace-expansion + version: 2.0.1 + dependencies: + balanced-match: registry.npmmirror.com/balanced-match@1.0.2 + dev: true + + registry.npmmirror.com/estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} + name: estree-walker + version: 2.0.2 + + registry.npmmirror.com/graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} + name: graceful-fs + version: 4.2.10 + dev: true + + registry.npmmirror.com/lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} + name: lru-cache + version: 6.0.0 + engines: {node: '>=10'} + dependencies: + yallist: registry.npmmirror.com/yallist@4.0.0 + dev: true + + registry.npmmirror.com/minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz} + name: minimatch + version: 3.1.2 + dependencies: + brace-expansion: registry.npmmirror.com/brace-expansion@1.1.11 + dev: true + + registry.npmmirror.com/minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz} + name: minimatch + version: 5.1.6 + engines: {node: '>=10'} + dependencies: + brace-expansion: registry.npmmirror.com/brace-expansion@2.0.1 + dev: true + + registry.npmmirror.com/semver@5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz} + name: semver + version: 5.7.1 + hasBin: true + dev: true + + registry.npmmirror.com/semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz} + name: semver + version: 6.3.0 + hasBin: true + dev: true + + registry.npmmirror.com/semver@7.5.2: + resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.5.2.tgz} + name: semver + version: 7.5.2 + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: registry.npmmirror.com/lru-cache@6.0.0 + dev: true + + registry.npmmirror.com/source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} + name: source-map-js + version: 1.0.2 + engines: {node: '>=0.10.0'} + + registry.npmmirror.com/to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} + name: to-fast-properties + version: 2.0.0 + engines: {node: '>=4'} + + registry.npmmirror.com/yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz} + name: yallist + version: 4.0.0 + dev: true diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..59ea1f3 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +}; diff --git a/public/vue.svg b/public/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/public/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..53ff99b --- /dev/null +++ b/src/App.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/api/config/index.ts b/src/api/config/index.ts new file mode 100644 index 0000000..6624f43 --- /dev/null +++ b/src/api/config/index.ts @@ -0,0 +1,79 @@ +// 登录 +export const loginApiUrl = "/guest/login"; + +// 配置 +export const getSystemConfigListApiUrl = "/system/config/list"; +export const getSystemConfigSaveApiUrl = "/system/config/save"; + +// 资源端点 +export const getSystemZyddListApiUrl = "/system/zydd/list"; +export const getSystemZyddSaveApiUrl = "/system/zydd/save"; + +// 计划任务列表 +export const getSystemPlanListApiUrl = "/system/plan/list"; +export const getSystemPlanSaveApiUrl = "/system/plan/save"; + +// 采集配置列表 +export const getSystemCjpzListApiUrl = "/system/cjpz/list"; +export const getSystemCjpzSaveApiUrl = "/system/cjpz/save"; + +// 用户信息 +export const getSystemUserInfoApiUrl = "/system/user/info"; +// 用户列表 +export const getSystemUserlistApiUrl = "/system/user/list"; + +// 视频分类 /shipin/fenlei/list?page=1&limit=10&key= +export const getShipinFenleiApiUrl = "/shipin/fenlei/list"; +// 视频列表 /shipin/main/list?page=1&limit=10&key= +export const getShipinMainListApiUrl = "/shipin/main/list"; +// 视频列表 -批量设置每日推荐视频 +export const getShipinMainMrtjApiUrl = "/shipin/main/mrtj"; +export const getShipinMainVipApiUrl = "/shipin/main/vip"; + +// seo关键词 +export const getKeyWordListApiUrl = "/system/keyword/list"; +export const getKeyWordSaveApiUrl = "/system/keyword/save"; +export const getKeyWordDelApiUrl = "/system/keyword/del"; + +// 小说分类 +export const getXiaoShuoFenleiApiUrl = "/novel/category/list"; +// 小说章节 +export const getXiaoZhangJieYouApiUrl = "/xiaoshuo/zhangjie/list"; +// 小说列表 +export const getXiaoShuoMainListApiUrl = "/novel/list"; + +// 广告分组 /guanggao/main/group/list?page=1&limit=10&key= +export const getGuangGaoMainGroupListApiUrl = "/guanggao/main/group/list"; +// 广告列表 /guanggao/main/list?page=1&limit=10&key= +export const getGuangGaoMainListApiUrl = "/guanggao/main/list"; + +//广告配置 +export const getGuangGaoGgpzListApiUrl = "/guanggao/ggpz/list"; +export const getGuangGaoGgpzSaveApiUrl = "/guanggao/ggpz/save"; + +// 漫画分类 /manhua/fenlei/list?page=1&limit=10&key= +export const getManHuaFenleiApiUrl = "/manhua/fenlei/list"; +// 漫画章节 /shipin/nvyou/list?page=1&limit=10&key= +export const getManHuaZhangJieApiUrl = "/manhua/zhangjie/list"; +// 漫画列表 /shipin/main/list?page=1&limit=10&key= +export const getManHuaMainListApiUrl = "/manhua/main/list"; + +// 设置广告分组 /guanggao/main/group/save 传参form-data 参数 ggfz_code ggfz_name ggfz_id +export const getGuangGaoMainGroupSaveApiUrl = "/guanggao/main/group/save"; +// 删除广告分组 /guanggao/main/group/del 传参form-data 参数 ggfz_id +export const getGuangGaoMainGroupDelApiUrl = "/guanggao/main/group/del"; +// 设置广告 /guanggao/main/group/save 传参form-data 参数 gg_id ggfz_id gg_lei_xing gg_tu_pian gg_wen_zi gg_tiao_zhuan_di_zhi +export const getGuangGaoMainSaveApiUrl = "/guanggao/main/save"; +// 删除广告 /guanggao/main/group/del 传参form-data 参数 gg_id +export const getGuangGaoMainDelApiUrl = "/guanggao/main/del"; + + +// 参数模板列表 +export const getTkdargListUrl = "/site/tkdarg/list"; + +// 模板列表 +export const getTemplateListUrl = "/site/template/list"; +// 替换模板分组列表 +export const getSubjectFomartGroupList = "/site/subject/fomart/group/list"; +// 替换模板列表 +export const getSubjectFomartList = "/site/subject/fomart/list"; diff --git a/src/api/config/servicePort.ts b/src/api/config/servicePort.ts new file mode 100644 index 0000000..3ab50de --- /dev/null +++ b/src/api/config/servicePort.ts @@ -0,0 +1,99 @@ +// 后端微服务模块前缀 +export const PORT1 = "/geeker"; +export const ADMIN = "/admin"; +/** + * @name 服务端口-系统 + */ +export const SYSTEM_PORT = "/admin/system"; +export const DOMAIN_PORT = "/admin/domain"; +export const USER_PORT = SYSTEM_PORT + "/user"; +export const ROLE_PORT = SYSTEM_PORT + "/role"; +export const NODE_PORT = SYSTEM_PORT + "/node"; +export const TASK_PORT = SYSTEM_PORT + "/task"; +export const MSG_PORT = "/admin/msg/task"; +export const DOWNLOAD_PORT = "/admin/report/down"; +export const CONFIG_PORT = SYSTEM_PORT + "/config"; +export const SYS_CONFIG_PORT = SYSTEM_PORT + "/sysconfig"; +export const RES_SOURCE_PORT = "/admin/resource"; + +/** + * @name 服务端口-视频 + */ +export const VIDEO_PORT = ADMIN + "/video"; +/** + * @name 服务端口-标签 + */ +export const TAG_PORT = ADMIN + "/tag"; +/** + * @name 服务端口-图册 + */ +export const ATLAS_PORT = ADMIN + "/atlas"; + +/** + * @name 服务端口-小说 + */ +export const NOVEL_PORT = ADMIN + "/novel"; + +/** + * @name 服务端口-漫画 + */ +export const MANGA_PORT = ADMIN + "/manga"; + +/** + * @name 服务端口-TAG + */ +export const TAB_BATCH_PORT = ADMIN + "/tab"; + +/** + * @name 服务端口-APP用户列表 + */ +export const MI_USER_PORT = ADMIN + "/miaouser"; + +/** + * @name 服务端口-视频反馈列表 + */ +export const FEEDBACK_PORT = ADMIN + "/feedback"; + +/** + * @name 服务端口-搜索词管理 + */ +export const SEARCH_PORT = ADMIN + "/search"; +/** + * @name 服务端口-站点 + */ +export const SITE_PORT = ADMIN + "/site"; + +/** + * @name 服务端口-推广等级 + */ +export const SPREAD_PORT = ADMIN + "/spread"; +/** + * @name 服务端口-分享管理 + */ +export const SHARE_PORT = ADMIN + "/share"; +/** + * @name 服务端口-邮箱管理 + */ +export const EMAIL_PORT = ADMIN + "/email"; +/** + * @name 服务端口-活动管理 + */ +export const ACTIVITY_PORT = ADMIN + "/activity"; +/** + * @name 服务端口-缓存管理 + */ +export const CACHE_PORT = SYSTEM_PORT + "/cache"; + +/** + * @name 服务端口-财务管理 + */ +//金币账户 +export const FINANCE_PORT = ADMIN + "/finance"; +export const ACCOUNT_PORT = FINANCE_PORT + "/account"; +//VIP +export const RECHARGE_PORT = FINANCE_PORT + "/recharge"; +export const ORDER_PORT = RECHARGE_PORT + "/order"; +export const PACKAGE_PORT = RECHARGE_PORT + "/package"; + +//渠道 +export const CHANNEL_PORT = ADMIN + "/channel"; diff --git a/src/api/helper/axiosCancel.ts b/src/api/helper/axiosCancel.ts new file mode 100644 index 0000000..dfa60cb --- /dev/null +++ b/src/api/helper/axiosCancel.ts @@ -0,0 +1,47 @@ +// ? 暂未使用,目前使用全局 Loading 来控制重复请求 +import { CustomAxiosRequestConfig } from "../index"; +import qs from "qs"; + +// 声明一个 Map 用于存储每个请求的标识 和 取消函数 +let pendingMap = new Map(); + +// 序列化参数 +export const getPendingUrl = (config: CustomAxiosRequestConfig) => + [config.method, config.url, qs.stringify(config.data), qs.stringify(config.params)].join("&"); + +export class AxiosCanceler { + /** + * @description: 添加请求 + * @param {Object} config + * @return void + */ + addPending(config: CustomAxiosRequestConfig) { + // 在请求开始前,对之前的请求做检查取消操作 + this.removePending(config); + const url = getPendingUrl(config); + const controller = new AbortController(); + config.signal = controller.signal; + pendingMap.set(url, controller); + } + + /** + * @description: 移除请求 + * @param {Object} config + */ + removePending(config: CustomAxiosRequestConfig) { + const url = getPendingUrl(config); + // 如果在 pending 中存在当前请求标识,需要取消当前请求 + const controller = pendingMap.get(url); + controller && controller.abort(); + } + + /** + * @description: 清空所有pending + */ + removeAllPending() { + pendingMap.forEach(controller => { + controller && controller.abort(); + }); + pendingMap.clear(); + } +} diff --git a/src/api/helper/checkStatus.ts b/src/api/helper/checkStatus.ts new file mode 100644 index 0000000..79a3810 --- /dev/null +++ b/src/api/helper/checkStatus.ts @@ -0,0 +1,43 @@ +import { ElMessage } from "element-plus"; + +/** + * @description: 校验网络请求状态码 + * @param {Number} status + * @return void + */ +export const checkStatus = (status: number) => { + switch (status) { + case 400: + ElMessage.error("请求失败!请您稍后重试"); + break; + case 401: + ElMessage.error("登录失效!请您重新登录"); + break; + case 403: + ElMessage.error("当前账号无权限访问!"); + break; + case 404: + ElMessage.error("你所访问的资源不存在!"); + break; + case 405: + ElMessage.error("请求方式错误!请您稍后重试"); + break; + case 408: + ElMessage.error("请求超时!请您稍后重试"); + break; + case 500: + ElMessage.error("服务异常!"); + break; + case 502: + ElMessage.error("网关错误!"); + break; + case 503: + ElMessage.error("服务不可用!"); + break; + case 504: + ElMessage.error("网关超时!"); + break; + default: + ElMessage.error("请求失败!"); + } +}; diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..cec53a7 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,110 @@ +import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosResponse } from "axios"; +import { showFullScreenLoading, tryHideFullScreenLoading } from "@/config/serviceLoading"; +import { LOGIN_URL } from "@/config"; +import { ElMessage } from "element-plus"; +import { ResultData } from "@/api/interface"; +import { ResultEnum } from "@/enums/httpEnum"; +import { checkStatus } from "./helper/checkStatus"; +import { useUserStore } from "@/stores/modules/user"; +import router from "@/routers"; + +export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig { + noLoading?: boolean; +} + +const config = { + // 默认地址请求地址,可在 .env.** 文件中修改 + baseURL: import.meta.env.VITE_API_URL as string, + // 设置超时时间 + timeout: ResultEnum.TIMEOUT as number + // 跨域时候允许携带凭证 + // withCredentials: true +}; + +class RequestHttp { + service: AxiosInstance; + public constructor(config: AxiosRequestConfig) { + // instantiation + this.service = axios.create(config); + + /** + * @description 请求拦截器 + * 客户端发送请求 -> [请求拦截器] -> 服务器 + * token校验(JWT) : 接受服务器返回的 token,存储到 vuex/pinia/本地储存当中 + */ + this.service.interceptors.request.use( + (config: CustomAxiosRequestConfig) => { + const userStore = useUserStore(); + // 当前请求不需要显示 loading,在 api 服务中通过指定的第三个参数: { noLoading: true } 来控制 + + config.noLoading || showFullScreenLoading(); + if (config.headers && typeof config.headers.set === "function") { + config.headers.set("admin-token", userStore.token); + } + return config; + }, + (error: AxiosError) => { + return Promise.reject(error); + } + ); + + /** + * @description 响应拦截器 + * 服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息 + */ + this.service.interceptors.response.use( + (response: AxiosResponse) => { + const { data } = response; + const userStore = useUserStore(); + tryHideFullScreenLoading(); + // 登陆失效 + if (data.code == ResultEnum.OVERDUE) { + userStore.setToken(""); + router.replace(LOGIN_URL); + ElMessage.error(data.msg); + return Promise.reject(data); + } + // 全局错误信息拦截(防止下载文件的时候返回数据流,没有 code 直接报错) + if (data.code && data.code !== ResultEnum.SUCCESS) { + ElMessage.error(data.message); + return Promise.reject(data); + } + // 成功请求(在页面上除非特殊情况,否则不用处理失败逻辑) + return data; + }, + async (error: AxiosError) => { + const { response } = error; + tryHideFullScreenLoading(); + // 请求超时 && 网络错误单独判断,没有 response + if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时!请您稍后重试"); + if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误!请您稍后重试"); + // 根据服务器响应的错误状态码,做不同的处理 + if (response) checkStatus(response.status); + // 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面 + if (!window.navigator.onLine) router.replace("/500"); + return Promise.reject(error); + } + ); + } + + /** + * @description 常用请求方法封装 + */ + get(url: string, params?: object, _object = {}): Promise> { + return this.service.get(url, { params, ..._object }); + } + post(url: string, params?: object | string, _object = {}): Promise> { + return this.service.post(url, params, _object); + } + put(url: string, params?: object, _object = {}): Promise> { + return this.service.put(url, params, _object); + } + delete(url: string, params?: any, _object = {}): Promise> { + return this.service.delete(url, { params, ..._object }); + } + download(url: string, params?: object, _object = {}): Promise { + return this.service.post(url, params, { ..._object, responseType: "blob" }); + } +} + +export default new RequestHttp(config); diff --git a/src/api/interface/activity/drive.ts b/src/api/interface/activity/drive.ts new file mode 100644 index 0000000..cdbc2af --- /dev/null +++ b/src/api/interface/activity/drive.ts @@ -0,0 +1,30 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace DriveList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + a_id?: number; + } + // 删除接口 + export interface delParams { + a_id?: string; + } + // 列表接口响应 + export interface ResList { + a_id: number; + a_status: any; + code: any; + name: any; + config: any; + free_vip_day: any; + value: any; + description: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/activity/manage.ts b/src/api/interface/activity/manage.ts new file mode 100644 index 0000000..a5deeef --- /dev/null +++ b/src/api/interface/activity/manage.ts @@ -0,0 +1,33 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ManageList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + a_id?: number; + a_code: any; + a_name: any; + a_config: any; + a_status: any; + } + // 删除接口 + export interface delParams { + a_id?: string; + } + // 列表接口响应 + export interface ResList { + a_id: number; + a_code: any; + a_name: any; + a_config: any; + description: any; + value: any; + a_status: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/by.ts b/src/api/interface/ad/by.ts new file mode 100644 index 0000000..1105efd --- /dev/null +++ b/src/api/interface/ad/by.ts @@ -0,0 +1,40 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ByList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + byrz_id?: number; + byrz_mingzi: string; + } + // 删除接口 + export interface delParams { + byrz_id?: string; + } + // 列表接口响应 + export interface ResList { + byrz_id?: number; + byrz_mingzi: string; + byrz_nianling: any; + byrz_juli: any; + byrz_dianhua: any; + byrz_shijian: any; + byrz_jieshao: any; + byrz_jieshao_01: any; + byrz_jieshao_02: any; + byrz_diqu: any; + byrz_dizhi: any; + byrz_type: any; + byrz_cover: any; + byrz_cover_url: any; + byrz_img_url: any; + byrz_source_code: any; + created_at: string; + name: any; + url: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/config.ts b/src/api/interface/ad/config.ts new file mode 100644 index 0000000..33a495a --- /dev/null +++ b/src/api/interface/ad/config.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ConfigList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ggpz_id?: number; + ggpz_code: string; + ggpz_val: string; + ggpz_description: string; + } + // 删除接口 + export interface delParams { + ggpz_id?: string; + } + // 列表接口响应 + export interface ResList { + ggpz_id?: number; + ggpz_code: string; + ggpz_val: string; + ggpz_description: string; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/group.ts b/src/api/interface/ad/group.ts new file mode 100644 index 0000000..6bc2d63 --- /dev/null +++ b/src/api/interface/ad/group.ts @@ -0,0 +1,26 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace GroupList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ggfz_id?: number; + ggfz_name: string; + ggfz_code: string; + } + // 删除接口 + export interface delParams { + ggfz_id?: string; + } + // 列表接口响应 + export interface ResList { + ggfz_id?: number; + ggfz_name: string; + ggfz_code: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/lf.ts b/src/api/interface/ad/lf.ts new file mode 100644 index 0000000..8425722 --- /dev/null +++ b/src/api/interface/ad/lf.ts @@ -0,0 +1,43 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace LfList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + lf_id?: number; + lf_mingzi: string; + } + // 删除接口 + export interface delParams { + lf_id?: string; + } + // 列表接口响应 + export interface ResList { + lf_id?: number; + lf_mingzi: string; + lf_avatar: any; + lf_avatar_url: any; + lf_nianling: any; + lf_shengao: any; + lf_tizhong: any; + lf_xiongwei: any; + lf_juli: any; + lf_dianhua: any; + lf_shijian: any; + lf_xiangmu: any; + lf_jieshao: any; + lf_diqu: any; + lf_dizhi: any; + lf_type: any; + lf_cover: any; + lf_cover_url: any; + lf_source_code: any; + created_at: string; + name: any; + url: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/list.ts b/src/api/interface/ad/list.ts new file mode 100644 index 0000000..71581dc --- /dev/null +++ b/src/api/interface/ad/list.ts @@ -0,0 +1,102 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; + +export namespace adList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + gg_id?: number; + ggfz_id: any; + gg_lei_xing: any; + gg_tu_pian: any; + gg_wen_zi: any; + gg_tiao_zhuan_di_zhi: any; + } + // 删除接口 + export interface delParams { + gg_id?: string; + } + // 列表接口响应 + export interface ResList { + gg_id?: number; + ggfz_id: any; + gg_lei_xing: any; + gg_tu_pian: any; + gg_wen_zi: any; + gg_tiao_zhuan_di_zhi: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} +export namespace adList22 { + export interface List { + a_id: any; // 广告 ID + ag_id: string; // 广告分组 ID + at_content: any; // 广告分组 ID + a_title: string; // 广告标题 + a_content: any; // 广告内容 + a_status: any; // 是否显示:0=不显示,1=显示 + created_at?: string; // 添加时间 + updated_at?: string; // 更新时间 + target: any; + link_type: any; + cover: any; + a_type: any; + at_id: any; + si_id: any; + column?: any; + to?: any; + from?: any; + source_si_id?: any; + target_si_id?: any; + a_description: any; + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } + export interface delParams { + a_id?: string; + } + export interface batchParams { + a_id?: string; + cover?: string; + a_title?: string; + target?: string; + link_type?: string; + } + export interface cloneParams { + source_si_id?: string; + target_si_id?: string; + } + export interface batchReplaceParams { + si_id?: string; + column?: string; + to?: string; + from?: string; + } +} + +export namespace adTemplate { + export interface List { + at_id: number; // 广告模板 id + at_coce: string; // 广告模板分组编码 + at_name: string; // 广告模板名称 + at_description: string; // 广告模板描述 + at_content: any; // 广告模板内容。如:风格等信息 + created_at: string; // 添加时间 + updated_at: string; // 更新时间 + a_type: any; + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } +} diff --git a/src/api/interface/ad/yx.ts b/src/api/interface/ad/yx.ts new file mode 100644 index 0000000..52360c8 --- /dev/null +++ b/src/api/interface/ad/yx.ts @@ -0,0 +1,27 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace YxList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + yx_id?: number; + yx_ming_zi: string; + } + // 删除接口 + export interface delParams { + yx_id?: string; + } + // 列表接口响应 + export interface ResList { + yx_id?: number; + yx_ming_zi: any; + yx_tu_pian: any; + yx_lei_xing: any; + yx_tu_pian_url: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/zb.ts b/src/api/interface/ad/zb.ts new file mode 100644 index 0000000..e9c437d --- /dev/null +++ b/src/api/interface/ad/zb.ts @@ -0,0 +1,26 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ZbList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + zb_id?: number; + } + // 删除接口 + export interface delParams { + zb_id?: string; + } + // 列表接口响应 + export interface ResList { + zb_id?: number; + zb_ming_zi: any; + zb_dan_mu: any; + zb_feng_mian_url: any; + zb_feng_mian: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/ad/zy.ts b/src/api/interface/ad/zy.ts new file mode 100644 index 0000000..34c79aa --- /dev/null +++ b/src/api/interface/ad/zy.ts @@ -0,0 +1,45 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ZyList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + gfzy_id?: number; + gfzy_mingzi: string; + } + // 删除接口 + export interface delParams { + gfzy_id?: string; + } + // 列表接口响应 + export interface ResList { + gfzy_id?: number; + gfzy_mingzi: string; + gfzy_avatar: any; + gfzy_img: any; + gfzy_nianling: any; + gfzy_shengao: any; + gfzy_tizhong: any; + gfzy_xiongwei: any; + gfzy_juli: any; + gfzy_dianhua: any; + gfzy_shijian: any; + gfzy_xiangmu: any; + gfzy_jieshao: any; + gfzy_diqu: any; + gfzy_dizhi: any; + gfzy_type: any; + gfzy_cover: any; + gfzy_cover_url: any; + gfzy_img_url: any; + gfzy_source_code: any; + gfzy_xingbie: any; + created_at: string; + name: any; + url: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/atlas/list.ts b/src/api/interface/atlas/list.ts new file mode 100644 index 0000000..e37d99f --- /dev/null +++ b/src/api/interface/atlas/list.ts @@ -0,0 +1,47 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace AtlasList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + at_id?: number; + at_name: string; + at_status: number; + at_wonderful_site_id: any; + at_recommend_site_id: any; + at_cover: string; + at_tag: any; + at_source: any; + } + // 删除接口 + export interface delParams { + at_id?: string; + } + // 列表接口响应 + export interface ResList { + at_id: number; + at_name: string; + at_status: any; + at_wonderful_site_id: any; + at_recommend_site_id: any; + at_wonderful_site_id_detail: any; + at_recommend_site_id_detail: any; + at_cover: any; + at_cover_code: any; + at_cover_edit: any; + at_cover_detail: any; + searchText: any; + at_tag: any; + at_tag_detail: any; + t_name: any; + at_source: any; + at_source_detail: any; + fm_id: any; + name: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/channel/statistics.ts b/src/api/interface/channel/statistics.ts new file mode 100644 index 0000000..6181fe6 --- /dev/null +++ b/src/api/interface/channel/statistics.ts @@ -0,0 +1,29 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ChannelStatisticsList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + csc_id: number; + csc_name: string; + csc_code: string; + csc_statistical_code: string; + } + // 删除接口 + export interface delParams { + csc_id?: string; + } + // 列表接口响应 + export interface ResList { + csc_id: number; + csc_name: string; + csc_code: string; + csc_statistical_code: string; + created_at: string; + updated_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/email/content.ts b/src/api/interface/email/content.ts new file mode 100644 index 0000000..b03508d --- /dev/null +++ b/src/api/interface/email/content.ts @@ -0,0 +1,33 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ContentList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + ee_code?: string; + ee_id?: string; + } + // 保存接口 + export interface saveParams { + ec_id?: number; + } + // 删除接口 + export interface delParams { + ec_id?: string; + } + // 列表接口响应 + export interface ResList { + ec_id: number; + ec_from: any; + ec_html: any; + ec_subject: any; + ec_text: any; + ec_to: any; + ec_date: any; + ee_code: any; + ee_id: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/email/event.ts b/src/api/interface/email/event.ts new file mode 100644 index 0000000..a735a42 --- /dev/null +++ b/src/api/interface/email/event.ts @@ -0,0 +1,27 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace EventList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ee_id?: number; + } + // 删除接口 + export interface delParams { + ee_id?: string; + } + // 列表接口响应 + export interface ResList { + ee_id: number; + ee_code: any; + ee_accept_email: any; + ee_content: string; + ee_describe: string; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/finance/account/list.ts b/src/api/interface/finance/account/list.ts new file mode 100644 index 0000000..4cc4a19 --- /dev/null +++ b/src/api/interface/finance/account/list.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace AccountList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + mu_id?: number; + } + // 删除接口 + export interface delParams { + mu_id?: string; + } + // 列表接口响应 + export interface ResList { + mu_id: string; + uf_balance: any; + mu_nickname: any; + mu_username: number; + mu_email: any; + mu_is_vip: any; + expire_vip_day: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/finance/account/transaction.ts b/src/api/interface/finance/account/transaction.ts new file mode 100644 index 0000000..4e15206 --- /dev/null +++ b/src/api/interface/finance/account/transaction.ts @@ -0,0 +1,35 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace TransactionList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + ft_id?: number; + } + // 删除接口 + export interface delParams { + ft_id?: string; + } + + // 列表接口响应 + export interface ResList { + ft_id: number; + mu_id: number; + ft_order_no: string; + tp_purpose_code: any; + ft_operation: any; + ft_amount: any; + ft_remaining_balance: any; + ft_description: string; + tp_purpose: any; + mu_nickname: any; + mu_username: any; + mu_email: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/finance/recharge/feedback.ts b/src/api/interface/finance/recharge/feedback.ts new file mode 100644 index 0000000..16a756b --- /dev/null +++ b/src/api/interface/finance/recharge/feedback.ts @@ -0,0 +1,36 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace FeedbackList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + rf_id?: number; + rf_state: any; + } + // 删除接口 + export interface delParams { + rf_id?: string; + } + + // 列表接口响应 + export interface ResList { + rf_id: number; + vo_id: number; + rf_type: any; + rf_screenshot_detail: any; + rf_state: any; + vo_order_no: string; + vp_id: any; + vp_name: any; + rf_pay_time: any; + rf_description: string; + rf_contact: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/finance/recharge/order.ts b/src/api/interface/finance/recharge/order.ts new file mode 100644 index 0000000..c7b25a8 --- /dev/null +++ b/src/api/interface/finance/recharge/order.ts @@ -0,0 +1,38 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace OrderList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + vo_status?: any; + created_at_start?: any; + created_at_end?: any; + } + // 保存接口 + export interface saveParams { + vo_id?: number; + } + // 删除接口 + export interface delParams { + vo_id?: string; + } + // 列表接口响应 + export interface ResList { + vo_id: number; + mu_id: string; + vp_name: string; + vo_status: any; + vo_price: any; + vo_vip_day: number; + vo_order_no: number; + vo_out_order_no: string; + vo_out_channel_code: number; + vo_out_business_type: number; + vo_success_at: number; + mu_nickname: number; + mu_username: number; + mu_email: number; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/finance/recharge/package.ts b/src/api/interface/finance/recharge/package.ts new file mode 100644 index 0000000..5e96fd0 --- /dev/null +++ b/src/api/interface/finance/recharge/package.ts @@ -0,0 +1,42 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace PackageList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + vp_id?: number; + vp_name: string; + vp_vip_day: any; + vp_status: any; + vp_tag_price: number; + vp_real_price: number; + vp_best_describe: string; + vp_icon: string; + package_sort: number; + } + // 删除接口 + export interface delParams { + vp_id?: string; + } + + // 列表接口响应 + export interface ResList { + vp_id: number; + vp_name: string; + vp_vip_day: any; + vp_status: any; + vp_tag_price: number; + vp_real_price: number; + vp_best_describe: string; + vp_icon_detail: string; + vp_icon: any; + package_sort: any; + vp_sort: number; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/index.ts b/src/api/interface/index.ts new file mode 100644 index 0000000..7be8447 --- /dev/null +++ b/src/api/interface/index.ts @@ -0,0 +1,114 @@ +// 请求响应参数(不包含data) +export interface Result { + code: string; + message: string; +} + +// 请求响应参数(包含data) +export interface ResultData extends Result { + data: T; +} + +// 分页响应参数 +export interface ResPage { + item: T[]; + items: T[]; + page: number; + total: number; + limit: number; + total_pages: number; +} + +// 分页请求参数 +export interface ReqPage { + page: number; + limit: number; +} +// 分页请求参数 +export interface type { + type: any; +} + +// 文件上传模块 +export namespace Upload { + export interface ResFileUrl { + fileUrl: string; + } +} +// 文件下载模块 +export namespace Download { + export interface ResFileUrl { + type: number; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} + +// 执行任务 +export namespace Task { + export interface ResFileUrl { + msg_id: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} + +// 登录模块 +export namespace Login { + export interface ReqLoginForm { + au_name: string; + au_pwd: string; + } + export interface ResLogin { + admin_token: string; + } + export interface ResAuthButtons { + [key: string]: string[]; + } +} + +export namespace LogsList { + // 查询接口 + export interface ReqParams extends ReqPage { + pr_name?: string; + } + // 列表接口响应 + export interface ResList { + ol_id: number; // 否 ID + au_id: number; // 是 用户ID + au_name: string; // 是 用户名 + ol_description: string; // 是 操作日志 + c_id: number; // 是 公司id + created_at: string; // 是 添加时间 + updated_at: string; // 否 更新时间 + deleted_at: string; // 否 删除时间 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} + +export namespace NoticeSetting { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ntt_code: string; // 是 通知类型编码 + nt_status: number; // 是 是否启用,0=>否,1=>是 + ta_id: string; // 是 使用的机器人ID + nt_tagged_users: string; // 是 需要@的人的名字 + } + // 列表接口响应 + export interface ResList { + ntt_id: number; // 否 通知类型模板ID + ntt_name: string; // 是 通知类型的名称 + ntt_code: string; // 是 通知类型编码 + nt_status: number; // 是 是否启用,0=>否,1=>是 + ta_id: string; // 否 使用的机器人ID + telegram_account: any; // 是 使用的机器人详情 + nt_tagged_users: string; // 是 需要@的人的名字 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/manga/chapter.ts b/src/api/interface/manga/chapter.ts new file mode 100644 index 0000000..de40d32 --- /dev/null +++ b/src/api/interface/manga/chapter.ts @@ -0,0 +1,43 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ChapterList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + mhzj_id?: number; + mhxq_id: number; + mhzj_pai_xu: any; + mhzj_ming_zi: any; + mhzj_nei_rong: any; + mhzj_source_id: any; + mhzj_source_code: any; + } + export interface batchParams { + mhxq_id: number; + mhzj_id?: any; + } + // 删除接口 + export interface delParams { + mhzj_id?: string; + } + // 列表接口响应 + export interface ResList { + mhzj_id?: any; + mhxq_id: number; + mhzj_pai_xu: any; + mhzj_ming_zi: any; + mhzj_nei_rong: any; + mhzj_nei_rong_url: any; + mhzj_source_id: any; + mhzj_source_code: any; + cover_code: any; + created_at: string; + name: any; + url: any; + encrypted: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/manga/fenlei.ts b/src/api/interface/manga/fenlei.ts new file mode 100644 index 0000000..1d34ddd --- /dev/null +++ b/src/api/interface/manga/fenlei.ts @@ -0,0 +1,25 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace fenLeiList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + mhfl_id?: number; + mhfl_ming_zi: string; + mhfl_source_code: any; + } + // 删除接口 + export interface delParams { + mhfl_id?: string; + } + // 列表接口响应 + export interface ResList { + mhfl_id: any; + mhfl_ming_zi: string; + mhfl_source_code: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/manga/list.ts b/src/api/interface/manga/list.ts new file mode 100644 index 0000000..b52c030 --- /dev/null +++ b/src/api/interface/manga/list.ts @@ -0,0 +1,35 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace MangaList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + mhxq_id?: number; + } + // 删除接口 + export interface delParams { + mhxq_id?: string; + } + // 列表接口响应 + export interface ResList { + mhxq_id: number; + mhxq_ming_zi: any; + mhxq_cover: any; + mhfl_id: any; + mhxq_zuo_zhe: any; + mhxq_zhuang_tai: any; + mhxq_geng_xin_shi_jian: any; + mhxq_biao_qian: any; + mhxq_jian_jie: any; + mhxq_source_id: any; + mhxq_source_code: any; + created_at: string; + name: any; + url: any; + https_cover_url: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/miUser/list.ts b/src/api/interface/miUser/list.ts new file mode 100644 index 0000000..8fc47b7 --- /dev/null +++ b/src/api/interface/miUser/list.ts @@ -0,0 +1,47 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace MiUserList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + mu_status?: any; + mu_vip?: any; + mu_start_time?: any; + mu_end_time?: any; + si_id?: any; + } + // 保存接口 + export interface saveParams { + mu_id?: number; + mu_name: string; + mu_nickname: string; + mu_status: any; + mu_email: string; + mu_pwd: string; + mu_referrer_id: any; + mu_vip_expired: any; + } + // 删除接口 + export interface delParams { + mu_id?: string; + } + // 列表接口响应 + export interface ResList { + mu_id: number; + si_id: any; + si_name: any; + mu_name: string; + mu_nickname: string; + mu_status: any; + mu_email: string; + mu_pwd: string; + mu_referrer_id: any; + mu_vip: any; + mu_email_verified: any; + mu_channel_code: any; + mu_channel_domain: any; + mu_avatar: any; + mu_vip_expired: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/novel/chapter.ts b/src/api/interface/novel/chapter.ts new file mode 100644 index 0000000..f44a027 --- /dev/null +++ b/src/api/interface/novel/chapter.ts @@ -0,0 +1,30 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ChapterList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + xszj_id?: number; + xsxq_id: any; + xszj_nei_rong: any; + xszj_ming_zi: any; + xszj_pai_xu: any; + } + // 删除接口 + export interface delParams { + xszj_id?: string; + } + // 列表接口响应 + export interface ResList { + xszj_id?: number; + xsxq_id: any; + xszj_nei_rong: any; + xszj_ming_zi: any; + xszj_pai_xu: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/novel/fenlei.ts b/src/api/interface/novel/fenlei.ts new file mode 100644 index 0000000..c06c40c --- /dev/null +++ b/src/api/interface/novel/fenlei.ts @@ -0,0 +1,26 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace fenLeiList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + xsfl_id?: number; + xsfl_name: string; + xsfl_source_code: string; + } + // 删除接口 + export interface delParams { + xsfl_id?: string; + } + // 列表接口响应 + export interface ResList { + xsfl_id: any; + xsfl_name: any; + items: any; + xsfl_source_code: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/novel/list.ts b/src/api/interface/novel/list.ts new file mode 100644 index 0000000..30dd300 --- /dev/null +++ b/src/api/interface/novel/list.ts @@ -0,0 +1,35 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace NovelList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: number; + } + // 保存接口 + export interface saveParams { + n_id?: number; + n_name: string; + n_author: string; + n_cover: any; + n_tags: any; + n_source_id: any; + n_at_status: any; + n_slide_status: any; + n_type: any; + n_last_update: string; + } + // 删除接口 + export interface delParams { + n_id?: string; + } + // 列表接口响应 + export interface ResList { + xsxq_tag: any; + xsxq_id: any; + items: any; + https_cover_url: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/searchGroup/list.ts b/src/api/interface/searchGroup/list.ts new file mode 100644 index 0000000..1716ab3 --- /dev/null +++ b/src/api/interface/searchGroup/list.ts @@ -0,0 +1,26 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SearchGroupList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sg_id?: number; + sg_name: string; + sg_order: number; + } + // 删除接口 + export interface delParams { + sg_id?: string; + } + // 列表接口响应 + export interface ResList { + sg_id: number; + sg_name: string; + sg_order: number; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/searchKey/list.ts b/src/api/interface/searchKey/list.ts new file mode 100644 index 0000000..928a2f3 --- /dev/null +++ b/src/api/interface/searchKey/list.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SearchKeyList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sw_id?: number; + sw_title: string; + sw_status: string; + sw_html_path: string; + } + // 删除接口 + export interface delParams { + sw_id?: string; + } + // 列表接口响应 + export interface ResList { + sw_id?: number; + sw_title: any; + sw_status: any; + sw_html_path: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/share/link.ts b/src/api/interface/share/link.ts new file mode 100644 index 0000000..aa88084 --- /dev/null +++ b/src/api/interface/share/link.ts @@ -0,0 +1,25 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace LinkList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sl_id?: number; + sl_link: any; + } + // 删除接口 + export interface delParams { + sl_id?: string; + } + // 列表接口响应 + export interface ResList { + sl_id: number; + sl_link: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/share/speech.ts b/src/api/interface/share/speech.ts new file mode 100644 index 0000000..47e3ab8 --- /dev/null +++ b/src/api/interface/share/speech.ts @@ -0,0 +1,25 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SpeechList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ss_id?: number; + ss_speech: any; + } + // 删除接口 + export interface delParams { + ss_id?: string; + } + // 列表接口响应 + export interface ResList { + ss_id: number; + ss_speech: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/site/list.ts b/src/api/interface/site/list.ts new file mode 100644 index 0000000..977a986 --- /dev/null +++ b/src/api/interface/site/list.ts @@ -0,0 +1,66 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SiteList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + si_id?: number; + si_code: string; + si_status: any; + si_name: any; + si_url: any; + si_cinema: any; + si_email: any; + si_retrieve_email: any; + si_website_bulletin: any; + si_customer_service: any; + si_retrieve_page: any; + si_logo_url: any; + si_logo: any; + si_route_url: any; + si_statistical_code: any; + si_guide_statistical_code: any; + si_group_chat_address: any; + si_cdn_url: any; + si_template: any; + si_jenkins_url: any; + } + // 删除接口 + export interface delParams { + si_id?: string; + } + export interface buildParams { + si_jenkins_url?: string; + } + // 列表接口响应 + export interface ResList { + si_id: number; + si_code: string; + si_status: any; + si_name: any; + si_url: any; + si_cinema: any; + si_email: any; + si_retrieve_email: any; + si_website_bulletin: any; + si_customer_service: any; + si_retrieve_page: any; + si_group_chat_address: any; + si_logo_url: any; + si_statistical_code: any; + si_guide_statistical_code: any; + si_logo: any; + si_route_url: any; + created_at: string; + si_cdn_url: any; + si_template: any; + si_deploy_site_jenkins: any; + si_deploy_landing_jenkins: any; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/site/subject/fomart/group.ts b/src/api/interface/site/subject/fomart/group.ts new file mode 100644 index 0000000..fe5a20d --- /dev/null +++ b/src/api/interface/site/subject/fomart/group.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace GroupList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sfg_id?: number; + sfg_name: string; + sfg_description: string; + + } + // 删除接口 + export interface delParams { + sfg_id?: string; + } + + // 列表接口响应 + export interface ResList { + sfg_id?: number; + sfg_name: string; + sfg_description: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/site/subject/fomart/list.ts b/src/api/interface/site/subject/fomart/list.ts new file mode 100644 index 0000000..af6cf5c --- /dev/null +++ b/src/api/interface/site/subject/fomart/list.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SubjectFomartList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sf_id?: number; + sf_name: string; + sf_description: string; + + } + // 删除接口 + export interface delParams { + sf_id?: string; + } + + // 列表接口响应 + export interface ResList { + sf_id?: number; + sf_name: string; + sf_description: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/spread/list.ts b/src/api/interface/spread/list.ts new file mode 100644 index 0000000..2d9fc51 --- /dev/null +++ b/src/api/interface/spread/list.ts @@ -0,0 +1,27 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace SpreadList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + rl_id?: number; + rl_level: any; + rl_commission_percentage: any; + } + // 删除接口 + export interface delParams { + rl_id?: string; + } + // 列表接口响应 + export interface ResList { + rl_id: number; + rl_level: any; + rl_commission_percentage: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/spread/referral.ts b/src/api/interface/spread/referral.ts new file mode 100644 index 0000000..3a77b27 --- /dev/null +++ b/src/api/interface/spread/referral.ts @@ -0,0 +1,33 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ReferralList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + re_id?: string; + re_level?: string; + have_referral_people?: string; + } + // 保存接口 + export interface saveParams { + mu_id?: number; + } + // 删除接口 + export interface delParams { + mu_id?: string; + } + // 列表接口响应 + export interface ResList { + mu_id: number; + mu_username: any; + mu_nickname: any; + rl_level: any; + re_referral_num: any; + re_recharge_amount: any; + re_commission_amount: any; + rl_commission_percentage: any; + created_at: string; + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/ad.ts b/src/api/interface/system/ad.ts new file mode 100644 index 0000000..d3430e4 --- /dev/null +++ b/src/api/interface/system/ad.ts @@ -0,0 +1,94 @@ +import { ReqPage } from "@/api/interface/index"; + +export namespace adGroup { + export interface List { + ag_id: number; // 广告分组 id + at_id: number; // 广告模板 + ag_code: string; // 广告分组编码 + ag_name: string; // 广告分组名 + created_at: string; // 添加时间 + updated_at: string; // 更新时间 + ag_description: string; // 更新时间 + } + export interface saveParams { + ag_id: number; + ag_name: any; + ag_description: any; + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } +} + +export namespace adList { + export interface List { + a_id: any; // 广告 ID + ag_id: string; // 广告分组 ID + at_content: any; // 广告分组 ID + a_title: string; // 广告标题 + a_content: any; // 广告内容 + a_status: any; // 是否显示:0=不显示,1=显示 + created_at?: string; // 添加时间 + updated_at?: string; // 更新时间 + target: any; + link_type: any; + cover: any; + a_type: any; + at_id: any; + si_id: any; + column?: any; + to?: any; + from?: any; + source_si_id?: any; + target_si_id?: any; + a_description: any; + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } + export interface delParams { + a_id?: string; + } + export interface batchParams { + a_id?: string; + cover?: string; + a_title?: string; + target?: string; + link_type?: string; + } + export interface cloneParams { + source_si_id?: string; + target_si_id?: string; + } + export interface batchReplaceParams { + si_id?: string; + column?: string; + to?: string; + from?: string; + } +} + +export namespace adTemplate { + export interface List { + at_id: number; // 广告模板 id + at_coce: string; // 广告模板分组编码 + at_name: string; // 广告模板名称 + at_description: string; // 广告模板描述 + at_content: any; // 广告模板内容。如:风格等信息 + created_at: string; // 添加时间 + updated_at: string; // 更新时间 + a_type: any; + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } +} diff --git a/src/api/interface/system/adminUser.ts b/src/api/interface/system/adminUser.ts new file mode 100644 index 0000000..39ea2d1 --- /dev/null +++ b/src/api/interface/system/adminUser.ts @@ -0,0 +1,32 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace adminUserList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + au_name: number; // Y 用户名 + ar_id: number; // Y 角色ID + au_id?: number; // N 用户id[提交修改,不提交新增] + au_pwd: string; // N 用户密码 + c_id: number; // N 公司id[超级管理员/总公司,设置用户,必须传送c_id也就是公司] + } + // 删除接口 + export interface delParams { + au_id?: string; + } + // 列表接口响应 + export interface ResList { + au_id: number; // Y 用户id + au_name: string; // Y 用户名 + ar_id: number; // Y 角色ID + c_id: number; // Y 公司ID + created_at: string; // Y 添加时间 + updated_at: string; // Y 更新时间 + au_pwd: string; // + } + + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/bot.ts b/src/api/interface/system/bot.ts new file mode 100644 index 0000000..92c9adf --- /dev/null +++ b/src/api/interface/system/bot.ts @@ -0,0 +1,31 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace BotSetting { + // 查询接口 + export interface ReqParams extends ReqPage { + pr_name?: string; + } + // 保存接口 + export interface saveParams { + ta_id?: number; // 否 ID ,有则修改,无则新增 + ta_name: string; // 是 机器人名字 + ta_token: string; // 是 机器人TOKEN + ta_chat_id: string; // 是 机器人群ID + } + // 删除接口 + export interface delParams { + ta_id?: string; + } + // 列表接口响应 + export interface ResList { + ta_id: number; // 否 ID + ta_name: string; // 是 机器人名字 + ta_token: string; // 是 机器人TOKEN + ta_chat_id: string; // 是 机器人群ID + c_id: number; // 是 公司id + created_at: string; // 是 添加时间 + updated_at: string; // 否 更新时间 + deleted_at: string; // 否 删除时间 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/caChe/es.ts b/src/api/interface/system/caChe/es.ts new file mode 100644 index 0000000..c8c13a6 --- /dev/null +++ b/src/api/interface/system/caChe/es.ts @@ -0,0 +1,23 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace EsList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + index_name: any; + } + // 删除接口 + export interface delParams {} + // 列表接口响应 + export interface ResList { + index: any; + name: any; + index_name: any; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/caChe/manage.ts b/src/api/interface/system/caChe/manage.ts new file mode 100644 index 0000000..9455a38 --- /dev/null +++ b/src/api/interface/system/caChe/manage.ts @@ -0,0 +1,33 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ManageList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + key: any; + } + // 删除接口 + export interface delParams { + key?: any; + cache_tag?: any; + } + // 列表接口响应 + export interface ResList { + key: any; + suffix: any; + prefix: any; + cache_tag: any; + value: any; + name: any; + cache_tag_name: any; + item: any; + p_tag: any; + p_id: any; + children: any; + length: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/company.ts b/src/api/interface/system/company.ts new file mode 100644 index 0000000..d3e163a --- /dev/null +++ b/src/api/interface/system/company.ts @@ -0,0 +1,41 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace Company { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + c_id?: number; + c_superpower: number; + c_code: string; + c_name: string; + c_sign_key: string; + c_notify_url: string; + c_withdrawal_rate?: number; //int 是 提现费率 + c_min_withdrawal_amount?: number; //int 是 起提金额 + c_free_withdrawal_amount?: number; //int 是 免手续费提现金额 + } + // 删除接口 + export interface delParams { + c_id?: string; + } + // 列表接口响应 + export interface ResList { + c_id: number; // Y id + c_superpower: number; // Y 是否拥有所有数据权限:0=否,1=是 + c_code: string; // Y 公司编码 + c_name: string; // Y 公司名称 + c_init_user: string; // Y 创建时间 + c_init_pwd: string; // Y 更新时间 + created_at: string; // Y + updated_at: string; // Y + c_sign_key?: string; // Y + c_notify_url?: string; // Y + c_withdrawal_rate?: number; //int 是 提现费率 + c_min_withdrawal_amount?: number; //int 是 起提金额 + c_free_withdrawal_amount?: number; //int 是 免手续费提现金额 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/config.ts b/src/api/interface/system/config.ts new file mode 100644 index 0000000..f1793a2 --- /dev/null +++ b/src/api/interface/system/config.ts @@ -0,0 +1,27 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace ConfigList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + sc_id?: number; + sc_code: string; + sc_val: string; + sc_description: string; + } + // 删除接口 + export interface delParams { + sc_id: string; + } + // 列表接口响应 + export interface ResList { + sc_id: number; + sc_code: string; + sc_val: string; + sc_description: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/endpoint.ts b/src/api/interface/system/endpoint.ts new file mode 100644 index 0000000..20a75f3 --- /dev/null +++ b/src/api/interface/system/endpoint.ts @@ -0,0 +1,24 @@ +// import { ReqPage, ResultData } from "@/api/interface/index"; +import { ReqPage } from "@/api/interface/index"; + +export namespace Endpoint { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + export interface saveParams { + zydd_id?: number; + zydd_domain: any; + } + // 列表接口响应 + export interface List { + zydd_id: number; + zydd_domain: any; + zydd_ming_zi: any; + zydd_code: any; + created_at: string; + } + export interface delParams { + zydd_id?: string; + } +} diff --git a/src/api/interface/system/endpointGroup.ts b/src/api/interface/system/endpointGroup.ts new file mode 100644 index 0000000..9424ef0 --- /dev/null +++ b/src/api/interface/system/endpointGroup.ts @@ -0,0 +1,23 @@ +// import { ReqPage, ResultData } from "@/api/interface/index"; +import { ReqPage } from "@/api/interface/index"; + +export namespace EndpointGroup { + // 列表接口响应 + export interface List { + reg_id: number; // 资源端点分组 ID + reg_code: string; // 资源端点分组编码 + reg_name: string; // 资源端点分组名称 + reg_description: string; + created_at: string; // 添加时间 + updated_at: string; // 更新时间 + } + // 查询接口 + export interface ReqParams extends ReqPage { + page: number; + limit: number; + key?: string; + } + export interface delParams { + reg_id?: string; + } +} diff --git a/src/api/interface/system/gather.ts b/src/api/interface/system/gather.ts new file mode 100644 index 0000000..78feb49 --- /dev/null +++ b/src/api/interface/system/gather.ts @@ -0,0 +1,27 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace GatherList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + cjpz_id: any; + cjpz_val: string; + cjpz_code: string; + } + // 删除接口 + export interface delParams { + cjpz_id?: string; + } + // 列表接口响应 + export interface ResList { + cjpz_id: number; + cjpz_val: string; + cjpz_code: any; + cjpz_description: string; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/logs.ts b/src/api/interface/system/logs.ts new file mode 100644 index 0000000..23a0e2e --- /dev/null +++ b/src/api/interface/system/logs.ts @@ -0,0 +1,21 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace LogsList { + // 查询接口 + export interface ReqParams extends ReqPage { + pr_name?: string; + } + + // 列表接口响应 + export interface ResList { + ol_id: number; // 否 ID + au_id: number; // 是 用户ID + au_name: string; // 是 用户名 + ol_description: string; // 是 操作日志 + c_id: number; // 是 公司id + created_at: string; // 是 添加时间 + updated_at: string; // 否 更新时间 + deleted_at: string; // 否 删除时间 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/node.ts b/src/api/interface/system/node.ts new file mode 100644 index 0000000..cf00a34 --- /dev/null +++ b/src/api/interface/system/node.ts @@ -0,0 +1,36 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace NodeList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + + // 保存接口 + export interface saveParams { + an_id: number; + an_name: string; + an_code: string; + an_is_dir: number; + an_pid: number; + an_is_hidden: number; + } + // 删除接口 + export interface delParams { + an_id?: string; + } + // 列表接口响应 + export interface ResList { + id: number; + an_id: number; + an_pid: number; + an_name: string; + an_code: string; + label: string; + an_is_dir: number; + an_is_hidden: number; + created_at: number; + children: ResList[]; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/notice.ts b/src/api/interface/system/notice.ts new file mode 100644 index 0000000..a0b70b0 --- /dev/null +++ b/src/api/interface/system/notice.ts @@ -0,0 +1,30 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace NoticeSetting { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ntt_code: string; // 是 通知类型编码 + nt_status: number; // 是 是否启用,0=>否,1=>是 + ta_id: string; // 是 使用的机器人ID + nt_tagged_users: string; // 是 需要@的人的名字 + } + // 删除接口 + // export interface delParams { + // ta_id?: string; + // } + // 列表接口响应 + export interface ResList { + ntt_id: number; // 否 通知类型模板ID + ntt_name: string; // 是 通知类型的名称 + ntt_code: string; // 是 通知类型编码 + nt_status: number; // 是 是否启用,0=>否,1=>是 + ta_id: any; // 否 使用的机器人ID + telegram_account: any; // 是 使用的机器人详情 + nt_tagged_users: string; // 是 需要@的人的名字 + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/role.ts b/src/api/interface/system/role.ts new file mode 100644 index 0000000..d40151f --- /dev/null +++ b/src/api/interface/system/role.ts @@ -0,0 +1,32 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace RoleList { + export interface ListReq extends ReqPage {} + export interface ListResp { + ar_id: number; + an_id?: string; + ar_name: string; + created_at: string; + updated_at: string; + admin_role_node: admin_role_node[]; + an_ids: string; + } + + export interface CreateReq { + ar_name: string; + ar_id: number; + an_id: string; + } + + export interface CreateResp extends ResultData {} + + export interface DeleteReq { + ar_id: string; + } + + export interface admin_role_node { + an_id: number; + ar_id: number; + } + + export interface DeleteResp extends ResultData {} +} diff --git a/src/api/interface/system/taskPlan.ts b/src/api/interface/system/taskPlan.ts new file mode 100644 index 0000000..70118b9 --- /dev/null +++ b/src/api/interface/system/taskPlan.ts @@ -0,0 +1,34 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace taskPlan { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + pt_enable: number; // Y 任务开关,0=关闭,1=开启 + pt_limit: number; // Y 任务频率,单位:秒 + pt_id?: number; // Y ID + pt_name: any; + } + // 删除接口 + export interface delParams { + pt_id?: string; + } + // 列表接口响应 + export interface ResList { + pt_id: number; // Y id + pt_enable: any; // Y 任务开关,0=关闭,1=开启 + pt_limit?: any | undefined; // Y 任务频率 + created_at: any; // Y 创建时间 + pt_name: any; + pt_last_exec: any; + } + // map接口 + export interface ResMap { + p_id: number; + p_name: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/system/webRoute.ts b/src/api/interface/system/webRoute.ts new file mode 100644 index 0000000..0042607 --- /dev/null +++ b/src/api/interface/system/webRoute.ts @@ -0,0 +1,30 @@ +interface AdminRoleNode { + an_id: number; + an_pid: number; + an_name: string; + an_code: string; + //children?: AdminRoleNode[]; + children?: AdminRoleNode[] | undefined; +} +export interface AdminRole { + admin_role_node: AdminRoleNode; + an_id: number; + ar_id: number; + an_name: string; +} +export interface WebRoute { + path: string; + name: string; + component?: string; + meta: { + an_id?: number; + icon: string; + title: string; + isLink: string; + isHide: boolean; + isFull: boolean; + isAffix: boolean; + isKeepAlive: boolean; + }; + children?: WebRoute[]; +} diff --git a/src/api/interface/tab/list.ts b/src/api/interface/tab/list.ts new file mode 100644 index 0000000..e6b452f --- /dev/null +++ b/src/api/interface/tab/list.ts @@ -0,0 +1,44 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace TabList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + } + // 保存接口 + export interface saveParams { + tab_id?: number; + tab_name: string; + tab_code: string; + tab_iframe_url: string; + tab_open_mode: any; + tab_tag_status: any; + tab_tag_type: any; + tab_tag: any; + tab_icon: any; + tab_highlight_icon: any; + tab_order: number; + } + // 删除接口 + export interface delParams { + tab_id?: string; + } + // 列表接口响应 + export interface ResList { + tab_id: number; + tab_name: string; + tab_code: string; + tab_iframe_url: string; + tab_open_mode: any; + tab_tag_detail: any; + tab_tag_status: any; + tab_tag_type: any; + tab_tag: any; + tab_icon: any; + tab_highlight_icon: any; + searchText: any; + tab_order: number; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/tag/list.ts b/src/api/interface/tag/list.ts new file mode 100644 index 0000000..6a96603 --- /dev/null +++ b/src/api/interface/tag/list.ts @@ -0,0 +1,40 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace TagList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + t_type?: any; + t_hidden?: any; + } + // 保存接口 + export interface saveParams { + t_id?: number; + t_name: string; + t_hidden: number; + t_type: number; + t_order: number; + t_logo: string; + t_probability: any; + } + export interface batchParams { + t_id?: number; + t_probability: any; + } + // 删除接口 + export interface delParams { + t_id?: string; + } + // 列表接口响应 + export interface ResList { + t_id: any; + t_name: string; + t_hidden: any; + t_type: number; + t_order: number; + t_logo: string; + created_at: string; + t_probability: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/video/fenlei.ts b/src/api/interface/video/fenlei.ts new file mode 100644 index 0000000..f5fdd12 --- /dev/null +++ b/src/api/interface/video/fenlei.ts @@ -0,0 +1,28 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace fenLeiList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + fl_id?: number; + fl_mingzi: string; + fl_leixing: any; + } + // 删除接口 + export interface delParams { + fl_id?: string; + } + // 列表接口响应 + export interface ResList { + fl_id: any; + fl_mingzi: any; + items: any; + fl_leixing: any; + fl_pid: any; + children: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/video/list.ts b/src/api/interface/video/list.ts new file mode 100644 index 0000000..3bc61f8 --- /dev/null +++ b/src/api/interface/video/list.ts @@ -0,0 +1,41 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace VideoList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + sp_is_vip?: string; + fl_id?: string; + } + // 保存接口 + export interface saveParams { + sp_id?: number; + sp_name: string; + sp_fengmian: any; + } + export interface batchParams { + sp_id?: any; + v_wonderful_site_id: any; + v_recommend_site_id: any; + } + // 删除接口 + export interface delParams { + sp_id?: string; + } + // 列表接口响应 + export interface ResList { + sp_id: any; + sp_name: string; + fl_id: any; + sp_fangwen: any; + sp_fengmian: any; + sp_biaoqian: any; + sp_is_vip: any; + sp_fengmian_url: any; + sp_shichang: any; + sp_source_code: any; + created_at: any; + message: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/video/nvyou.ts b/src/api/interface/video/nvyou.ts new file mode 100644 index 0000000..0cd23c7 --- /dev/null +++ b/src/api/interface/video/nvyou.ts @@ -0,0 +1,24 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace nvYouList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + } + // 保存接口 + export interface saveParams { + ny_id?: number; + } + // 删除接口 + export interface delParams { + ny_id?: string; + } + // 列表接口响应 + export interface ResList { + ny_id: any; + ny_cover_url: any; + ny_pinyin: any; + ny_name: any; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/interface/videoFeedback/list.ts b/src/api/interface/videoFeedback/list.ts new file mode 100644 index 0000000..636750b --- /dev/null +++ b/src/api/interface/videoFeedback/list.ts @@ -0,0 +1,34 @@ +import { ReqPage, ResultData } from "@/api/interface/index"; +export namespace videoFeedbackList { + // 查询接口 + export interface ReqParams extends ReqPage { + key?: string; + vf_reason?: any; + } + // 保存接口 + export interface saveParams { + vf_id?: number; + v_name: string; + mu_name: number; + vf_status: any; + vf_reason: string; + vf_remarks: number; + } + // 删除接口 + export interface delParams { + vf_id?: string; + } + // 列表接口响应 + export interface ResList { + vf_id: number; + v_name: string; + mu_name: number; + vf_status: any; + vf_reason: string; + vf_ip: string; + vf_remarks: number; + created_at: string; + } + // 保存删除响应接口 + export interface ResData extends ResultData {} +} diff --git a/src/api/modules/activity/drive.ts b/src/api/modules/activity/drive.ts new file mode 100644 index 0000000..bc3ba7e --- /dev/null +++ b/src/api/modules/activity/drive.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { DriveList } from "@/api/interface/activity/drive"; +import { ACTIVITY_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 活动列表 + */ +export const getList = (params: DriveList.ReqParams) => { + return http.get>(ACTIVITY_PORT + `/drive/list`, params); +}; +/** + * @name 设置活动 + */ +export const saveData = (params: DriveList.saveParams) => { + return http.post>(ACTIVITY_PORT + `/manage/save`, params); +}; +/** + * @name 删除活动 + */ +export const deleteItem = (params: DriveList.delParams) => { + return http.post>(ACTIVITY_PORT + `/drive/del`, params); +}; diff --git a/src/api/modules/activity/manage.ts b/src/api/modules/activity/manage.ts new file mode 100644 index 0000000..62ee11e --- /dev/null +++ b/src/api/modules/activity/manage.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ManageList } from "@/api/interface/activity/manage"; +import { ACTIVITY_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 分享链接列表 + */ +export const getList = (params: ManageList.ReqParams) => { + return http.get>(ACTIVITY_PORT + `/manage/list`, params); +}; +/** + * @name 设置分享链接 + */ +export const saveData = (params: ManageList.saveParams) => { + return http.post>(ACTIVITY_PORT + `/manage/save`, params); +}; +/** + * @name 删除分享链接 + */ +export const deleteItem = (params: ManageList.delParams) => { + return http.post>(ACTIVITY_PORT + `/manage/del`, params); +}; diff --git a/src/api/modules/ad/by.ts b/src/api/modules/ad/by.ts new file mode 100644 index 0000000..3fff76f --- /dev/null +++ b/src/api/modules/ad/by.ts @@ -0,0 +1,11 @@ +import { ResPage } from "@/api/interface/index"; +import { ByList } from "@/api/interface/ad/by"; +import http from "@/api"; +import { getGuangGaoBaoYangRuZhuListApiUrl } from "@/api/config"; + +/** + * @name 广告列表 -- by + */ +export const ListApi = (params: ByList.ReqParams) => { + return http.get>(getGuangGaoBaoYangRuZhuListApiUrl, params); +}; diff --git a/src/api/modules/ad/config.ts b/src/api/modules/ad/config.ts new file mode 100644 index 0000000..7fc71ea --- /dev/null +++ b/src/api/modules/ad/config.ts @@ -0,0 +1,29 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ConfigList } from "@/api/interface/ad/config"; +import { getGuangGaoGgpzListApiUrl, getGuangGaoGgpzSaveApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 广告配置列表 + */ +export const getList = (params: ConfigList.ReqParams) => { + return http.get>(getGuangGaoGgpzListApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getGuangGaoGgpzListApiUrl, { limit: 1000, page: 1 }); +}; +/** + * @name 设置广告配置 + */ +export const saveData = (params: ConfigList.saveParams) => { + return http.post>(getGuangGaoGgpzSaveApiUrl, params); +}; + +/** +/** + * @name 删除广告配置 + */ +export const deleteItem = (params: ConfigList.delParams) => { + return http.post>(getGuangGaoGgpzSaveApiUrl, params); +}; diff --git a/src/api/modules/ad/group.ts b/src/api/modules/ad/group.ts new file mode 100644 index 0000000..1761b94 --- /dev/null +++ b/src/api/modules/ad/group.ts @@ -0,0 +1,36 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { GroupList } from "@/api/interface/ad/group"; +import { getGuangGaoMainGroupListApiUrl, getGuangGaoMainGroupSaveApiUrl, getGuangGaoMainGroupDelApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 广告分组列表 + */ +export const getList = (params: GroupList.ReqParams) => { + return http.get>(getGuangGaoMainGroupListApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getGuangGaoMainGroupListApiUrl, { limit: 1000, page: 1 }); +}; +/** + * @name 设置广告分组 + */ +export const saveData = (params: GroupList.saveParams) => { + return http.post>(getGuangGaoMainGroupSaveApiUrl, params); +}; + +/** +/** + * @name 删除广告分组 + */ +export const deleteItem = (params: GroupList.delParams) => { + return http.post>(getGuangGaoMainGroupDelApiUrl, params); +}; + +/** + * @name 广告分组列表--全部数据 + */ +export const adGroupAllListApi = () => { + return http.get(getGuangGaoMainGroupListApiUrl, { page: 1, limit: 365 }); +}; diff --git a/src/api/modules/ad/lf.ts b/src/api/modules/ad/lf.ts new file mode 100644 index 0000000..d465ff8 --- /dev/null +++ b/src/api/modules/ad/lf.ts @@ -0,0 +1,11 @@ +import { ResPage } from "@/api/interface/index"; +import { LfList } from "@/api/interface/ad/lf"; +import http from "@/api"; +import { getGuangGaoLouFengListApiUrl } from "@/api/config"; + +/** + * @name 广告列表 -- lf + */ +export const ListApi = (params: LfList.ReqParams) => { + return http.get>(getGuangGaoLouFengListApiUrl, params); +}; diff --git a/src/api/modules/ad/list.ts b/src/api/modules/ad/list.ts new file mode 100644 index 0000000..570095b --- /dev/null +++ b/src/api/modules/ad/list.ts @@ -0,0 +1,44 @@ +import { ResPage } from "@/api/interface/index"; +import { adList } from "@/api/interface/ad/list"; +import http from "@/api"; +import { getGuangGaoMainListApiUrl, getGuangGaoMainSaveApiUrl, getGuangGaoMainDelApiUrl } from "@/api/config"; + +/** + * @name 广告列表 + */ +export const ListApi = (params: adList.ReqParams) => { + return http.get>(getGuangGaoMainListApiUrl, params); +}; + +/** + * @name 新增广告 + */ +export const SaveApi = (params: adList.ReqParams) => { + return http.post>(getGuangGaoMainSaveApiUrl, params); +}; + +/** + * @name 删除广告 + */ +export const DelApi = (params: adList.delParams) => { + return http.post>(getGuangGaoMainDelApiUrl, params); +}; + +/** + * @name 批量设置广告 + */ +export const batchData = (params: adList.batchParams) => { + return http.post>(getGuangGaoMainSaveApiUrl, params); +}; +/** + * @name 批量替换广告内容 + */ +export const batchReplaceData = (params: adList.batchReplaceParams) => { + return http.post>(`/admin/ad/batch/replace`, params); +}; +/** + * @name 克隆站点广告 + */ +export const batchCloneData = (params: adList.cloneParams) => { + return http.post>(`/admin/ad/clone`, params); +}; diff --git a/src/api/modules/ad/template.ts b/src/api/modules/ad/template.ts new file mode 100644 index 0000000..eeb35db --- /dev/null +++ b/src/api/modules/ad/template.ts @@ -0,0 +1,22 @@ +import { ResPage } from "@/api/interface/index"; +import { adTemplate } from "@/api/interface/ad/list"; +import http from "@/api"; + +/** + * @name 广告模板列表 + */ +export const ListApi = (params: adTemplate.ReqParams) => { + return http.get>(`admin/ad/template/list`, params); +}; +/** + * @name 广告模板列表 + */ +export const ListAllApi = (params: adTemplate.ReqParams) => { + return http.get>(`admin/ad/template/list`, params); +}; +/** + * @name 广告模板列表--全部数据 + */ +export const adTemAllListApi = () => { + return http.get(`admin/ad/template/list`, { page: 1, limit: 365 }); +}; diff --git a/src/api/modules/ad/yx.ts b/src/api/modules/ad/yx.ts new file mode 100644 index 0000000..42ba9e7 --- /dev/null +++ b/src/api/modules/ad/yx.ts @@ -0,0 +1,11 @@ +import { ResPage } from "@/api/interface/index"; +import { YxList } from "@/api/interface/ad/yx"; +import http from "@/api"; +import { getGuangGaoYouXiListApiUrl } from "@/api/config"; + +/** + * @name 广告列表 -- yx + */ +export const ListApi = (params: YxList.ReqParams) => { + return http.get>(getGuangGaoYouXiListApiUrl, params); +}; diff --git a/src/api/modules/ad/zb.ts b/src/api/modules/ad/zb.ts new file mode 100644 index 0000000..04c61b0 --- /dev/null +++ b/src/api/modules/ad/zb.ts @@ -0,0 +1,11 @@ +import { ResPage } from "@/api/interface/index"; +import { ZbList } from "@/api/interface/ad/zb"; +import http from "@/api"; +import { getGuangGaoZhiBoListApiUrl } from "@/api/config"; + +/** + * @name 广告列表 -- zb + */ +export const ListApi = (params: ZbList.ReqParams) => { + return http.get>(getGuangGaoZhiBoListApiUrl, params); +}; diff --git a/src/api/modules/ad/zy.ts b/src/api/modules/ad/zy.ts new file mode 100644 index 0000000..89d916e --- /dev/null +++ b/src/api/modules/ad/zy.ts @@ -0,0 +1,11 @@ +import { ResPage } from "@/api/interface/index"; +import { ZyList } from "@/api/interface/ad/zy"; +import http from "@/api"; +import { getGuangGaoGuanFangZiYingListApiUrl } from "@/api/config"; + +/** + * @name 广告列表 -- zy + */ +export const ListApi = (params: ZyList.ReqParams) => { + return http.get>(getGuangGaoGuanFangZiYingListApiUrl, params); +}; diff --git a/src/api/modules/atlas/list.ts b/src/api/modules/atlas/list.ts new file mode 100644 index 0000000..0f9a2fb --- /dev/null +++ b/src/api/modules/atlas/list.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { AtlasList } from "@/api/interface/atlas/list"; +import { ATLAS_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 图册列表 + */ +export const getList = (params: AtlasList.ReqParams) => { + return http.get>(ATLAS_PORT + `/list`, params); +}; +/** + * @name 设置图册 + */ +export const saveData = (params: AtlasList.saveParams) => { + return http.post>(ATLAS_PORT + `/save`, params); +}; +/** + * @name 删除图册 + */ +export const deleteItem = (params: AtlasList.delParams) => { + return http.post>(ATLAS_PORT + `/del`, params); +}; diff --git a/src/api/modules/channel/statistics.ts b/src/api/modules/channel/statistics.ts new file mode 100644 index 0000000..efd1814 --- /dev/null +++ b/src/api/modules/channel/statistics.ts @@ -0,0 +1,25 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ChannelStatisticsList } from "@/api/interface/channel/statistics"; +import { CHANNEL_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 列表 + */ +export const ListApi = (params: ChannelStatisticsList.ReqParams) => { + return http.get>(CHANNEL_PORT + `/statisticalcode/list`, params); +}; + +/** + * @name 设置 + */ +export const SaveApi = (params: ChannelStatisticsList.saveParams) => { + return http.post>(CHANNEL_PORT + `/statisticalcode/save`, params); +}; + +/** + * @name 删除 + */ +export const DelApi = (params: ChannelStatisticsList.delParams) => { + return http.post>(CHANNEL_PORT + `/statisticalcode/del`, params); +}; diff --git a/src/api/modules/email/content.ts b/src/api/modules/email/content.ts new file mode 100644 index 0000000..c47572e --- /dev/null +++ b/src/api/modules/email/content.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ContentList } from "@/api/interface/email/content"; +import { EMAIL_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 邮件事件列表 + */ +export const getList = (params: ContentList.ReqParams) => { + return http.get>(EMAIL_PORT + `/content/list`, params); +}; +/** + * @name 设置邮件事件 + */ +export const saveData = (params: ContentList.saveParams) => { + return http.post>(EMAIL_PORT + `/content/save`, params); +}; +/** + * @name 删除邮件事件 + */ +export const deleteItem = (params: ContentList.delParams) => { + return http.post>(EMAIL_PORT + `/content/del`, params); +}; diff --git a/src/api/modules/email/event.ts b/src/api/modules/email/event.ts new file mode 100644 index 0000000..8fcc583 --- /dev/null +++ b/src/api/modules/email/event.ts @@ -0,0 +1,26 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { EventList } from "@/api/interface/email/event"; +import { EMAIL_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 邮件事件列表 + */ +export const getList = (params: EventList.ReqParams) => { + return http.get>(EMAIL_PORT + `/event/list`, params); +}; +export const getAllList = () => { + return http.get>(EMAIL_PORT + `/event/list`, { limit: 365, page: 1 }); +}; +/** + * @name 设置邮件事件 + */ +export const saveData = (params: EventList.saveParams) => { + return http.post>(EMAIL_PORT + `/event/save`, params); +}; +/** + * @name 删除邮件事件 + */ +export const deleteItem = (params: EventList.delParams) => { + return http.post>(EMAIL_PORT + `/event/del`, params); +}; diff --git a/src/api/modules/finance/account/list.ts b/src/api/modules/finance/account/list.ts new file mode 100644 index 0000000..6f7f62a --- /dev/null +++ b/src/api/modules/finance/account/list.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { AccountList } from "@/api/interface/finance/account/list"; +import { ACCOUNT_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 资金账户列表 + */ +export const getList = (params: AccountList.ReqParams) => { + return http.get>(ACCOUNT_PORT + `/list`, params); +}; + +/** + * @name 设置资金账户 + */ +export const saveData = (params: AccountList.saveParams) => { + return http.post>(ACCOUNT_PORT + `/save`, params); +}; +/** + * @name 删除资金账户 + */ +export const deleteItem = (params: AccountList.delParams) => { + return http.post>(ACCOUNT_PORT + `/del`, params); +}; diff --git a/src/api/modules/finance/account/transaction.ts b/src/api/modules/finance/account/transaction.ts new file mode 100644 index 0000000..00f2344 --- /dev/null +++ b/src/api/modules/finance/account/transaction.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { TransactionList } from "@/api/interface/finance/account/transaction"; +import { ACCOUNT_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 资金账户流水列表 + */ +export const getList = (params: TransactionList.ReqParams) => { + return http.get>(ACCOUNT_PORT + `/transaction/list`, params); +}; + +/** + * @name 设置资金账户流水 + */ +export const saveData = (params: TransactionList.saveParams) => { + return http.post>(ACCOUNT_PORT + `/transaction/save`, params); +}; +/** + * @name 删除资金账户流水 + */ +export const deleteItem = (params: TransactionList.delParams) => { + return http.post>(ACCOUNT_PORT + `/transaction/del`, params); +}; diff --git a/src/api/modules/finance/recharge/feedback.ts b/src/api/modules/finance/recharge/feedback.ts new file mode 100644 index 0000000..490be8d --- /dev/null +++ b/src/api/modules/finance/recharge/feedback.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { FeedbackList } from "@/api/interface/finance/recharge/feedback"; +import { RECHARGE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 充值反馈列表 + */ +export const getList = (params: FeedbackList.ReqParams) => { + return http.get>(RECHARGE_PORT + `/feedback/list`, params); +}; + +/** + * @name 设置充值反馈 + */ +export const saveData = (params: FeedbackList.saveParams) => { + return http.post>(RECHARGE_PORT + `/feedback/save`, params); +}; +/** + * @name 删除充值反馈 + */ +export const deleteItem = (params: FeedbackList.delParams) => { + return http.post>(RECHARGE_PORT + `/feedback/del`, params); +}; diff --git a/src/api/modules/finance/recharge/order.ts b/src/api/modules/finance/recharge/order.ts new file mode 100644 index 0000000..bb47288 --- /dev/null +++ b/src/api/modules/finance/recharge/order.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { OrderList } from "@/api/interface/finance/recharge/order"; +import { ORDER_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 充值订单列表 + */ +export const getList = (params: OrderList.ReqParams) => { + return http.get>(ORDER_PORT + `/list`, params); +}; +/** + * @name 设置充值订单 + */ +export const saveData = (params: OrderList.saveParams) => { + return http.post>(ORDER_PORT + `/save`, params); +}; +/** + * @name 删除充值订单 + */ +export const deleteItem = (params: OrderList.delParams) => { + return http.post>(ORDER_PORT + `/del`, params); +}; diff --git a/src/api/modules/finance/recharge/package.ts b/src/api/modules/finance/recharge/package.ts new file mode 100644 index 0000000..57abcde --- /dev/null +++ b/src/api/modules/finance/recharge/package.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { PackageList } from "@/api/interface/finance/recharge/package"; +import { PACKAGE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 套餐列表 + */ +export const getList = (params: PackageList.ReqParams) => { + return http.get>(PACKAGE_PORT + `/list`, params); +}; + +/** + * @name 设置套餐 + */ +export const saveData = (params: PackageList.saveParams) => { + return http.post>(PACKAGE_PORT + `/save`, params); +}; +/** + * @name 删除套餐 + */ +export const deleteItem = (params: PackageList.delParams) => { + return http.post>(PACKAGE_PORT + `/del`, params); +}; diff --git a/src/api/modules/login.ts b/src/api/modules/login.ts new file mode 100644 index 0000000..be80ec6 --- /dev/null +++ b/src/api/modules/login.ts @@ -0,0 +1,53 @@ +import { Login } from "@/api/interface/index"; +import { USER_PORT } from "@/api/config/servicePort"; +import { loginApiUrl, getSystemUserInfoApiUrl } from "@/api/config"; + +import authMenuList from "@/assets/json/authMenuList.json"; +import authButtonList from "@/assets/json/authButtonList.json"; +import http from "@/api"; + +/** + * @name 登录模块 + */ +// 用户登录 /admin/system/user/login +export const loginApi = (params: Login.ReqLoginForm) => { + return http.post(loginApiUrl, params, { loading: false }); // 正常 post json 请求 ==> application/json +}; + +// 获取用户信息 /admin/system/user/info +export const getUserRoleListApi = () => { + return http.get(getSystemUserInfoApiUrl, {}, { loading: false }); // 正常 post json 请求 ==> application/json + // return http.get(PORT1 + `/menu/list`, {}, { loading: false }); + // 如果想让菜单变为本地数据,注释上一行代码,并引入本地 authMenuList.json 数据 + return authMenuList; +}; + +// 获取菜单列表 +export const getAuthMenuListApi3 = () => { + // return http.get(PORT1 + `/menu/list`, {}, { loading: false }); + // 如果想让菜单变为本地数据,注释上一行代码,并引入本地 authMenuList.json 数据 + return authMenuList; +}; + +// 获取菜单列表 +export const getAuthMenuListApi = () => { + // return http.get(PORT1 + `/menu/list`, {}, { loading: false }); + // 如果想让菜单变为本地数据,注释上一行代码,并引入本地 authMenuList.json 数据 + return authMenuList; +}; + +// 获取按钮权限 +export const getAuthButtonListApi = () => { + // return http.get(PORT1 + `/auth/buttons`, {}, { loading: false }); + // 如果想让按钮权限变为本地数据,注释上一行代码,并引入本地 authButtonList.json 数据 + return authButtonList; +}; + +// 用户退出登录 +export const logoutApi = () => { + return http.post(USER_PORT + `/logout`); +}; +// 修改密码添加 +export const updatePwd = params => { + return http.post(USER_PORT + `/pwd`, params); +}; diff --git a/src/api/modules/manga/chapter.ts b/src/api/modules/manga/chapter.ts new file mode 100644 index 0000000..558cced --- /dev/null +++ b/src/api/modules/manga/chapter.ts @@ -0,0 +1,30 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ChapterList } from "@/api/interface/manga/chapter"; +import { MANGA_PORT } from "@/api/config/servicePort"; +import http from "@/api"; +import { getManHuaZhangJieApiUrl } from "@/api/config"; +/** + * @name 漫画章节列表 + */ +export const getList = (params: ChapterList.ReqParams) => { + return http.get>(getManHuaZhangJieApiUrl, params); +}; + +/** + * @name 设置漫画章节 + */ +export const saveData = (params: ChapterList.saveParams) => { + return http.post>(MANGA_PORT + `/chapter/save`, params); +}; +/** + * @name 批量设置漫画章节 + */ +export const batchData = (params: ChapterList.batchParams) => { + return http.post>(MANGA_PORT + `/chapter/vip/set`, params); +}; +/** + * @name 删除漫画章节 + */ +export const deleteItem = (params: ChapterList.delParams) => { + return http.post>(MANGA_PORT + `/chapter/del`, params); +}; diff --git a/src/api/modules/manga/fenlei.ts b/src/api/modules/manga/fenlei.ts new file mode 100644 index 0000000..f424a71 --- /dev/null +++ b/src/api/modules/manga/fenlei.ts @@ -0,0 +1,15 @@ +import { ResPage } from "@/api/interface/index"; +import { fenLeiList } from "@/api/interface/manga/fenlei"; +import { getManHuaFenleiApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 漫画分类 + */ +export const getList = (params: fenLeiList.ReqParams) => { + return http.get>(getManHuaFenleiApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getManHuaFenleiApiUrl, { limit: 1000, page: 1 }); +}; diff --git a/src/api/modules/manga/list.ts b/src/api/modules/manga/list.ts new file mode 100644 index 0000000..d67c068 --- /dev/null +++ b/src/api/modules/manga/list.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { MangaList } from "@/api/interface/manga/list"; +import { MANGA_PORT } from "@/api/config/servicePort"; +import http from "@/api"; +import { getManHuaMainListApiUrl } from "@/api/config"; +/** + * @name 漫画列表 + */ +export const getList = (params: MangaList.ReqParams) => { + return http.get>(getManHuaMainListApiUrl, params); +}; + +/** + * @name 设置漫画 + */ +export const saveData = (params: MangaList.saveParams) => { + return http.post>(MANGA_PORT + `/save`, params); +}; +/** + * @name 删除漫画 + */ +export const deleteItem = (params: MangaList.delParams) => { + return http.post>(MANGA_PORT + `/del`, params); +}; diff --git a/src/api/modules/map.ts b/src/api/modules/map.ts new file mode 100644 index 0000000..e0acfb4 --- /dev/null +++ b/src/api/modules/map.ts @@ -0,0 +1,23 @@ +import { + SYSTEM_PORT, + DOMAIN_PORT, + +} from "@/api/config/servicePort"; + +import { Download, ResultData, ResPage, Task } from "@/api/interface/index"; + +import http from "@/api"; + +/** + * @name 表格模板下载 + */ +export const dTemPlatDownLoad = (params: Download.ResFileUrl) => { + return http.get>(`/admin/domain/resource/template/download`, params); +}; + +/** + * @name 异步任务执行进度消息 + */ +export const manageCheck = (params: Task.ResFileUrl) => { + return http.get>(`/admin/system/msg/task/list`, params, { noLoading: true }); +}; diff --git a/src/api/modules/miUser/list.ts b/src/api/modules/miUser/list.ts new file mode 100644 index 0000000..0eb694c --- /dev/null +++ b/src/api/modules/miUser/list.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { MiUserList } from "@/api/interface/miUser/list"; +import { MI_USER_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name APP用户列表 + */ +export const getList = (params: MiUserList.ReqParams) => { + return http.get>(MI_USER_PORT + `/list`, params); +}; +/** + * @name 设置APP用户 + */ +export const saveData = (params: MiUserList.saveParams) => { + return http.post>(MI_USER_PORT + `/save`, params); +}; +/** + * @name 删除APP用户 + */ +export const deleteItem = (params: MiUserList.delParams) => { + return http.post>(MI_USER_PORT + `/del`, params); +}; diff --git a/src/api/modules/novel/chapter.ts b/src/api/modules/novel/chapter.ts new file mode 100644 index 0000000..faad0b3 --- /dev/null +++ b/src/api/modules/novel/chapter.ts @@ -0,0 +1,25 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ChapterList } from "@/api/interface/novel/chapter"; +import { NOVEL_PORT } from "@/api/config/servicePort"; +import { getXiaoZhangJieYouApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 小说章节列表 + */ +export const getList = (params: ChapterList.ReqParams) => { + return http.get>(getXiaoZhangJieYouApiUrl, params); +}; + +/** + * @name 设置小说章节 + */ +export const saveData = (params: ChapterList.saveParams) => { + return http.post>(NOVEL_PORT + `/chapter/save`, params); +}; +/** + * @name 删除小说章节 + */ +export const deleteItem = (params: ChapterList.delParams) => { + return http.post>(NOVEL_PORT + `/chapter/del`, params); +}; diff --git a/src/api/modules/novel/fenlei.ts b/src/api/modules/novel/fenlei.ts new file mode 100644 index 0000000..411fec6 --- /dev/null +++ b/src/api/modules/novel/fenlei.ts @@ -0,0 +1,15 @@ +import { ResPage } from "@/api/interface/index"; +import { fenLeiList } from "@/api/interface/novel/fenlei"; +import { getXiaoShuoFenleiApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 小说分类 + */ +export const getList = (params: fenLeiList.ReqParams) => { + return http.get>(getXiaoShuoFenleiApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getXiaoShuoFenleiApiUrl, { limit: 1000, page: 1 }); +}; diff --git a/src/api/modules/novel/list.ts b/src/api/modules/novel/list.ts new file mode 100644 index 0000000..1cb8784 --- /dev/null +++ b/src/api/modules/novel/list.ts @@ -0,0 +1,31 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { NovelList } from "@/api/interface/novel/list"; +import { NOVEL_PORT } from "@/api/config/servicePort"; +import { getXiaoShuoMainListApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 小说列表 + */ +export const getList = (params: NovelList.ReqParams) => { + return http.get>(getXiaoShuoMainListApiUrl, params); +}; + +/** + * @name 设置小说 + */ +export const saveData = (params: NovelList.saveParams) => { + return http.post>(NOVEL_PORT + `/save`, params); +}; +/** + * @name 删除小说 + */ +export const deleteItem = (params: NovelList.delParams) => { + return http.post>(NOVEL_PORT + `/del`, params); +}; +/** + * @name 批量设置 推荐等级 + */ +export const levelSet = (params: NovelList.delParams) => { + return http.post>(`/novel/level/set`, params); +}; diff --git a/src/api/modules/searchGroup/list.ts b/src/api/modules/searchGroup/list.ts new file mode 100644 index 0000000..9e2c47b --- /dev/null +++ b/src/api/modules/searchGroup/list.ts @@ -0,0 +1,30 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { SearchGroupList } from "@/api/interface/searchGroup/list"; +import { SEARCH_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 搜索分组列表 + */ +export const getList = (params: SearchGroupList.ReqParams) => { + return http.get>(SEARCH_PORT + `/group/list`, params); +}; + +/** + * @name 搜索分组列表 + */ +export const getAllList = () => { + return http.get>(SEARCH_PORT + `/group/list`, { limit: 1000, page: 1 }); +}; +/** + * @name 设置搜索分组 + */ +export const saveData = (params: SearchGroupList.saveParams) => { + return http.post>(SEARCH_PORT + `/group/save`, params); +}; +/** + * @name 删除搜索分组 + */ +export const deleteItem = (params: SearchGroupList.delParams) => { + return http.post>(SEARCH_PORT + `/group/del`, params); +}; diff --git a/src/api/modules/searchKey/list.ts b/src/api/modules/searchKey/list.ts new file mode 100644 index 0000000..ab9a2e3 --- /dev/null +++ b/src/api/modules/searchKey/list.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { SearchKeyList } from "@/api/interface/searchKey/list"; +import { getKeyWordListApiUrl, getKeyWordSaveApiUrl, getKeyWordDelApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 搜索词列表 + */ +export const getList = (params: SearchKeyList.ReqParams) => { + return http.get>(getKeyWordListApiUrl, params); +}; +/** + * @name 设置搜索词 + */ +export const saveData = (params: SearchKeyList.saveParams) => { + return http.post>(getKeyWordSaveApiUrl, params); +}; +/** + * @name 删除搜索词 + */ +export const deleteItem = (params: SearchKeyList.delParams) => { + return http.post>(getKeyWordDelApiUrl, params); +}; diff --git a/src/api/modules/share/link.ts b/src/api/modules/share/link.ts new file mode 100644 index 0000000..ed0b085 --- /dev/null +++ b/src/api/modules/share/link.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { LinkList } from "@/api/interface/share/link"; +import { SHARE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 分享链接列表 + */ +export const getList = (params: LinkList.ReqParams) => { + return http.get>(SHARE_PORT + `/link/list`, params); +}; +/** + * @name 设置分享链接 + */ +export const saveData = (params: LinkList.saveParams) => { + return http.post>(SHARE_PORT + `/link/save`, params); +}; +/** + * @name 删除分享链接 + */ +export const deleteItem = (params: LinkList.delParams) => { + return http.post>(SHARE_PORT + `/link/del`, params); +}; diff --git a/src/api/modules/share/speech.ts b/src/api/modules/share/speech.ts new file mode 100644 index 0000000..e0d2072 --- /dev/null +++ b/src/api/modules/share/speech.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { SpeechList } from "@/api/interface/share/speech"; +import { SHARE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 分享话术列表 + */ +export const getList = (params: SpeechList.ReqParams) => { + return http.get>(SHARE_PORT + `/speech/list`, params); +}; +/** + * @name 设置分享话术 + */ +export const saveData = (params: SpeechList.saveParams) => { + return http.post>(SHARE_PORT + `/speech/save`, params); +}; +/** + * @name 删除分享话术 + */ +export const deleteItem = (params: SpeechList.delParams) => { + return http.post>(SHARE_PORT + `/speech/del`, params); +}; diff --git a/src/api/modules/site/list.ts b/src/api/modules/site/list.ts new file mode 100644 index 0000000..7efe43a --- /dev/null +++ b/src/api/modules/site/list.ts @@ -0,0 +1,53 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { SiteList } from "@/api/interface/site/list"; +import { SITE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 站点列表 + */ +export const getList = (params: SiteList.ReqParams) => { + return http.get>(`/site/domain/list`, params); +}; + +/** + * @name 站点列表 + */ +export const getAllList = () => { + return http.get>(SITE_PORT + `/list`, { limit: 365, page: 1 }); +}; + +/** + * @name 设置域名站点 + */ +export const saveData = (params: SiteList.saveParams) => { + return http.post>('/site/domain/save', params); +}; + +/** + * @name 上传域名站点 + */ +export const uploadData = (params: SiteList.saveParams) => { + return http.post>('/site/domain/upload', params); +}; + +/** + + + * @name 部署项目 + */ +export const buildItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/deploy/site`, params); +}; +/** + * @name 部署引导页 + */ +export const landingItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/deploy/landing/page`, params); +}; +/** + * @name 删除站点 + */ +export const deleteItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/del`, params); +}; diff --git a/src/api/modules/site/subject/fomart/group.ts b/src/api/modules/site/subject/fomart/group.ts new file mode 100644 index 0000000..b47ba46 --- /dev/null +++ b/src/api/modules/site/subject/fomart/group.ts @@ -0,0 +1,32 @@ +import { ResPage,ResultData } from "@/api/interface/index"; +import { GroupList } from "@/api/interface/site/subject/fomart/group"; +import { getSubjectFomartGroupList } from "@/api/config"; +import http from "@/api"; + +/** + * @name 替换模板分组列表 + */ +export const getList = (params: GroupList.ReqParams) => { + return http.get>(getSubjectFomartGroupList, params); +}; + +export const getAllList = () => { + return http.get>(getSubjectFomartGroupList, { limit: 1000, page: 1 }); +}; +export const getSubjectFomartGroup = () => { + return http.get>(getSubjectFomartGroupList, { limit: 1000, page: 1 }); +}; + +/** + * @name 设置 + */ +export const saveData = (params: GroupList.saveParams) => { + return http.post>('/site/subject/fomart/group/save', params); +}; + +/** + * @name 删除 + */ +export const deleteItem = (params: GroupList.delParams) => { + return http.post>('/site/subject/fomart/group/del', params); +}; diff --git a/src/api/modules/site/subject/fomart/list.ts b/src/api/modules/site/subject/fomart/list.ts new file mode 100644 index 0000000..b46bca9 --- /dev/null +++ b/src/api/modules/site/subject/fomart/list.ts @@ -0,0 +1,29 @@ +import { ResPage ,ResultData} from "@/api/interface/index"; +import { SubjectFomartList } from "@/api/interface/site/subject/fomart/list"; +import { getSubjectFomartList } from "@/api/config"; +import http from "@/api"; + +/** + * @name 模板列表 + */ +export const getList = (params: SubjectFomartList.ReqParams) => { + return http.get>(getSubjectFomartList, params); +}; + +export const getAllList = () => { + return http.get>(getSubjectFomartList, { limit: 1000, page: 1 }); +}; + +/** + * @name 设置 + */ +export const saveData = (params: SubjectFomartList.saveParams) => { + return http.post>('/site/subject/fomart/save', params); +}; + +/** + * @name 删除 + */ +export const deleteItem = (params: SubjectFomartList.delParams) => { + return http.post>('/site/subject/fomart/del', params); +}; \ No newline at end of file diff --git a/src/api/modules/site/template.ts b/src/api/modules/site/template.ts new file mode 100644 index 0000000..37d54ef --- /dev/null +++ b/src/api/modules/site/template.ts @@ -0,0 +1,41 @@ +import { ResPage } from "@/api/interface/index"; +import { SiteList } from "@/api/interface/site/list"; +import { getTemplateListUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 模板列表 + */ +export const getList = (params: SiteList.ReqParams) => { + return http.get>(getTemplateListUrl, params); + // return http.get>(getTkdargListUrl, { limit: 1000, page: 1 }); +}; + +export const getAllList = () => { + return http.get>(getTemplateListUrl, { limit: 1000, page: 1 }); +}; + +/** + * @name 设置站点 + */ +export const saveData = (params: SiteList.saveParams) => { + return http.post>(SITE_PORT + `/save`, params); +}; +/** + * @name 部署项目 + */ +export const buildItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/deploy/site`, params); +}; +/** + * @name 部署引导页 + */ +export const landingItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/deploy/landing/page`, params); +}; +/** + * @name 删除站点 + */ +export const deleteItem = (params: SiteList.delParams) => { + return http.post>(SITE_PORT + `/del`, params); +}; \ No newline at end of file diff --git a/src/api/modules/site/tkdarg.ts b/src/api/modules/site/tkdarg.ts new file mode 100644 index 0000000..f937672 --- /dev/null +++ b/src/api/modules/site/tkdarg.ts @@ -0,0 +1,16 @@ +import { ResPage } from "@/api/interface/index"; +import { fenLeiList } from "@/api/interface/novel/fenlei"; +import { getTkdargListUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 参数模板列表 + */ +export const getList = (params: fenLeiList.ReqParams) => { + // return http.get>(getXiaoShuoFenleiApiUrl, params); + return http.get>(getTkdargListUrl, { limit: 1000, page: 1 }); +}; + +export const getAllList = () => { + return http.get>(getTkdargListUrl, { limit: 1000, page: 1 }); +}; diff --git a/src/api/modules/spread/list.ts b/src/api/modules/spread/list.ts new file mode 100644 index 0000000..c5f223a --- /dev/null +++ b/src/api/modules/spread/list.ts @@ -0,0 +1,30 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { SpreadList } from "@/api/interface/spread/list"; +import { SPREAD_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 推广等级列表 + */ +export const getList = (params: SpreadList.ReqParams) => { + return http.get>(SPREAD_PORT + `/levels/list`, params); +}; +/** + * @name 推广等级列表 + */ +export const getAllList = () => { + return http.get>(SPREAD_PORT + `/levels/list`, { limit: 365, page: 1 }); +}; + +/** + * @name 设置推广等级 + */ +export const saveData = (params: SpreadList.saveParams) => { + return http.post>(SPREAD_PORT + `/levels/save`, params); +}; +/** + * @name 删除推广等级 + */ +export const deleteItem = (params: SpreadList.delParams) => { + return http.post>(SPREAD_PORT + `/levels/del`, params); +}; diff --git a/src/api/modules/spread/referral.ts b/src/api/modules/spread/referral.ts new file mode 100644 index 0000000..d2bc01e --- /dev/null +++ b/src/api/modules/spread/referral.ts @@ -0,0 +1,24 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ReferralList } from "@/api/interface/spread/referral"; +import { SPREAD_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 推广等级列表 + */ +export const getList = (params: ReferralList.ReqParams) => { + return http.get>(SPREAD_PORT + `/referral/list`, params); +}; + +/** + * @name 设置推广等级 + */ +export const saveData = (params: ReferralList.saveParams) => { + return http.post>(SPREAD_PORT + `/referral/save`, params); +}; +/** + * @name 删除推广等级 + */ +export const deleteItem = (params: ReferralList.delParams) => { + return http.post>(SPREAD_PORT + `/referral/del`, params); +}; diff --git a/src/api/modules/system/adminUser.ts b/src/api/modules/system/adminUser.ts new file mode 100644 index 0000000..4130ef9 --- /dev/null +++ b/src/api/modules/system/adminUser.ts @@ -0,0 +1,54 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { adminUserList } from "@/api/interface/system/adminUser"; +import { USER_PORT } from "@/api/config/servicePort"; +import { getSystemUserlistApiUrl, getSystemUserInfoApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 系统用户列表 + */ +export const getAdminUserList = (params: adminUserList.ReqParams) => { + return http.get>(getSystemUserlistApiUrl, params); +}; + +/** + * @name 系统用户详情 + */ +export const userInfo = (params: adminUserList.saveParams) => { + return http.get>(getSystemUserInfoApiUrl, params); +}; + +/** + * @name 系统用户修改密码 + */ +export const updatePwd = (params: adminUserList.saveParams) => { + return http.post>(USER_PORT + `/pwd`, params); +}; + +/** + * @name 添加系统用户 + */ +export const saveAdminUser = (params: adminUserList.saveParams) => { + return http.post>(`/system/user/save`, params); +}; +/** + * @name 删除系统用户 + */ +export const deleteAdminUser = (params: adminUserList.delParams) => { + return http.post>(`/system/user/del`, params); +}; + +// 获取绑定谷歌令牌二维码 +export const getGoogle2faBindUrl = () => { + return http.get(USER_PORT + `/google2fa/bindurl`); +}; + +// 解绑谷歌令牌 +export const getGoogle2faUnbind = params => { + return http.post(USER_PORT + `/google2fa/unbind`, params); +}; + +// 绑谷歌令牌 +export const getGoogle2faBind = params => { + return http.post(USER_PORT + `/google2fa/bind`, params); +}; diff --git a/src/api/modules/system/bot.ts b/src/api/modules/system/bot.ts new file mode 100644 index 0000000..4f72519 --- /dev/null +++ b/src/api/modules/system/bot.ts @@ -0,0 +1,28 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { BotSetting } from "@/api/interface/system/bot"; +import { SYSTEM_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 机器人列表 + */ +// 机器人列表 +export const ListApi = (params: BotSetting.ReqParams) => { + return http.get>(SYSTEM_PORT + `/notification/telegram/list`, params); +}; +/** + * @name 机器人列表 + */ +export const getRobotMap = () => { + return http.get>(SYSTEM_PORT + `/notification/telegram/list`, { limit: 100, page: 1 }); +}; + +// 设置机器人 +export const SaveApi = (params: BotSetting.saveParams) => { + return http.post>(SYSTEM_PORT + `/notification/telegram/save`, params); +}; + +// 删除机器人 +export const DeleteApi = (params: BotSetting.delParams) => { + return http.post>(SYSTEM_PORT + `/notification/telegram/del`, params); +}; diff --git a/src/api/modules/system/caChe/es.ts b/src/api/modules/system/caChe/es.ts new file mode 100644 index 0000000..a037503 --- /dev/null +++ b/src/api/modules/system/caChe/es.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { EsList } from "@/api/interface/system/caChe/es"; +import { CACHE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name ES索引列表 + */ +export const getList = () => { + return http.get(CACHE_PORT + `/es/list`); +}; +/** + * @name 设置ES索引 + */ +export const saveData = (params: EsList.saveParams) => { + return http.post>(CACHE_PORT + `/es/create`, params); +}; +/** + * @name 删除ES索引 + */ +export const deleteItem = (params: EsList.delParams) => { + return http.post>(CACHE_PORT + `/es/batch/create`, params); +}; diff --git a/src/api/modules/system/caChe/manage.ts b/src/api/modules/system/caChe/manage.ts new file mode 100644 index 0000000..5a3018a --- /dev/null +++ b/src/api/modules/system/caChe/manage.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ManageList } from "@/api/interface/system/caChe/manage"; +import { CACHE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name ES索引列表 + */ +export const getList = (params: ManageList.ReqParams) => { + return http.get(CACHE_PORT + `/manage/list`, params); +}; +/** + * @name 设置ES索引 + */ +export const saveData = (params: ManageList.saveParams) => { + return http.post>(CACHE_PORT + `/es/create`, params); +}; +/** + * @name 删除ES索引 + */ +export const deleteItem = (params: ManageList.delParams) => { + return http.post>(CACHE_PORT + `/manage/del`, params); +}; diff --git a/src/api/modules/system/company.ts b/src/api/modules/system/company.ts new file mode 100644 index 0000000..c2462f6 --- /dev/null +++ b/src/api/modules/system/company.ts @@ -0,0 +1,38 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { Company } from "@/api/interface/system/company"; +import { SYSTEM_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 公司列表 + */ + +// 公司列表 +export const ListApi = (params: Company.ReqParams) => { + return http.get>(SYSTEM_PORT + `/company/list`, params); +}; + +// 设置 +export const SaveApi = (params: Company.saveParams) => { + return http.post>(SYSTEM_PORT + `/company/save`, params); +}; + +// 删除 +export const DeleteApi = (params: Company.delParams) => { + return http.post>(SYSTEM_PORT + `/company/del`, params); +}; + +// 获取所有公司 +export const getCompanyMap = () => { + return http.get>(SYSTEM_PORT + `/company/all`, { page: 1, limit: 365 }); +}; + +// 获取公司详情 +export const InfoApi = () => { + return http.get>(SYSTEM_PORT + `/company/info`, { page: 1, limit: 365 }); +}; + +// 设置通讯信息 +export const CommunicationSetApi = params => { + return http.post>(SYSTEM_PORT + `/company/communication/set`, params); +}; diff --git a/src/api/modules/system/config.ts b/src/api/modules/system/config.ts new file mode 100644 index 0000000..380037e --- /dev/null +++ b/src/api/modules/system/config.ts @@ -0,0 +1,18 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { ConfigList } from "@/api/interface/system/config"; +import { getSystemConfigListApiUrl, getSystemConfigSaveApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 配置列表 + */ +export const getConfigList = (params: ConfigList.ReqParams) => { + return http.get>(getSystemConfigListApiUrl, params); +}; + +/** + * @name 设置配置 + */ +export const SaveApi = (params: ConfigList.saveParams) => { + return http.post>(getSystemConfigSaveApiUrl, params); +}; diff --git a/src/api/modules/system/endpoint.ts b/src/api/modules/system/endpoint.ts new file mode 100644 index 0000000..40a7460 --- /dev/null +++ b/src/api/modules/system/endpoint.ts @@ -0,0 +1,30 @@ +import { ResPage } from "@/api/interface/index"; +import { Endpoint } from "@/api/interface/system/endpoint"; +import { RES_SOURCE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; +import { getSystemZyddListApiUrl, getSystemZyddSaveApiUrl } from "@/api/config"; + +/** + * @name 端点资源列表 + */ +export const ListApi = (params: Endpoint.ReqParams) => { + return http.get>(getSystemZyddListApiUrl, params); +}; + +export const getEndpointAllApi = () => { + return http.get>(getSystemZyddListApiUrl, { limit: 365, page: 1 }); +}; + +/** + * @name 新增端点资源 + */ +export const SaveApi = (params: Endpoint.saveParams) => { + return http.post>(getSystemZyddSaveApiUrl, params); +}; + +/** + * @name 删除端点资源 + */ +export const DelApi = (params: Endpoint.delParams) => { + return http.post>(RES_SOURCE_PORT + `/endpoint/del`, params); +}; diff --git a/src/api/modules/system/endpointGroup.ts b/src/api/modules/system/endpointGroup.ts new file mode 100644 index 0000000..c6bff06 --- /dev/null +++ b/src/api/modules/system/endpointGroup.ts @@ -0,0 +1,28 @@ +import { ResPage } from "@/api/interface/index"; +import { Endpoint } from "@/api/interface/system/endpoint"; +import { RES_SOURCE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 端点资源分组列表 + */ +export const ListApi = (params: Endpoint.ReqParams) => { + return http.get>(RES_SOURCE_PORT + `/endpoint/group/list`, params); +}; +export const getAllListApi = () => { + return http.get>(RES_SOURCE_PORT + `/endpoint/group/list`, { limit: 365, page: 1 }); +}; + +/** + * @name 新增端点资源分组 + */ +export const SaveApi = (params: Endpoint.ReqParams) => { + return http.post>(RES_SOURCE_PORT + `/endpoint/group/save`, params); +}; + +/** + * @name 删除端点资源分组 + */ +export const DelApi = (params: Endpoint.delParams) => { + return http.post>(RES_SOURCE_PORT + `/endpoint/group/del`, params); +}; diff --git a/src/api/modules/system/gather.ts b/src/api/modules/system/gather.ts new file mode 100644 index 0000000..a8b856c --- /dev/null +++ b/src/api/modules/system/gather.ts @@ -0,0 +1,17 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { GatherList } from "@/api/interface/system/gather"; +import http from "@/api"; +import { getSystemCjpzListApiUrl, getSystemCjpzSaveApiUrl } from "@/api/config"; +/** + * @name 采集配置列表 + */ +export const ListApi = (params: GatherList.ReqParams) => { + return http.get>(getSystemCjpzListApiUrl, params); +}; + +/** + * @name 设置采集配置 + */ +export const SaveApi = (params: GatherList.saveParams) => { + return http.post>(getSystemCjpzSaveApiUrl, params); +}; diff --git a/src/api/modules/system/logs.ts b/src/api/modules/system/logs.ts new file mode 100644 index 0000000..a363cbf --- /dev/null +++ b/src/api/modules/system/logs.ts @@ -0,0 +1,11 @@ +import { ResPage, LogsList } from "@/api/interface/index"; +import { SYSTEM_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 日志 + */ +// 日志列表 +export const ListApi = (params: LogsList.ReqParams) => { + return http.get>(SYSTEM_PORT + `/log/list`, params); +}; diff --git a/src/api/modules/system/node.ts b/src/api/modules/system/node.ts new file mode 100644 index 0000000..b6bc2e5 --- /dev/null +++ b/src/api/modules/system/node.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { NodeList } from "@/api/interface/system/node"; +import { NODE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 节点列表 + */ +export const ListApi = (params: NodeList.ReqParams) => { + return http.get>(NODE_PORT + `/list`, params); +}; +/** + * @name 设置节点 + */ +export const SaveApi = (params: NodeList.saveParams) => { + return http.post>(NODE_PORT + `/save`, params); +}; +/** + * @name 删除节点 + */ +export const DeleteApi = (params: NodeList.delParams) => { + return http.post>(NODE_PORT + `/del`, params); +}; diff --git a/src/api/modules/system/notice.ts b/src/api/modules/system/notice.ts new file mode 100644 index 0000000..90b40cf --- /dev/null +++ b/src/api/modules/system/notice.ts @@ -0,0 +1,18 @@ +import { ResPage, ResultData, NoticeSetting } from "@/api/interface/index"; +import { SYSTEM_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 通知类型列表 + */ +// 通知类型列表 +export const ListApi = (params: NoticeSetting.ReqParams) => { + return http.get>(SYSTEM_PORT + `/notification/manager/list`, params); +}; +/** + * @name 设置通知类型 + */ +// 设置通知类型 +export const SaveApi = (params: NoticeSetting.saveParams) => { + return http.post>(SYSTEM_PORT + `/notification/manager/save`, params); +}; diff --git a/src/api/modules/system/role.ts b/src/api/modules/system/role.ts new file mode 100644 index 0000000..288bedd --- /dev/null +++ b/src/api/modules/system/role.ts @@ -0,0 +1,30 @@ +import { ResPage } from "@/api/interface/index"; +import { RoleList } from "@/api/interface/system/role"; +import { ROLE_PORT } from "@/api/config/servicePort"; +import http from "@/api"; +/** + * @name 获取角色列表 + */ +export const ListApi = (params: RoleList.ListReq) => { + return http.get>(ROLE_PORT + `/list`, params); +}; + +/** + * @name 获取所有角色 + */ +export const getRoleMap = () => { + return http.get>(ROLE_PORT + `/list`, { limit: 100, page: 1 }); +}; + +/** + * @name 添加角色 + */ +export const SaveApi = (params: RoleList.CreateReq) => { + return http.post(ROLE_PORT + `/save`, params); +}; +/** + * @name 删除角色 + */ +export const DeleteApi = (params: RoleList.DeleteReq) => { + return http.post(ROLE_PORT + `/del`, params); +}; diff --git a/src/api/modules/system/taskPlan.ts b/src/api/modules/system/taskPlan.ts new file mode 100644 index 0000000..65a2cd2 --- /dev/null +++ b/src/api/modules/system/taskPlan.ts @@ -0,0 +1,17 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { taskPlan } from "@/api/interface/system/taskPlan"; +import http from "@/api"; +import { getSystemPlanListApiUrl, getSystemPlanSaveApiUrl } from "@/api/config"; +/** + * @name 计划任务列表 + */ +export const getTaskPlanList = (params: taskPlan.ReqParams) => { + return http.get>(getSystemPlanListApiUrl, params); +}; + +/** + * @name 设置计划任务 + */ +export const saveTaskPlan = (params: taskPlan.saveParams) => { + return http.post>(getSystemPlanSaveApiUrl, params); +}; diff --git a/src/api/modules/tab/list.ts b/src/api/modules/tab/list.ts new file mode 100644 index 0000000..f51bd9c --- /dev/null +++ b/src/api/modules/tab/list.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { TabList } from "@/api/interface/tab/list"; +import { TAB_BATCH_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name TAB列表 + */ +export const getList = (params: TabList.ReqParams) => { + return http.get>(TAB_BATCH_PORT + `/list`, params); +}; +/** + * @name 设置TAB + */ +export const saveData = (params: TabList.saveParams) => { + return http.post>(TAB_BATCH_PORT + `/save`, params); +}; +/** + * @name 删除TAB + */ +export const deleteItem = (params: TabList.delParams) => { + return http.post>(TAB_BATCH_PORT + `/del`, params); +}; diff --git a/src/api/modules/tag/list.ts b/src/api/modules/tag/list.ts new file mode 100644 index 0000000..b35fac1 --- /dev/null +++ b/src/api/modules/tag/list.ts @@ -0,0 +1,41 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { TagList } from "@/api/interface/tag/list"; +import { TAG_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 标签列表 + */ +export const getList = (params: TagList.ReqParams) => { + return http.get>(TAG_PORT + `/list`, params); +}; +/** + * @name 标签类型列表 + */ +export const getTypeList = (params: TagList.ReqParams) => { + return http.get>(TAG_PORT + `/list`, params); +}; +/** + * @name 标签类型列表 + */ +export const getAllTypeList = (params: TagList.ReqParams) => { + return http.get>(TAG_PORT + `/list`, params, { noLoading: true }); +}; +/** + * @name 设置标签 + */ +export const saveData = (params: TagList.saveParams) => { + return http.post>(TAG_PORT + `/save`, params); +}; +/** + * @name 批量设置标签 + */ +export const batchData = (params: TagList.batchParams) => { + return http.post>(TAG_PORT + `/batch`, params); +}; +/** + * @name 删除标签 + */ +export const deleteItem = (params: TagList.delParams) => { + return http.post>(TAG_PORT + `/del`, params); +}; diff --git a/src/api/modules/upload.ts b/src/api/modules/upload.ts new file mode 100644 index 0000000..9927961 --- /dev/null +++ b/src/api/modules/upload.ts @@ -0,0 +1,17 @@ +import { Upload } from "@/api/interface/index"; +// import { PORT1, portAdmin } from "@/api/config/servicePort"; +import { PORT1 } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 文件上传模块 + */ +// 图片上传 +export const uploadImg = (params: FormData) => { + return http.post("https://mock.mengxuegu.com/mock/629d727e6163854a32e8307e" + `/file/upload/img`, params); +}; + +// 视频上传 +export const uploadVideo = (params: FormData) => { + return http.post(PORT1 + `/file/upload/video`, params); +}; diff --git a/src/api/modules/video/fenlei.ts b/src/api/modules/video/fenlei.ts new file mode 100644 index 0000000..93c6046 --- /dev/null +++ b/src/api/modules/video/fenlei.ts @@ -0,0 +1,15 @@ +import { ResPage } from "@/api/interface/index"; +import { fenLeiList } from "@/api/interface/video/fenlei"; +import { getShipinFenleiApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 视频分类 + */ +export const getList = (params: fenLeiList.ReqParams) => { + return http.get>(getShipinFenleiApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getShipinFenleiApiUrl, { limit: 1000, page: 1 }); +}; diff --git a/src/api/modules/video/list.ts b/src/api/modules/video/list.ts new file mode 100644 index 0000000..e078008 --- /dev/null +++ b/src/api/modules/video/list.ts @@ -0,0 +1,36 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { VideoList } from "@/api/interface/video/list"; +import { VIDEO_PORT } from "@/api/config/servicePort"; +import { getShipinMainListApiUrl, getShipinMainMrtjApiUrl, getShipinMainVipApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 视频列表 + */ +export const getVideoList = (params: VideoList.ReqParams) => { + return http.get>(getShipinMainListApiUrl, params); +}; +/** + * @name 设置视频 + */ +export const saveData = (params: VideoList.saveParams) => { + return http.post>(VIDEO_PORT + `/save`, params); +}; +/** + * @name 批量设置视频 + */ +export const batchData = (params: VideoList.delParams) => { + return http.post>(getShipinMainMrtjApiUrl, params); +}; +/** + * @name 批量设置vip视频 + */ +export const batchVipData = (params: VideoList.delParams) => { + return http.post>(getShipinMainVipApiUrl, params); +}; +/** + * @name 删除视频 + */ +export const deleteItem = (params: VideoList.delParams) => { + return http.post>(VIDEO_PORT + `/del`, params); +}; diff --git a/src/api/modules/video/nvyou.ts b/src/api/modules/video/nvyou.ts new file mode 100644 index 0000000..e58064c --- /dev/null +++ b/src/api/modules/video/nvyou.ts @@ -0,0 +1,15 @@ +import { ResPage } from "@/api/interface/index"; +import { nvYouList } from "@/api/interface/video/nvyou"; +import { getShipinNvYouApiUrl } from "@/api/config"; +import http from "@/api"; + +/** + * @name 视频女优 + */ +export const getList = (params: nvYouList.ReqParams) => { + return http.get>(getShipinNvYouApiUrl, params); +}; + +export const getAllList = () => { + return http.get>(getShipinNvYouApiUrl, { limit: 1000, page: 1 }); +}; diff --git a/src/api/modules/videoFeedback/list.ts b/src/api/modules/videoFeedback/list.ts new file mode 100644 index 0000000..9e06feb --- /dev/null +++ b/src/api/modules/videoFeedback/list.ts @@ -0,0 +1,23 @@ +import { ResPage, ResultData } from "@/api/interface/index"; +import { videoFeedbackList } from "@/api/interface/videoFeedback/list"; +import { FEEDBACK_PORT } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 视频反馈列表 + */ +export const getList = (params: videoFeedbackList.ReqParams) => { + return http.get>(FEEDBACK_PORT + `/list`, params); +}; +/** + * @name 设置视频反馈 + */ +export const saveData = (params: videoFeedbackList.saveParams) => { + return http.post>(FEEDBACK_PORT + `/save`, params); +}; +/** + * @name 删除视频反馈 + */ +export const deleteItem = (params: videoFeedbackList.delParams) => { + return http.post>(FEEDBACK_PORT + `/del`, params); +}; diff --git a/src/assets/fonts/DIN.otf b/src/assets/fonts/DIN.otf new file mode 100644 index 0000000..3296d1e Binary files /dev/null and b/src/assets/fonts/DIN.otf differ diff --git a/src/assets/fonts/MetroDF.ttf b/src/assets/fonts/MetroDF.ttf new file mode 100644 index 0000000..9d31af4 Binary files /dev/null and b/src/assets/fonts/MetroDF.ttf differ diff --git a/src/assets/fonts/YouSheBiaoTiHei.ttf b/src/assets/fonts/YouSheBiaoTiHei.ttf new file mode 100644 index 0000000..3729151 Binary files /dev/null and b/src/assets/fonts/YouSheBiaoTiHei.ttf differ diff --git a/src/assets/fonts/font.scss b/src/assets/fonts/font.scss new file mode 100644 index 0000000..d08cf8c --- /dev/null +++ b/src/assets/fonts/font.scss @@ -0,0 +1,14 @@ +@font-face { + font-family: YouSheBiaoTiHei; + src: url("./YouSheBiaoTiHei.ttf"); +} + +@font-face { + font-family: MetroDF; + src: url("./MetroDF.ttf"); +} + +@font-face { + font-family: DIN; + src: url("./DIN.Otf"); +} diff --git a/src/assets/iconfont/iconfont.scss b/src/assets/iconfont/iconfont.scss new file mode 100644 index 0000000..e33a515 --- /dev/null +++ b/src/assets/iconfont/iconfont.scss @@ -0,0 +1,48 @@ +@font-face { + font-family: iconfont; /* Project id 2667653 */ + src: url("iconfont.ttf?t=1694681005434") format("truetype"); +} +.iconfont { + font-family: iconfont !important; + font-size: 20px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + cursor: pointer; +} +.icon-yiwen::before { + font-size: 15px; + content: "\e693"; +} +.icon-xiala::before { + content: "\e62b"; +} +.icon-tuichu::before { + content: "\e645"; +} +.icon-xiaoxi::before { + font-size: 21.2px; + content: "\e61f"; +} +.icon-zhuti::before { + font-size: 22.4px; + content: "\e638"; +} +.icon-sousuo::before { + content: "\e611"; +} +.icon-contentright::before { + content: "\e8c9"; +} +.icon-contentleft::before { + content: "\e8ca"; +} +.icon-fangda::before { + content: "\e826"; +} +.icon-suoxiao::before { + content: "\e641"; +} +.icon-zhongyingwen::before { + content: "\e8cb"; +} diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000..99e4571 Binary files /dev/null and b/src/assets/iconfont/iconfont.ttf differ diff --git a/src/assets/icons/jurisdiction.svg b/src/assets/icons/jurisdiction.svg new file mode 100644 index 0000000..dee7162 --- /dev/null +++ b/src/assets/icons/jurisdiction.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingdaoyu.svg b/src/assets/icons/xianxingdaoyu.svg new file mode 100644 index 0000000..edfac8d --- /dev/null +++ b/src/assets/icons/xianxingdaoyu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingdiqiu.svg b/src/assets/icons/xianxingdiqiu.svg new file mode 100644 index 0000000..e13cb00 --- /dev/null +++ b/src/assets/icons/xianxingdiqiu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingditu.svg b/src/assets/icons/xianxingditu.svg new file mode 100644 index 0000000..ef1bdda --- /dev/null +++ b/src/assets/icons/xianxingditu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingfanchuan.svg b/src/assets/icons/xianxingfanchuan.svg new file mode 100644 index 0000000..2c2da28 --- /dev/null +++ b/src/assets/icons/xianxingfanchuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingfeiji.svg b/src/assets/icons/xianxingfeiji.svg new file mode 100644 index 0000000..e4d9a87 --- /dev/null +++ b/src/assets/icons/xianxingfeiji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxinglvhangriji.svg b/src/assets/icons/xianxinglvhangriji.svg new file mode 100644 index 0000000..2e1e47d --- /dev/null +++ b/src/assets/icons/xianxinglvhangriji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingtianqiyubao.svg b/src/assets/icons/xianxingtianqiyubao.svg new file mode 100644 index 0000000..3283580 --- /dev/null +++ b/src/assets/icons/xianxingtianqiyubao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingxiangjipaizhao.svg b/src/assets/icons/xianxingxiangjipaizhao.svg new file mode 100644 index 0000000..93ff9f5 --- /dev/null +++ b/src/assets/icons/xianxingxiangjipaizhao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingxiarilengyin.svg b/src/assets/icons/xianxingxiarilengyin.svg new file mode 100644 index 0000000..87132d1 --- /dev/null +++ b/src/assets/icons/xianxingxiarilengyin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingyoulun.svg b/src/assets/icons/xianxingyoulun.svg new file mode 100644 index 0000000..487e1ee --- /dev/null +++ b/src/assets/icons/xianxingyoulun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xianxingzijiayou.svg b/src/assets/icons/xianxingzijiayou.svg new file mode 100644 index 0000000..449c610 --- /dev/null +++ b/src/assets/icons/xianxingzijiayou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/403.png b/src/assets/images/403.png new file mode 100644 index 0000000..0c5ec7c Binary files /dev/null and b/src/assets/images/403.png differ diff --git a/src/assets/images/404.png b/src/assets/images/404.png new file mode 100644 index 0000000..2333586 Binary files /dev/null and b/src/assets/images/404.png differ diff --git a/src/assets/images/500.png b/src/assets/images/500.png new file mode 100644 index 0000000..6f3b6bf Binary files /dev/null and b/src/assets/images/500.png differ diff --git a/src/assets/images/avatar.gif b/src/assets/images/avatar.gif new file mode 100644 index 0000000..fdbd32c Binary files /dev/null and b/src/assets/images/avatar.gif differ diff --git a/src/assets/images/login_bg.svg b/src/assets/images/login_bg.svg new file mode 100644 index 0000000..0a9514b --- /dev/null +++ b/src/assets/images/login_bg.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/login_left.png b/src/assets/images/login_left.png new file mode 100644 index 0000000..e9ebc11 Binary files /dev/null and b/src/assets/images/login_left.png differ diff --git a/src/assets/images/login_left1.png b/src/assets/images/login_left1.png new file mode 100644 index 0000000..eaaf3ab Binary files /dev/null and b/src/assets/images/login_left1.png differ diff --git a/src/assets/images/login_left2.png b/src/assets/images/login_left2.png new file mode 100644 index 0000000..0398053 Binary files /dev/null and b/src/assets/images/login_left2.png differ diff --git a/src/assets/images/login_left3.png b/src/assets/images/login_left3.png new file mode 100644 index 0000000..58e6e74 Binary files /dev/null and b/src/assets/images/login_left3.png differ diff --git a/src/assets/images/login_left4.png b/src/assets/images/login_left4.png new file mode 100644 index 0000000..051299d Binary files /dev/null and b/src/assets/images/login_left4.png differ diff --git a/src/assets/images/login_left5.png b/src/assets/images/login_left5.png new file mode 100644 index 0000000..7d9d430 Binary files /dev/null and b/src/assets/images/login_left5.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..82b28b4 Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/msg01.png b/src/assets/images/msg01.png new file mode 100644 index 0000000..6ecca0d Binary files /dev/null and b/src/assets/images/msg01.png differ diff --git a/src/assets/images/msg02.png b/src/assets/images/msg02.png new file mode 100644 index 0000000..52c890a Binary files /dev/null and b/src/assets/images/msg02.png differ diff --git a/src/assets/images/msg03.png b/src/assets/images/msg03.png new file mode 100644 index 0000000..389512f Binary files /dev/null and b/src/assets/images/msg03.png differ diff --git a/src/assets/images/msg04.png b/src/assets/images/msg04.png new file mode 100644 index 0000000..6868f74 Binary files /dev/null and b/src/assets/images/msg04.png differ diff --git a/src/assets/images/msg05.png b/src/assets/images/msg05.png new file mode 100644 index 0000000..f375ab0 Binary files /dev/null and b/src/assets/images/msg05.png differ diff --git a/src/assets/images/notData.png b/src/assets/images/notData.png new file mode 100644 index 0000000..c579a78 Binary files /dev/null and b/src/assets/images/notData.png differ diff --git a/src/assets/images/welcome.png b/src/assets/images/welcome.png new file mode 100644 index 0000000..df138ab Binary files /dev/null and b/src/assets/images/welcome.png differ diff --git a/src/assets/json/authButtonList.json b/src/assets/json/authButtonList.json new file mode 100644 index 0000000..24257b6 --- /dev/null +++ b/src/assets/json/authButtonList.json @@ -0,0 +1,8 @@ +{ + "code": 200, + "data": { + "useProTable": ["add", "batchAdd", "export", "batchDelete", "status"], + "authButton": ["add", "edit", "delete", "import", "export"] + }, + "msg": "成功" +} diff --git a/src/assets/json/authMenuList.json b/src/assets/json/authMenuList.json new file mode 100644 index 0000000..7bf25ed --- /dev/null +++ b/src/assets/json/authMenuList.json @@ -0,0 +1,1056 @@ +{ + "code": 200, + "data": [ + { + "path": "/home/index", + "name": "home", + "component": "/home/index", + "meta": { + "icon": "HomeFilled", + "title": "首页", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": true, + "isKeepAlive": true + } + }, + { + "path": "/system", + "name": "system", + "meta": { + "an_id": 1000, + "icon": "Tools", + "title": "系统管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/user", + "name": "systemUser", + "meta": { + "an_id": 1100, + "icon": "User", + "title": "系统用户管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/user/index", + "name": "systemUserIndex", + "component": "/system/user/index", + "meta": { + "an_id": 1101, + "icon": "User", + "title": "系统用户列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/user/info", + "name": "systemUserInfo", + "component": "/system/user/info", + "meta": { + "an_id": 1107, + "icon": "User", + "title": "系统用户详情", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/role/index", + "name": "systemRoleIndex", + "component": "/system/role/index", + "meta": { + "an_id": 1104, + "icon": "UserFilled", + "title": "角色列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/node/index", + "name": "systemNodeIndex", + "component": "/system/node/index", + "meta": { + "an_id": 1109, + "icon": "Unlock", + "title": "节点列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/system/config", + "name": "systemConfig", + "meta": { + "an_id": 1200, + "icon": "Tools", + "title": "配置管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/config/index", + "name": "systemConfigIndex", + "component": "/system/config/index", + "meta": { + "an_id": 1201, + "icon": "Histogram", + "title": "配置列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/resource/endpoint/list", + "name": "endpointList", + "component": "/resource/endpoint/index", + "meta": { + "an_id": 2504, + "icon": "Operation", + "title": "端点资源列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/gather/index", + "name": "systemSystemConfig", + "component": "/system/gather/index", + "meta": { + "an_id": 1203, + "icon": "Histogram", + "title": "采集配置列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/searchKey/index", + "name": "searchKeyIndex", + "component": "/searchKey/index", + "meta": { + "an_id": 2112, + "icon": "Monitor", + "title": "seo关键词", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/plan/index", + "name": "systemPlanIndex", + "component": "/system/plan/index", + "meta": { + "an_id": 1301, + "icon": "Bell", + "title": "计划任务列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/system/plan", + "name": "systemPlan", + "meta": { + "an_id": 1300, + "icon": "Notebook", + "title": "系统计划任务管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/plan/index", + "name": "systemPlanIndex", + "component": "/system/plan/index", + "meta": { + "an_id": 1301, + "icon": "Bell", + "title": "计划任务列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/companyManagement", + "name": "companyManagement", + "meta": { + "an_id": 1400, + "icon": "OfficeBuilding", + "title": "公司管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/company", + "name": "systemCompany", + "component": "/system/company/index", + "meta": { + "an_id": 1401, + "icon": "Bell", + "title": "公司列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/company/info", + "name": "systemCompanyInfo", + "component": "/system/company/info", + "meta": { + "an_id": 1405, + "icon": "Bell", + "title": "公司详情", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/notificationManagement", + "name": "notificationManagement", + "meta": { + "an_id": 1500, + "icon": "OfficeBuilding", + "title": "通知管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/bot", + "name": "systemBot", + "component": "/system/bot/index", + "meta": { + "an_id": 1501, + "icon": "User", + "title": "机器人列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/notice", + "name": "systemNotice", + "component": "/system/notice/index", + "meta": { + "an_id": 1504, + "icon": "Bell", + "title": "通知类型列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/logsManagement", + "name": "logsManagement", + "meta": { + "an_id": 1600, + "icon": "Document", + "title": "日志管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/logs/operate", + "name": "systemLogsOperate", + "component": "/system/logs/operate/index", + "meta": { + "an_id": 1601, + "icon": "Operation", + "title": "日志列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/caChe", + "name": "caChe", + "meta": { + "an_id": 1800, + "icon": "Document", + "title": "日志管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/system/caChe/manage/index", + "name": "caCheManage", + "component": "/system/caChe/manage/index", + "meta": { + "an_id": 1801, + "icon": "Operation", + "title": "缓存列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/system/caChe/es/index", + "name": "caCheEs", + "component": "/system/caChe/es/index", + "meta": { + "an_id": 1803, + "icon": "Operation", + "title": "ES索引列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + } + ] + }, + + { + "path": "/resources", + "name": "resources", + "meta": { + "an_id": 2000, + "icon": "Grid", + "title": "资源管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/video", + "name": "video", + "meta": { + "an_id": 2100, + "icon": "VideoCameraFilled", + "title": "视频管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/video/fenlei/index", + "name": "videoFenlei", + "component": "/video/fenlei/index", + "meta": { + "an_id": 2307, + "icon": "Files", + "title": "视频分类", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/video/nvyou/index", + "name": "videoNvYou", + "component": "/video/nvyou/index", + "meta": { + "an_id": 2307, + "icon": "Files", + "title": "明星列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/video/index", + "name": "Video", + "component": "/video/index", + "meta": { + "an_id": 2101, + "icon": "VideoCamera", + "title": "视频列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/tag/videoTag/index", + "name": "videoTag", + "component": "/tag/videoTag/index", + "meta": { + "an_id": 2105, + "icon": "Files", + "title": "标签列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/searchGroup/index", + "name": "searchGroupIndex", + "component": "/searchGroup/index", + "meta": { + "an_id": 2109, + "icon": "Monitor", + "title": "搜索分组列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/manga", + "name": "manga", + "meta": { + "an_id": 2200, + "icon": "Platform", + "title": "漫画管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/manga/fenlei/index", + "name": "mangaFenlei", + "component": "/manga/fenlei/index", + "meta": { + "an_id": 2307, + "icon": "Files", + "title": "漫画分类", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/manga/index", + "name": "Manga", + "component": "/manga/index", + "meta": { + "an_id": 2201, + "icon": "Monitor", + "title": "漫画列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/manga/chapter/index", + "name": "MangaChapter", + "component": "/manga/chapter/index", + "meta": { + "an_id": 2201, + "icon": "Monitor", + "title": "漫画章节列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/tag/mangaTag/index", + "name": "mangaTag", + "component": "/tag/mangaTag/index", + "meta": { + "an_id": 2208, + "icon": "Files", + "title": "标签列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + + { + "path": "/novel", + "name": "novel", + "meta": { + "an_id": 2300, + "icon": "Platform", + "title": "小说管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/novel/fenlei/index", + "name": "novelFenlei", + "component": "/novel/fenlei/index", + "meta": { + "an_id": 2307, + "icon": "Files", + "title": "小说分类", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/novel/index", + "name": "Novel", + "component": "/novel/index", + "meta": { + "an_id": 2301, + "icon": "Monitor", + "title": "小说列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/novel/chapter/index", + "name": "NovelChapter", + "component": "/novel/chapter/index", + "meta": { + "an_id": 2301, + "icon": "Monitor", + "title": "小说章节列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + + { + "path": "/atlas", + "name": "atlas", + "meta": { + "an_id": 2400, + "icon": "PictureFilled", + "title": "图册管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/atlas/index", + "name": "Atlas", + "component": "/atlas/index", + "meta": { + "an_id": 2401, + "icon": "Picture", + "title": "图册列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/tag/atlasTag/index", + "name": "Tag", + "component": "/tag/atlasTag/index", + "meta": { + "an_id": 2404, + "icon": "Files", + "title": "标签列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + + { + "path": "/resource", + "name": "resource", + "meta": { + "an_id": 2500, + "icon": "Flag", + "title": "端点管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/resource/endpointGroup/list", + "name": "endpointGroupList", + "component": "/resource/endpointGroup/index", + "meta": { + "an_id": 2501, + "icon": "Operation", + "title": "端点资源分组列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + } + ] + }, + + { + "path": "/miUser", + "name": "miUser", + "meta": { + "an_id": 3000, + "icon": "UserFilled", + "title": "用户管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/miUser/index", + "name": "MiUser", + "component": "/miUser/index", + "meta": { + "an_id": 3001, + "icon": "User", + "title": "用户列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + + + { + "path": "/feedback", + "name": "feedback", + "meta": { + "an_id": 5000, + "icon": "UserFilled", + "title": "反馈管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/videoFeedback/index", + "name": "VideoFeedback", + "component": "/videoFeedback/index", + "meta": { + "an_id": 5001, + "icon": "Monitor", + "title": "视频反馈列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/finance/recharge/feedback/index", + "name": "financeRechargeFeedbackIndex", + "component": "/finance/recharge/feedback/index", + "meta": { + "an_id": 5002, + "icon": "Monitor", + "title": "小说反馈列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/ad", + "name": "ad", + "meta": { + "an_id": 6000, + "icon": "CameraFilled", + "title": "广告管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/ad/template", + "name": "adTemplate", + "component": "/ad/template/index", + "meta": { + "an_id": 6001, + "icon": "Operation", + "title": "广告模板列表", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/ad/group", + "name": "adGroup", + "component": "/ad/group/index", + "meta": { + "an_id": 6002, + "icon": "Operation", + "title": "广告分组列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/ad/list", + "name": "adList", + "component": "/ad/list/index", + "meta": { + "an_id": 6004, + "icon": "Operation", + "title": "广告列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + + { + "path": "/ad/config", + "name": "adConfig", + "component": "/ad/config/index", + "meta": { + "an_id": 6004, + "icon": "Operation", + "title": "广告配置", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + + { + "path": "/site", + "name": "site", + "meta": { + "an_id": 11000, + "icon": "Management", + "title": "站点管理", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/site/index", + "name": "siteIndex", + "component": "/site/index", + "meta": { + "an_id": 11001, + "icon": "Monitor", + "title": "站点列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/site/tkdarg", + "name": "siteTkdarg", + "component": "/site/tkdarg", + "meta": { + "an_id": 11002, + "icon": "Monitor", + "title": "参数模板列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/site/template", + "name": "siteTemplate", + "component": "/site/template", + "meta": { + "an_id": 11003, + "icon": "Monitor", + "title": "视图模板列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/site/subject/fomart/group/list", + "name": "siteSubjectFomartGroupList", + "component": "/site/subject/fomart/group/list", + "meta": { + "an_id": 11004, + "icon": "Monitor", + "title": "替换模板分组列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + }, + { + "path": "/site/subject/fomart/list/index", + "name": "siteSubjectFomartList", + "component": "/site/subject/fomart/list/index", + "meta": { + "an_id": 11005, + "icon": "Monitor", + "title": "替换模板列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/tab", + "name": "tab", + "meta": { + "an_id": 12000, + "icon": "Expand", + "title": "TAB管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/tab/index", + "name": "Tab", + "component": "/tab/index", + "meta": { + "an_id": 12001, + "icon": "Monitor", + "title": "TAB列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + }, + { + "path": "/channel", + "name": "Channel", + "meta": { + "an_id": 13000, + "icon": "Expand", + "title": "渠道管理", + "isLink": "", + "isHide": true, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/channel/statistics", + "name": "ChannelStatistics", + "component": "/channel/statistics", + "meta": { + "an_id": 13100, + "icon": "Monitor", + "title": "统计代码", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + }, + "children": [ + { + "path": "/channel/statistics/index", + "name": "ChannelStatisticsIndex", + "component": "/channel/statistics/index", + "meta": { + "an_id": 13101, + "icon": "Monitor", + "title": "列表", + "isLink": "", + "isHide": false, + "isFull": false, + "isAffix": false, + "isKeepAlive": true + } + } + ] + } + ] + } + ], + "msg": "成功" +} diff --git a/src/assets/mock/Easy-Mock-API.zip b/src/assets/mock/Easy-Mock-API.zip new file mode 100644 index 0000000..f5228ba Binary files /dev/null and b/src/assets/mock/Easy-Mock-API.zip differ diff --git a/src/components/ECharts/config/index.ts b/src/components/ECharts/config/index.ts new file mode 100644 index 0000000..f41ad8d --- /dev/null +++ b/src/components/ECharts/config/index.ts @@ -0,0 +1,72 @@ +import * as echarts from "echarts/core"; +import { BarChart, LineChart, LinesChart, PieChart, ScatterChart, RadarChart, GaugeChart } from "echarts/charts"; +import { + TitleComponent, + TooltipComponent, + GridComponent, + DatasetComponent, + TransformComponent, + LegendComponent, + PolarComponent, + GeoComponent, + ToolboxComponent, + DataZoomComponent +} from "echarts/components"; +import { LabelLayout, UniversalTransition } from "echarts/features"; +import { CanvasRenderer } from "echarts/renderers"; +import type { + BarSeriesOption, + LineSeriesOption, + LinesSeriesOption, + PieSeriesOption, + ScatterSeriesOption, + RadarSeriesOption, + GaugeSeriesOption +} from "echarts/charts"; +import type { + TitleComponentOption, + TooltipComponentOption, + GridComponentOption, + DatasetComponentOption +} from "echarts/components"; +import type { ComposeOption } from "echarts/core"; +import "echarts-liquidfill"; + +export type ECOption = ComposeOption< + | BarSeriesOption + | LineSeriesOption + | LinesSeriesOption + | PieSeriesOption + | RadarSeriesOption + | GaugeSeriesOption + | TitleComponentOption + | TooltipComponentOption + | GridComponentOption + | DatasetComponentOption + | ScatterSeriesOption +>; + +echarts.use([ + TitleComponent, + TooltipComponent, + GridComponent, + DatasetComponent, + TransformComponent, + LegendComponent, + PolarComponent, + GeoComponent, + ToolboxComponent, + DataZoomComponent, + BarChart, + LineChart, + LinesChart, + PieChart, + ScatterChart, + RadarChart, + GaugeChart, + LabelLayout, + UniversalTransition, + CanvasRenderer +]); + +export default echarts; diff --git a/src/components/ECharts/index.vue b/src/components/ECharts/index.vue new file mode 100644 index 0000000..2529dd4 --- /dev/null +++ b/src/components/ECharts/index.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/components/ErrorMessage/403.vue b/src/components/ErrorMessage/403.vue new file mode 100644 index 0000000..e3d57ae --- /dev/null +++ b/src/components/ErrorMessage/403.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/ErrorMessage/404.vue b/src/components/ErrorMessage/404.vue new file mode 100644 index 0000000..62bc686 --- /dev/null +++ b/src/components/ErrorMessage/404.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/ErrorMessage/500.vue b/src/components/ErrorMessage/500.vue new file mode 100644 index 0000000..71e70ca --- /dev/null +++ b/src/components/ErrorMessage/500.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/ErrorMessage/index.scss b/src/components/ErrorMessage/index.scss new file mode 100644 index 0000000..4fc4aa5 --- /dev/null +++ b/src/components/ErrorMessage/index.scss @@ -0,0 +1,32 @@ +.not-container { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + .not-img { + margin-right: 120px; + } + .not-detail { + display: flex; + flex-direction: column; + h2, + h4 { + padding: 0; + margin: 0; + } + h2 { + font-size: 60px; + color: var(--el-text-color-primary); + } + h4 { + margin: 30px 0 20px; + font-size: 19px; + font-weight: normal; + color: var(--el-text-color-regular); + } + .el-button { + width: 100px; + } + } +} diff --git a/src/components/Grid/components/GridItem.vue b/src/components/Grid/components/GridItem.vue new file mode 100644 index 0000000..570fa30 --- /dev/null +++ b/src/components/Grid/components/GridItem.vue @@ -0,0 +1,68 @@ + + diff --git a/src/components/Grid/index.vue b/src/components/Grid/index.vue new file mode 100644 index 0000000..6424f85 --- /dev/null +++ b/src/components/Grid/index.vue @@ -0,0 +1,167 @@ + + + diff --git a/src/components/Grid/interface/index.ts b/src/components/Grid/interface/index.ts new file mode 100644 index 0000000..31a74b4 --- /dev/null +++ b/src/components/Grid/interface/index.ts @@ -0,0 +1,6 @@ +export type BreakPoint = "xs" | "sm" | "md" | "lg" | "xl"; + +export type Responsive = { + span?: number; + offset?: number; +}; diff --git a/src/components/ImportExcel/index-bf.vue b/src/components/ImportExcel/index-bf.vue new file mode 100644 index 0000000..c54d80d --- /dev/null +++ b/src/components/ImportExcel/index-bf.vue @@ -0,0 +1,164 @@ + + + + diff --git a/src/components/ImportExcel/index.vue b/src/components/ImportExcel/index.vue new file mode 100644 index 0000000..708d204 --- /dev/null +++ b/src/components/ImportExcel/index.vue @@ -0,0 +1,172 @@ + + + + diff --git a/src/components/Loading/fullScreen.ts b/src/components/Loading/fullScreen.ts new file mode 100644 index 0000000..088b0d1 --- /dev/null +++ b/src/components/Loading/fullScreen.ts @@ -0,0 +1,45 @@ +import { ElLoading } from "element-plus"; + +/* 全局请求 loading */ +let loadingInstance: ReturnType; + +/** + * @description 开启 Loading + * */ +const startLoading = () => { + loadingInstance = ElLoading.service({ + fullscreen: true, + lock: true, + text: "Loading", + background: "rgba(0, 0, 0, 0.7)" + }); +}; + +/** + * @description 结束 Loading + * */ +const endLoading = () => { + loadingInstance.close(); +}; + +/** + * @description 显示全屏加载 + * */ +let needLoadingRequestCount = 0; +export const showFullScreenLoading = () => { + if (needLoadingRequestCount === 0) { + startLoading(); + } + needLoadingRequestCount++; +}; + +/** + * @description 隐藏全屏加载 + * */ +export const tryHideFullScreenLoading = () => { + if (needLoadingRequestCount <= 0) return; + needLoadingRequestCount--; + if (needLoadingRequestCount === 0) { + endLoading(); + } +}; diff --git a/src/components/Loading/index.scss b/src/components/Loading/index.scss new file mode 100644 index 0000000..cce5561 --- /dev/null +++ b/src/components/Loading/index.scss @@ -0,0 +1,67 @@ +.loading-box { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + .loading-wrap { + display: flex; + align-items: center; + justify-content: center; + padding: 98px; + } +} +.dot { + position: relative; + box-sizing: border-box; + display: inline-block; + width: 32px; + height: 32px; + font-size: 32px; + transform: rotate(45deg); + animation: ant-rotate 1.2s infinite linear; +} +.dot i { + position: absolute; + display: block; + width: 14px; + height: 14px; + background-color: var(--el-color-primary); + border-radius: 100%; + opacity: 0.3; + transform: scale(0.75); + transform-origin: 50% 50%; + animation: ant-spin-move 1s infinite linear alternate; +} +.dot i:nth-child(1) { + top: 0; + left: 0; +} +.dot i:nth-child(2) { + top: 0; + right: 0; + animation-delay: 0.4s; +} +.dot i:nth-child(3) { + right: 0; + bottom: 0; + animation-delay: 0.8s; +} +.dot i:nth-child(4) { + bottom: 0; + left: 0; + animation-delay: 1.2s; +} + +@keyframes ant-rotate { + to { + transform: rotate(405deg); + } +} + +@keyframes ant-spin-move { + to { + opacity: 1; + } +} diff --git a/src/components/Loading/index.vue b/src/components/Loading/index.vue new file mode 100644 index 0000000..e411f04 --- /dev/null +++ b/src/components/Loading/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/components/ProTable/components/ColSetting.vue b/src/components/ProTable/components/ColSetting.vue new file mode 100644 index 0000000..8e68034 --- /dev/null +++ b/src/components/ProTable/components/ColSetting.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/components/ProTable/components/Pagination.vue b/src/components/ProTable/components/Pagination.vue new file mode 100644 index 0000000..d829d77 --- /dev/null +++ b/src/components/ProTable/components/Pagination.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ProTable/components/TableColumn.vue b/src/components/ProTable/components/TableColumn.vue new file mode 100644 index 0000000..9726f97 --- /dev/null +++ b/src/components/ProTable/components/TableColumn.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/components/ProTable/index.vue b/src/components/ProTable/index.vue new file mode 100644 index 0000000..0ea172c --- /dev/null +++ b/src/components/ProTable/index.vue @@ -0,0 +1,405 @@ + + + + + + + diff --git a/src/components/ProTable/interface/index.ts b/src/components/ProTable/interface/index.ts new file mode 100644 index 0000000..d8fc64e --- /dev/null +++ b/src/components/ProTable/interface/index.ts @@ -0,0 +1,85 @@ +import { VNode, ComponentPublicInstance, Ref } from "vue"; +import { BreakPoint, Responsive } from "@/components/Grid/interface"; +import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults"; +import { ProTableProps } from "@/components/ProTable/index.vue"; +import ProTable from "@/components/ProTable/index.vue"; + +export interface EnumProps { + label?: string; // 选项框显示的文字 + value?: string | number | boolean | any[]; // 选项框值 + disabled?: boolean; // 是否禁用此选项 + tagType?: string; // 当 tag 为 true 时,此选择会指定 tag 显示类型 + children?: EnumProps[]; // 为树形选择时,可以通过 children 属性指定子选项 + [key: string]: any; +} + +export type TypeProps = "index" | "selection" | "radio" | "expand" | "sort"; + +export type SearchType = + | "input" + | "input-number" + | "select" + | "select-v2" + | "tree-select" + | "cascader" + | "date-picker" + | "time-picker" + | "time-select" + | "switch" + | "slider"; + +export type SearchRenderScope = { + searchParam: { [key: string]: any }; + placeholder: string; + clearable: boolean; + options: EnumProps[]; + data: EnumProps[]; +}; + +export type SearchProps = { + el?: SearchType; // 当前项搜索框的类型 + label?: string; // 当前项搜索框的 label + props?: any; // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件 + key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定 + tooltip?: string; // 搜索提示 + order?: number; // 搜索项排序(从大到小) + span?: number; // 搜索项所占用的列数,默认为 1 列 + offset?: number; // 搜索字段左侧偏移列数 + defaultValue?: string | number | boolean | any[] | Ref; // 搜索项默认值 + render?: (scope: SearchRenderScope) => VNode; // 自定义搜索内容渲染(tsx语法) +} & Partial>; + +export type FieldNamesProps = { + label: string; + value: string; + children?: string; +}; + +export type RenderScope = { + row: T; + $index: number; + column: TableColumnCtx; + [key: string]: any; +}; + +export type HeaderRenderScope = { + $index: number; + column: TableColumnCtx; + [key: string]: any; +}; + +export interface ColumnProps + extends Partial, "type" | "children" | "renderCell" | "renderHeader">> { + type?: TypeProps; // 列类型 + tag?: boolean | Ref; // 是否是标签展示 + isShow?: boolean | Ref; // 是否显示在表格当中 + search?: SearchProps | undefined; // 搜索项配置 + enum?: EnumProps[] | Ref | ((params?: any) => Promise); // 枚举字典 + isFilterEnum?: boolean | Ref; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据) + fieldNames?: FieldNamesProps; // 指定 label && value && children 的 key 值 + headerRender?: (scope: HeaderRenderScope) => VNode; // 自定义表头内容渲染(tsx语法) + render?: (scope: RenderScope) => VNode | any; // 自定义单元格内容渲染(tsx语法) + _children?: ColumnProps[]; // 多级表头 +} + +export type ProTableInstance = Omit, keyof ComponentPublicInstance | keyof ProTableProps>; diff --git a/src/components/SearchForm/components/SearchFormItem.vue b/src/components/SearchForm/components/SearchFormItem.vue new file mode 100644 index 0000000..8d7957a --- /dev/null +++ b/src/components/SearchForm/components/SearchFormItem.vue @@ -0,0 +1,122 @@ + + + diff --git a/src/components/SearchForm/index.vue b/src/components/SearchForm/index.vue new file mode 100644 index 0000000..44f736c --- /dev/null +++ b/src/components/SearchForm/index.vue @@ -0,0 +1,99 @@ + + diff --git a/src/components/SwitchDark/index.vue b/src/components/SwitchDark/index.vue new file mode 100644 index 0000000..4a16eb3 --- /dev/null +++ b/src/components/SwitchDark/index.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/components/TreeFilter/index.scss b/src/components/TreeFilter/index.scss new file mode 100644 index 0000000..ca4a84f --- /dev/null +++ b/src/components/TreeFilter/index.scss @@ -0,0 +1,38 @@ +.filter { + box-sizing: border-box; + width: 220px; + height: 100%; + padding: 18px; + margin-right: 10px; + .title { + margin: 0 0 15px; + font-size: 18px; + font-weight: bold; + color: var(--el-color-info-dark-2); + letter-spacing: 0.5px; + } + .el-input { + margin: 0 0 15px; + } + .el-scrollbar { + :deep(.el-tree) { + height: 80%; + overflow: auto; + .el-tree-node__content { + height: 33px; + } + } + :deep(.el-tree--highlight-current) { + .el-tree-node.is-current > .el-tree-node__content { + background-color: var(--el-color-primary); + .el-tree-node__label, + .el-tree-node__expand-icon { + color: white; + } + .is-leaf { + color: transparent; + } + } + } + } +} diff --git a/src/components/TreeFilter/index.vue b/src/components/TreeFilter/index.vue new file mode 100644 index 0000000..e702fdb --- /dev/null +++ b/src/components/TreeFilter/index.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/components/Upload/Img.vue b/src/components/Upload/Img.vue new file mode 100644 index 0000000..46337ef --- /dev/null +++ b/src/components/Upload/Img.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/src/components/Upload/Imgs.vue b/src/components/Upload/Imgs.vue new file mode 100644 index 0000000..bfbf1ba --- /dev/null +++ b/src/components/Upload/Imgs.vue @@ -0,0 +1,324 @@ + + + + + + diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..fdc5884 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,22 @@ +// ? 全局默认配置项 + +// 首页地址(默认) +export const HOME_URL: string = "/home/index"; + +// 登录页地址(默认) +export const LOGIN_URL: string = "/login"; + +// 默认主题颜色 +export const DEFAULT_PRIMARY: string = "#009688"; + +// 路由白名单地址(本地存在的路由 staticRouter.ts 中) +export const ROUTER_WHITE_LIST: string[] = ["/500"]; + +// 高德地图 key +export const AMAP_MAP_KEY: string = ""; + +// 百度地图 key +export const BAIDU_MAP_KEY: string = ""; + +// 登录失效 +export const LOSE_STR_KEY: string = "9995"; diff --git a/src/config/nprogress.ts b/src/config/nprogress.ts new file mode 100644 index 0000000..a1697ef --- /dev/null +++ b/src/config/nprogress.ts @@ -0,0 +1,12 @@ +import NProgress from "nprogress"; +import "nprogress/nprogress.css"; + +NProgress.configure({ + easing: "ease", // 动画方式 + speed: 500, // 递增进度条的速度 + showSpinner: true, // 是否显示加载ico + trickleSpeed: 200, // 自动递增间隔 + minimum: 0.3 // 初始化时的最小百分比 +}); + +export default NProgress; diff --git a/src/config/serviceLoading.ts b/src/config/serviceLoading.ts new file mode 100644 index 0000000..088b0d1 --- /dev/null +++ b/src/config/serviceLoading.ts @@ -0,0 +1,45 @@ +import { ElLoading } from "element-plus"; + +/* 全局请求 loading */ +let loadingInstance: ReturnType; + +/** + * @description 开启 Loading + * */ +const startLoading = () => { + loadingInstance = ElLoading.service({ + fullscreen: true, + lock: true, + text: "Loading", + background: "rgba(0, 0, 0, 0.7)" + }); +}; + +/** + * @description 结束 Loading + * */ +const endLoading = () => { + loadingInstance.close(); +}; + +/** + * @description 显示全屏加载 + * */ +let needLoadingRequestCount = 0; +export const showFullScreenLoading = () => { + if (needLoadingRequestCount === 0) { + startLoading(); + } + needLoadingRequestCount++; +}; + +/** + * @description 隐藏全屏加载 + * */ +export const tryHideFullScreenLoading = () => { + if (needLoadingRequestCount <= 0) return; + needLoadingRequestCount--; + if (needLoadingRequestCount === 0) { + endLoading(); + } +}; diff --git a/src/customize.example/images/favicon.ico b/src/customize.example/images/favicon.ico new file mode 100644 index 0000000..306b55e Binary files /dev/null and b/src/customize.example/images/favicon.ico differ diff --git a/src/customize.example/images/logo.png b/src/customize.example/images/logo.png new file mode 100644 index 0000000..306b55e Binary files /dev/null and b/src/customize.example/images/logo.png differ diff --git a/src/directives/index.ts b/src/directives/index.ts new file mode 100644 index 0000000..5a94de0 --- /dev/null +++ b/src/directives/index.ts @@ -0,0 +1,18 @@ +import { App, Directive } from "vue"; +import auth from "./modules/auth"; +import debounce from "./modules/debounce"; + +const directivesList: { [key: string]: Directive } = { + auth, + debounce +}; + +const directives = { + install: function (app: App) { + Object.keys(directivesList).forEach(key => { + app.directive(key, directivesList[key]); + }); + } +}; + +export default directives; diff --git a/src/directives/modules/auth.ts b/src/directives/modules/auth.ts new file mode 100644 index 0000000..c25ac99 --- /dev/null +++ b/src/directives/modules/auth.ts @@ -0,0 +1,22 @@ +/** + * v-auth + * 按钮权限指令 + */ +import { useAuthStore } from "@/stores/modules/auth"; +import type { Directive, DirectiveBinding } from "vue"; + +const auth: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + const authStore = useAuthStore(); + const currentPageRoles = authStore.authButtonListGet[authStore.routeName] ?? []; + if (value instanceof Array && value.length) { + const hasPermission = value.every(item => currentPageRoles.includes(item)); + if (!hasPermission) el.remove(); + } else { + if (!currentPageRoles.includes(value)) el.remove(); + } + } +}; + +export default auth; diff --git a/src/directives/modules/debounce.ts b/src/directives/modules/debounce.ts new file mode 100644 index 0000000..636b347 --- /dev/null +++ b/src/directives/modules/debounce.ts @@ -0,0 +1,31 @@ +/** + * v-debounce + * 按钮防抖指令,可自行扩展至input + * 接收参数:function类型 + */ +import type { Directive, DirectiveBinding } from "vue"; +interface ElType extends HTMLElement { + __handleClick__: () => any; +} +const debounce: Directive = { + mounted(el: ElType, binding: DirectiveBinding) { + if (typeof binding.value !== "function") { + throw "callback must be a function"; + } + let timer: NodeJS.Timeout | null = null; + el.__handleClick__ = function () { + if (timer) { + clearInterval(timer); + } + timer = setTimeout(() => { + binding.value(); + }, 500); + }; + el.addEventListener("click", el.__handleClick__); + }, + beforeUnmount(el: ElType) { + el.removeEventListener("click", el.__handleClick__); + } +}; + +export default debounce; diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts new file mode 100644 index 0000000..8b49821 --- /dev/null +++ b/src/enums/httpEnum.ts @@ -0,0 +1,35 @@ +/** + * @description:请求配置 + */ +export enum ResultEnum { + SUCCESS = "1000", + ERROR = 500, + OVERDUE = 9995, + TIMEOUT = 30000, + TYPE = "success" +} + +/** + * @description:请求方法 + */ +export enum RequestEnum { + GET = "GET", + POST = "POST", + PATCH = "PATCH", + PUT = "PUT", + DELETE = "DELETE" +} + +/** + * @description:常用的 contentTyp 类型 + */ +export enum ContentTypeEnum { + // json + JSON = "application/json;charset=UTF-8", + // text + TEXT = "text/plain;charset=UTF-8", + // form-data 一般配合qs + FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8", + // form-data 上传 + FORM_DATA = "multipart/form-data;charset=UTF-8" +} diff --git a/src/hooks/interface/index.ts b/src/hooks/interface/index.ts new file mode 100644 index 0000000..dbc2117 --- /dev/null +++ b/src/hooks/interface/index.ts @@ -0,0 +1,7 @@ +export namespace Theme { + export type ThemeType = "light" | "inverted" | "dark"; + export type GreyOrWeakType = "grey" | "weak"; +} +export namespace HandleData { + export type MessageType = "" | "success" | "warning" | "info" | "error"; +} diff --git a/src/hooks/useDownload.ts b/src/hooks/useDownload.ts new file mode 100644 index 0000000..9023fbb --- /dev/null +++ b/src/hooks/useDownload.ts @@ -0,0 +1,48 @@ +import { ElNotification } from "element-plus"; +const BASE_URL = import.meta.env.VITE_API_URL; + +/** + * @description 接收数据流生成 blob,创建链接,下载文件 + * @param {Function} api 导出表格的api方法 (必传) + * @param {String} tempName 导出的文件名 (必传) + * @param {Object} params 导出的参数 (默认{}) + * @param {Boolean} isNotify 是否有导出消息提示 (默认为 true) + * @param {String} fileType 导出的文件格式 (默认为.xlsx) + * */ +export const useDownload = async ( + api: (param: any) => Promise, + tempName: string, + params: any = {}, + isNotify: boolean = true + // fileType: string = ".xlsx" +) => { + if (isNotify) { + ElNotification({ + title: "温馨提示", + message: "如果数据庞大会导致下载缓慢哦,请您耐心等待!", + type: "info", + duration: 3000 + }); + } + try { + const res = await api(params); + // console.log(res, BASE_URL, "下载啦"); + location.href = BASE_URL + "/" + res.data.excel_template_path; + + // const blob = new Blob([res]); + // // 兼容 edge 不支持 createObjectURL 方法 + // if ("msSaveOrOpenBlob" in navigator) return window.navigator.msSaveOrOpenBlob(blob, tempName + fileType); + // const blobUrl = window.URL.createObjectURL(blob); + // const exportFile = document.createElement("a"); + // exportFile.style.display = "none"; + // exportFile.download = `${tempName}${fileType}`; + // exportFile.href = blobUrl; + // document.body.appendChild(exportFile); + // exportFile.click(); + // // 去除下载对 url 的影响 + // document.body.removeChild(exportFile); + // window.URL.revokeObjectURL(blobUrl); + } catch (error) { + console.log(error); + } +}; diff --git a/src/hooks/useHandleData.ts b/src/hooks/useHandleData.ts new file mode 100644 index 0000000..a6fd07b --- /dev/null +++ b/src/hooks/useHandleData.ts @@ -0,0 +1,42 @@ +import { ElMessageBox, ElMessage } from "element-plus"; +import { HandleData } from "./interface"; + +/** + * @description 操作单条数据信息 (二次确认【删除、禁用、启用、重置密码】) + * @param {Function} api 操作数据接口的api方法 (必传) + * @param {Object} params 携带的操作数据参数 {id,params} (必传) + * @param {String} message 提示信息 (必传) + * @param {String} confirmType icon类型 (不必传,默认为 warning) + * @returns {Promise} + */ +export const useHandleData = ( + api: (params: any) => Promise, + params: any = {}, + message: string, + title?: any, + confirmType: HandleData.MessageType = "warning" +) => { + return new Promise((resolve, reject) => { + ElMessageBox.confirm(`是否${message}?`, "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: confirmType, + center: true, + draggable: true + }) + .then(async () => { + const res = await api(params); + if (!res) return reject(false); + ElMessage({ + type: "success", + message: title?.length > 0 ? title : `${"操作"}成功!` + // message: `${"操作"}成功!` + }); + resolve(true); + }) + .catch(() => { + // 用户点击了取消 + // resolve(false); // 这里我们解决了Promise而不是拒绝它 + }); + }); +}; diff --git a/src/hooks/useSelection.ts b/src/hooks/useSelection.ts new file mode 100644 index 0000000..9dd4935 --- /dev/null +++ b/src/hooks/useSelection.ts @@ -0,0 +1,34 @@ +import { ref, computed } from "vue"; + +/** + * @description 表格多选数据操作 + * @param {String} rowKey 当表格可以多选时,所指定的 id + * */ +export const useSelection = (rowKey: string = "id") => { + const isSelected = ref(false); + const selectedList = ref<{ [key: string]: any }[]>([]); + + // 当前选中的所有 ids 数组 + const selectedListIds = computed((): string[] => { + let ids: string[] = []; + selectedList.value.forEach(item => ids.push(item[rowKey])); + return ids; + }); + + /** + * @description 多选操作 + * @param {Array} rowArr 当前选择的所有数据 + * @return void + */ + const selectionChange = (rowArr: { [key: string]: any }[]) => { + rowArr.length ? (isSelected.value = true) : (isSelected.value = false); + selectedList.value = rowArr; + }; + + return { + isSelected, + selectedList, + selectedListIds, + selectionChange + }; +}; diff --git a/src/hooks/useTable.ts b/src/hooks/useTable.ts new file mode 100644 index 0000000..86351a7 --- /dev/null +++ b/src/hooks/useTable.ts @@ -0,0 +1,154 @@ +import { Table } from "./interface"; +import { reactive, computed, toRefs } from "vue"; + +/** + * @description table 页面操作方法封装 + * @param {Function} api 获取表格数据 api 方法 (必传) + * @param {Object} initParam 获取数据初始化参数 (非必传,默认为{}) + * @param {Boolean} isPageable 是否有分页 (非必传,默认为true) + * @param {Function} dataCallBack 对后台返回的数据进行处理的方法 (非必传) + * */ +export const useTable = ( + api?: (params: any) => Promise, + initParam: object = {}, + isPageable: boolean = true, + dataCallBack?: (data: any) => any, + requestError?: (error: any) => void +) => { + const state = reactive({ + // 表格数据 + tableData: [], + // 分页数据 + pageable: { + // 当前页数 + page: 1, + // 每页显示条数 + limit: 25, + // 总条数 + total: 0 + }, + // 查询参数(只包括查询) + searchParam: {}, + // 初始化默认的查询参数 + searchInitParam: {}, + // 总参数(包含分页和查询参数) + totalParam: {} + }); + + /** + * @description 分页查询参数(只包括分页和表格字段排序,其他排序方式可自行配置) + * */ + const pageParam = computed({ + get: () => { + return { + page: state.pageable.page, + limit: state.pageable.limit + }; + }, + set: (newVal: any) => { + console.log("我是分页更新之后的值", newVal); + } + }); + + /** + * @description 获取表格数据 + * @return void + * */ + const getTableList = async () => { + if (!api) return; + try { + // 先把初始化参数和分页参数放到总参数里面 + Object.assign(state.totalParam, initParam, isPageable ? pageParam.value : {}); + let { data } = await api({ ...state.searchInitParam, ...state.totalParam }); + dataCallBack && (data = dataCallBack(data)); + state.tableData = isPageable ? data.items : data; + // 解构后台返回的分页数据 (如果有分页更新分页信息) + if (isPageable) { + const { page, limit, total } = data; + updatePageable({ page, limit: limit * 1, total }); + } + } catch (error) { + requestError && requestError(error); + } + }; + + /** + * @description 更新查询参数 + * @return void + * */ + const updatedTotalParam = () => { + state.totalParam = {}; + // 处理查询参数,可以给查询参数加自定义前缀操作 + let nowSearchParam: Table.StateProps["searchParam"] = {}; + // 防止手动清空输入框携带参数(这里可以自定义查询参数前缀) + for (let key in state.searchParam) { + // 某些情况下参数为 false/0 也应该携带参数 + if (state.searchParam[key] || state.searchParam[key] === false || state.searchParam[key] === 0) { + nowSearchParam[key] = state.searchParam[key]; + } + } + Object.assign(state.totalParam, nowSearchParam, isPageable ? pageParam.value : {}); + }; + + /** + * @description 更新分页信息 + * @param {Object} pageable 后台返回的分页数据 + * @return void + * */ + const updatePageable = (pageable: Table.Pageable) => { + Object.assign(state.pageable, pageable); + }; + + /** + * @description 表格数据查询 + * @return void + * */ + const search = () => { + state.pageable.page = 1; + updatedTotalParam(); + getTableList(); + }; + + /** + * @description 表格数据重置 + * @return void + * */ + const reset = () => { + state.pageable.page = 1; + // 重置搜索表单的时,如果有默认搜索参数,则重置默认的搜索参数 + state.searchParam = { ...state.searchInitParam }; + updatedTotalParam(); + getTableList(); + }; + + /** + * @description 每页条数改变 + * @param {Number} val 当前条数 + * @return void + * */ + const handleSizeChange = (val: number) => { + state.pageable.page = 1; + state.pageable.limit = val; + getTableList(); + }; + + /** + * @description 当前页改变 + * @param {Number} val 当前页 + * @return void + * */ + const handleCurrentChange = (val: number) => { + state.pageable.page = val; + getTableList(); + }; + + return { + ...toRefs(state), + getTableList, + search, + reset, + handleSizeChange, + handleCurrentChange, + updatedTotalParam + }; +}; diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts new file mode 100644 index 0000000..89c2316 --- /dev/null +++ b/src/hooks/useTheme.ts @@ -0,0 +1,111 @@ +import { storeToRefs } from "pinia"; +import { Theme } from "./interface"; +import { ElMessage } from "element-plus"; +import { DEFAULT_PRIMARY } from "@/config"; +import { useGlobalStore } from "@/stores/modules/global"; +import { getLightColor, getDarkColor } from "@/utils/color"; +import { menuTheme } from "@/styles/theme/menu"; +import { asideTheme } from "@/styles/theme/aside"; +import { headerTheme } from "@/styles/theme/header"; + +/** + * @description 全局主题 hooks + * */ +export const useTheme = () => { + const globalStore = useGlobalStore(); + const { primary, isDark, isGrey, isWeak, layout, asideInverted, headerInverted } = storeToRefs(globalStore); + + // 切换暗黑模式 ==> 同时修改主题颜色、侧边栏、头部颜色 + const switchDark = () => { + const html = document.documentElement as HTMLElement; + if (isDark.value) html.setAttribute("class", "dark"); + else html.setAttribute("class", ""); + changePrimary(primary.value); + setAsideTheme(); + setHeaderTheme(); + }; + + // 修改主题颜色 + const changePrimary = (val: string | null) => { + if (!val) { + val = DEFAULT_PRIMARY; + ElMessage({ type: "success", message: `主题颜色已重置为 ${DEFAULT_PRIMARY}` }); + } + // 计算主题颜色变化 + document.documentElement.style.setProperty("--el-color-primary", val); + document.documentElement.style.setProperty( + "--el-color-primary-dark-2", + isDark.value ? `${getLightColor(val, 0.2)}` : `${getDarkColor(val, 0.3)}` + ); + for (let i = 1; i <= 9; i++) { + const primaryColor = isDark.value ? `${getDarkColor(val, i / 10)}` : `${getLightColor(val, i / 10)}`; + document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, primaryColor); + } + globalStore.setGlobalState("primary", val); + }; + + // 灰色和弱色切换 + const changeGreyOrWeak = (type: Theme.GreyOrWeakType, value: boolean) => { + const body = document.body as HTMLElement; + if (!value) return body.removeAttribute("style"); + const styles: Record = { + grey: "filter: grayscale(1)", + weak: "filter: invert(80%)" + }; + body.setAttribute("style", styles[type]); + const propName = type === "grey" ? "isWeak" : "isGrey"; + globalStore.setGlobalState(propName, false); + }; + + // 设置菜单样式 + const setMenuTheme = () => { + let type: Theme.ThemeType = "light"; + if (layout.value === "transverse" && headerInverted.value) type = "inverted"; + if (layout.value !== "transverse" && asideInverted.value) type = "inverted"; + if (isDark.value) type = "dark"; + const theme = menuTheme[type!]; + for (const [key, value] of Object.entries(theme)) { + document.documentElement.style.setProperty(key, value); + } + }; + + // 设置侧边栏样式 + const setAsideTheme = () => { + let type: Theme.ThemeType = "light"; + if (asideInverted.value) type = "inverted"; + if (isDark.value) type = "dark"; + const theme = asideTheme[type!]; + for (const [key, value] of Object.entries(theme)) { + document.documentElement.style.setProperty(key, value); + } + setMenuTheme(); + }; + + // 设置头部样式 + const setHeaderTheme = () => { + let type: Theme.ThemeType = "light"; + if (headerInverted.value) type = "inverted"; + if (isDark.value) type = "dark"; + const theme = headerTheme[type!]; + for (const [key, value] of Object.entries(theme)) { + document.documentElement.style.setProperty(key, value); + } + setMenuTheme(); + }; + + // init theme + const initTheme = () => { + switchDark(); + if (isGrey.value) changeGreyOrWeak("grey", true); + if (isWeak.value) changeGreyOrWeak("weak", true); + }; + + return { + initTheme, + switchDark, + changePrimary, + changeGreyOrWeak, + setAsideTheme, + setHeaderTheme + }; +}; diff --git a/src/images/favicon.ico b/src/images/favicon.ico new file mode 100644 index 0000000..82b28b4 Binary files /dev/null and b/src/images/favicon.ico differ diff --git a/src/images/logo.png b/src/images/logo.png new file mode 100644 index 0000000..82b28b4 Binary files /dev/null and b/src/images/logo.png differ diff --git a/src/layouts/LayoutClassic/index.scss b/src/layouts/LayoutClassic/index.scss new file mode 100644 index 0000000..eddc6e3 --- /dev/null +++ b/src/layouts/LayoutClassic/index.scss @@ -0,0 +1,60 @@ +.el-container { + width: 100%; + height: 100%; + :deep(.el-header) { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px 0 0; + background-color: var(--el-header-bg-color); + border-bottom: 1px solid var(--el-header-border-color); + .header-lf { + display: flex; + align-items: center; + overflow: hidden; + white-space: nowrap; + .logo { + flex-shrink: 0; + width: 210px; + margin-right: 16px; + .logo-img { + width: 28px; + object-fit: contain; + margin-right: 6px; + } + .logo-text { + font-size: 21.5px; + font-weight: bold; + color: var(--el-header-logo-text-color); + white-space: nowrap; + } + } + } + } + .classic-content { + display: flex; + height: calc(100% - 55px); + :deep(.el-aside) { + width: auto; + background-color: var(--el-menu-bg-color); + border-right: 1px solid var(--el-aside-border-color); + .aside-box { + display: flex; + flex-direction: column; + height: 100%; + transition: width 0.3s ease; + .el-menu { + width: 100%; + overflow-x: hidden; + border-right: none; + } + } + } + .classic-main { + display: flex; + flex-direction: column; + } + } +} diff --git a/src/layouts/LayoutClassic/index.vue b/src/layouts/LayoutClassic/index.vue new file mode 100644 index 0000000..daac90c --- /dev/null +++ b/src/layouts/LayoutClassic/index.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/layouts/LayoutColumns/index.scss b/src/layouts/LayoutColumns/index.scss new file mode 100644 index 0000000..76f51ac --- /dev/null +++ b/src/layouts/LayoutColumns/index.scss @@ -0,0 +1,95 @@ +.el-container { + width: 100%; + height: 100%; + .aside-split { + display: flex; + flex-direction: column; + flex-shrink: 0; + width: 70px; + height: 100%; + background-color: var(--el-menu-bg-color); + border-right: 1px solid var(--el-aside-border-color); + .logo { + box-sizing: border-box; + height: 55px; + .logo-img { + width: 32px; + object-fit: contain; + } + } + .el-scrollbar { + height: calc(100% - 55px); + .split-list { + flex: 1; + .split-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 70px; + cursor: pointer; + transition: all 0.3s ease; + .el-icon { + font-size: 20px; + } + .title { + margin-top: 6px; + font-size: 12px; + } + .el-icon, + .title { + color: var(--el-menu-text-color); + } + } + .split-active { + background-color: var(--el-color-primary) !important; + .el-icon, + .title { + color: #ffffff !important; + } + } + } + } + } + .not-aside { + width: 0 !important; + border-right: none !important; + } + .el-aside { + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; + background-color: var(--el-menu-bg-color); + border-right: 1px solid var(--el-aside-border-color); + transition: width 0.3s ease; + .el-scrollbar { + height: calc(100% - 55px); + .el-menu { + width: 100%; + overflow-x: hidden; + border-right: none; + } + } + .logo { + box-sizing: border-box; + height: 55px; + .logo-text { + font-size: 24px; + font-weight: bold; + color: var(--el-aside-logo-text-color); + white-space: nowrap; + } + } + } + .el-header { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px; + background-color: var(--el-header-bg-color); + border-bottom: 1px solid var(--el-border-color-light); + } +} diff --git a/src/layouts/LayoutColumns/index.vue b/src/layouts/LayoutColumns/index.vue new file mode 100644 index 0000000..4b98cdb --- /dev/null +++ b/src/layouts/LayoutColumns/index.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/layouts/LayoutTransverse/index.scss b/src/layouts/LayoutTransverse/index.scss new file mode 100644 index 0000000..6bd5a97 --- /dev/null +++ b/src/layouts/LayoutTransverse/index.scss @@ -0,0 +1,60 @@ +.el-container { + width: 100%; + height: 100%; + :deep(.el-header) { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px 0 0; + background-color: var(--el-header-bg-color); + border-bottom: 1px solid var(--el-header-border-color); + .logo { + width: 210px; + margin-right: 30px; + .logo-img { + width: 28px; + object-fit: contain; + margin-right: 6px; + } + .logo-text { + font-size: 21.5px; + font-weight: bold; + color: var(--el-header-logo-text-color); + white-space: nowrap; + } + } + .el-menu { + flex: 1; + height: 100%; + overflow: hidden; + border-bottom: none; + .el-sub-menu__hide-arrow { + width: 65px; + height: 55px; + } + .el-menu-item.is-active { + color: #ffffff !important; + } + .is-active { + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + &::before { + width: 0; + } + .el-sub-menu__title { + color: #ffffff !important; + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + } + } + } + } + + @media screen and (width <= 730px) { + .logo { + display: none !important; + } + } +} diff --git a/src/layouts/LayoutTransverse/index.vue b/src/layouts/LayoutTransverse/index.vue new file mode 100644 index 0000000..38f4f67 --- /dev/null +++ b/src/layouts/LayoutTransverse/index.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/layouts/LayoutVertical/index.scss b/src/layouts/LayoutVertical/index.scss new file mode 100644 index 0000000..fe4720a --- /dev/null +++ b/src/layouts/LayoutVertical/index.scss @@ -0,0 +1,48 @@ +.el-container { + width: 100%; + height: 100%; + :deep(.el-aside) { + width: auto; + background-color: var(--el-menu-bg-color); + border-right: 1px solid var(--el-aside-border-color); + .aside-box { + display: flex; + flex-direction: column; + height: 100%; + transition: width 0.3s ease; + .el-scrollbar { + height: calc(100% - 55px); + .el-menu { + width: 100%; + overflow-x: hidden; + border-right: none; + } + } + .logo { + box-sizing: border-box; + height: 55px; + .logo-img { + width: 28px; + margin-right: 6px; + object-fit: contain; + } + .logo-text { + font-size: 21.5px; + font-weight: bold; + color: var(--el-aside-logo-text-color); + white-space: nowrap; + } + } + } + } + .el-header { + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + height: 55px; + padding: 0 15px; + background-color: var(--el-header-bg-color); + border-bottom: 1px solid var(--el-header-border-color); + } +} diff --git a/src/layouts/LayoutVertical/index.vue b/src/layouts/LayoutVertical/index.vue new file mode 100644 index 0000000..b83ab8c --- /dev/null +++ b/src/layouts/LayoutVertical/index.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/layouts/components/Footer/index.scss b/src/layouts/components/Footer/index.scss new file mode 100644 index 0000000..836af7a --- /dev/null +++ b/src/layouts/components/Footer/index.scss @@ -0,0 +1,11 @@ +.footer { + height: 30px; + background-color: var(--el-bg-color); + border-top: 1px solid var(--el-border-color-light); + a { + font-size: 14px; + color: var(--el-text-color-secondary); + text-decoration: none; + letter-spacing: 0.5px; + } +} diff --git a/src/layouts/components/Footer/index.vue b/src/layouts/components/Footer/index.vue new file mode 100644 index 0000000..1837eb1 --- /dev/null +++ b/src/layouts/components/Footer/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/layouts/components/Header/ToolBarLeft.vue b/src/layouts/components/Header/ToolBarLeft.vue new file mode 100644 index 0000000..e432cc1 --- /dev/null +++ b/src/layouts/components/Header/ToolBarLeft.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/layouts/components/Header/ToolBarRight.vue b/src/layouts/components/Header/ToolBarRight.vue new file mode 100644 index 0000000..59b8e71 --- /dev/null +++ b/src/layouts/components/Header/ToolBarRight.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/layouts/components/Header/components/AssemblySize.vue b/src/layouts/components/Header/components/AssemblySize.vue new file mode 100644 index 0000000..2f50176 --- /dev/null +++ b/src/layouts/components/Header/components/AssemblySize.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/layouts/components/Header/components/Avatar.vue b/src/layouts/components/Header/components/Avatar.vue new file mode 100644 index 0000000..8f20b57 --- /dev/null +++ b/src/layouts/components/Header/components/Avatar.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/layouts/components/Header/components/Breadcrumb.vue b/src/layouts/components/Header/components/Breadcrumb.vue new file mode 100644 index 0000000..52623bd --- /dev/null +++ b/src/layouts/components/Header/components/Breadcrumb.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/layouts/components/Header/components/CollapseIcon.vue b/src/layouts/components/Header/components/CollapseIcon.vue new file mode 100644 index 0000000..c7f18b9 --- /dev/null +++ b/src/layouts/components/Header/components/CollapseIcon.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/layouts/components/Header/components/Fullscreen.vue b/src/layouts/components/Header/components/Fullscreen.vue new file mode 100644 index 0000000..ac816d4 --- /dev/null +++ b/src/layouts/components/Header/components/Fullscreen.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/layouts/components/Header/components/InfoDialog.vue b/src/layouts/components/Header/components/InfoDialog.vue new file mode 100644 index 0000000..8303873 --- /dev/null +++ b/src/layouts/components/Header/components/InfoDialog.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/layouts/components/Header/components/PasswordDialog.vue b/src/layouts/components/Header/components/PasswordDialog.vue new file mode 100644 index 0000000..0d01a35 --- /dev/null +++ b/src/layouts/components/Header/components/PasswordDialog.vue @@ -0,0 +1,94 @@ + + + diff --git a/src/layouts/components/Header/components/ThemeSetting.vue b/src/layouts/components/Header/components/ThemeSetting.vue new file mode 100644 index 0000000..349338b --- /dev/null +++ b/src/layouts/components/Header/components/ThemeSetting.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/layouts/components/Main/components/Maximize.vue b/src/layouts/components/Main/components/Maximize.vue new file mode 100644 index 0000000..d88c3aa --- /dev/null +++ b/src/layouts/components/Main/components/Maximize.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/layouts/components/Main/index.scss b/src/layouts/components/Main/index.scss new file mode 100644 index 0000000..04d9561 --- /dev/null +++ b/src/layouts/components/Main/index.scss @@ -0,0 +1,10 @@ +.el-main { + box-sizing: border-box; + padding: 10px 12px; + overflow-x: hidden; + background-color: var(--el-bg-color-page); +} +.el-footer { + height: auto; + padding: 0; +} diff --git a/src/layouts/components/Main/index.vue b/src/layouts/components/Main/index.vue new file mode 100644 index 0000000..3a68e32 --- /dev/null +++ b/src/layouts/components/Main/index.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/layouts/components/Menu/SubMenu.vue b/src/layouts/components/Menu/SubMenu.vue new file mode 100644 index 0000000..d4b1737 --- /dev/null +++ b/src/layouts/components/Menu/SubMenu.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/layouts/components/Tabs/components/MoreButton.vue b/src/layouts/components/Tabs/components/MoreButton.vue new file mode 100644 index 0000000..cd182a9 --- /dev/null +++ b/src/layouts/components/Tabs/components/MoreButton.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/layouts/components/Tabs/index.scss b/src/layouts/components/Tabs/index.scss new file mode 100644 index 0000000..aa8015d --- /dev/null +++ b/src/layouts/components/Tabs/index.scss @@ -0,0 +1,70 @@ +.tabs-box { + display: none; + background-color: var(--el-bg-color); + .tabs-menu { + position: relative; + width: 100%; + .el-dropdown { + position: absolute; + top: 0; + right: 0; + bottom: 0; + .more-button { + display: flex; + align-items: center; + justify-content: center; + width: 43px; + cursor: pointer; + border-left: 1px solid var(--el-border-color-light); + transition: all 0.3s; + &:hover { + background-color: var(--el-color-info-light-9); + } + .iconfont { + font-size: 12.5px; + } + } + } + :deep(.el-tabs) { + .el-tabs__header { + box-sizing: border-box; + height: 40px; + padding: 0 10px; + margin: 0; + .el-tabs__nav-wrap { + position: absolute; + width: calc(100% - 70px); + .el-tabs__nav { + display: flex; + border: none; + .el-tabs__item { + display: flex; + align-items: center; + justify-content: center; + color: #afafaf; + border: none; + .tabs-icon { + margin: 1.5px 4px 0 0; + font-size: 15px; + } + .is-icon-close { + margin-top: 1px; + } + &.is-active { + color: var(--el-color-primary); + &::before { + position: absolute; + bottom: 0; + width: 100%; + height: 0; + content: ""; + border-bottom: 2px solid var(--el-color-primary) !important; + } + } + } + } + } + } + } + } +} diff --git a/src/layouts/components/Tabs/index.vue b/src/layouts/components/Tabs/index.vue new file mode 100644 index 0000000..48378f6 --- /dev/null +++ b/src/layouts/components/Tabs/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/src/layouts/components/ThemeDrawer/index.scss b/src/layouts/components/ThemeDrawer/index.scss new file mode 100644 index 0000000..7b3e32e --- /dev/null +++ b/src/layouts/components/ThemeDrawer/index.scss @@ -0,0 +1,137 @@ +.divider { + margin-top: 15px; + .el-icon { + position: relative; + top: 2px; + right: 5px; + font-size: 15px; + } +} +.theme-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 5px; + margin: 14px 0; + span { + display: flex; + align-items: center; + font-size: 14px; + .el-icon { + margin-left: 3px; + font-size: 15px; + color: var(--el-text-color-regular); + cursor: pointer; + } + } +} +.layout-box { + position: relative; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 15px 7px 0; + .layout-item { + position: relative; + box-sizing: border-box; + width: 100px; + height: 70px; + padding: 6px; + cursor: pointer; + border-radius: 5px; + box-shadow: 0 0 5px 1px var(--el-border-color-dark); + transition: all 0.2s; + .layout-dark { + background-color: var(--el-color-primary); + border-radius: 3px; + } + .layout-light { + background-color: var(--el-color-primary-light-5); + border-radius: 3px; + } + .layout-content { + background-color: var(--el-color-primary-light-8); + border: 1px dashed var(--el-color-primary); + border-radius: 3px; + } + .el-icon { + position: absolute; + right: 10px; + bottom: 10px; + color: var(--el-color-primary); + transition: all 0.2s; + } + &:hover { + box-shadow: 0 0 5px 1px var(--el-text-color-secondary); + } + } + .is-active { + box-shadow: 0 0 0 2px var(--el-color-primary) !important; + } + .layout-vertical { + display: flex; + justify-content: space-between; + margin-bottom: 20px; + .layout-dark { + width: 20%; + } + .layout-container { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 72%; + .layout-light { + height: 20%; + } + .layout-content { + height: 67%; + } + } + } + .layout-classic { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 20px; + .layout-dark { + height: 22%; + } + .layout-container { + display: flex; + justify-content: space-between; + height: 70%; + .layout-light { + width: 20%; + } + .layout-content { + width: 70%; + } + } + } + .layout-transverse { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-bottom: 15px; + .layout-dark { + height: 20%; + } + .layout-content { + height: 67%; + } + } + .layout-columns { + display: flex; + justify-content: space-between; + margin-bottom: 15px; + .layout-dark { + width: 14%; + } + .layout-light { + width: 17%; + } + .layout-content { + width: 55%; + } + } +} diff --git a/src/layouts/components/ThemeDrawer/index.vue b/src/layouts/components/ThemeDrawer/index.vue new file mode 100644 index 0000000..e29dad1 --- /dev/null +++ b/src/layouts/components/ThemeDrawer/index.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/src/layouts/index.vue b/src/layouts/index.vue new file mode 100644 index 0000000..a5c5018 --- /dev/null +++ b/src/layouts/index.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/layouts/indexAsync.vue b/src/layouts/indexAsync.vue new file mode 100644 index 0000000..66858f0 --- /dev/null +++ b/src/layouts/indexAsync.vue @@ -0,0 +1,36 @@ + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..4ef55a2 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,43 @@ +import { createApp } from "vue"; +import App from "./App.vue"; +// reset style sheet +import "@/styles/reset.scss"; +// CSS common style sheet +import "@/styles/common.scss"; +// iconfont css +import "@/assets/iconfont/iconfont.scss"; +// font css +import "@/assets/fonts/font.scss"; +// element css +import "element-plus/dist/index.css"; +// element dark css +import "element-plus/theme-chalk/dark/css-vars.css"; +// custom element dark css +import "@/styles/element-dark.scss"; +// custom element css +import "@/styles/element.scss"; +// svg icons +import "virtual:svg-icons-register"; +// element plus +import ElementPlus from "element-plus"; +// element icons +import * as Icons from "@element-plus/icons-vue"; +// custom directives +import directives from "@/directives/index"; +// vue Router +import router from "@/routers"; +// pinia store +import pinia from "@/stores"; +// errorHandler +import errorHandler from "@/utils/errorHandler"; + +const app = createApp(App); + +app.config.errorHandler = errorHandler; + +// register the element Icons component +Object.keys(Icons).forEach(key => { + app.component(key, Icons[key as keyof typeof Icons]); +}); + +app.use(ElementPlus).use(directives).use(router).use(pinia).mount("#app"); diff --git a/src/routers/index.ts b/src/routers/index.ts new file mode 100644 index 0000000..924c9a0 --- /dev/null +++ b/src/routers/index.ts @@ -0,0 +1,111 @@ +import { createRouter, createWebHashHistory, createWebHistory } from "vue-router"; +import { useUserStore } from "@/stores/modules/user"; +import { useAuthStore } from "@/stores/modules/auth"; +import { LOGIN_URL, ROUTER_WHITE_LIST } from "@/config"; +import { initDynamicRouter } from "@/routers/modules/dynamicRouter"; +import { staticRouter, errorRouter } from "@/routers/modules/staticRouter"; +import NProgress from "@/config/nprogress"; + +const mode = import.meta.env.VITE_ROUTER_MODE; + +const routerMode = { + hash: () => createWebHashHistory(), + history: () => createWebHistory() +}; + +/** + * @description 📚 路由参数配置简介 + * @param path ==> 路由菜单访问路径 + * @param name ==> 路由 name (对应页面组件 name, 可用作 KeepAlive 缓存标识 && 按钮权限筛选) + * @param redirect ==> 路由重定向地址 + * @param component ==> 视图文件路径 + * @param meta ==> 路由菜单元信息 + * @param meta.icon ==> 菜单和面包屑对应的图标 + * @param meta.title ==> 路由标题 (用作 document.title || 菜单的名称) + * @param meta.activeMenu ==> 当前路由为详情页时,需要高亮的菜单 + * @param meta.isLink ==> 路由外链时填写的访问地址 + * @param meta.isHide ==> 是否在菜单中隐藏 (通常列表详情页需要隐藏) + * @param meta.isFull ==> 菜单是否全屏 (示例:数据大屏页面) + * @param meta.isAffix ==> 菜单是否固定在标签页中 (首页通常是固定项) + * @param meta.isKeepAlive ==> 当前路由是否缓存 + * */ +const router = createRouter({ + history: routerMode[mode](), + routes: [...staticRouter, ...errorRouter], + strict: false, + scrollBehavior: () => ({ left: 0, top: 0 }) +}); + +/** + * @description 路由拦截 beforeEach + * */ +router.beforeEach(async (to, from, next) => { + const userStore = useUserStore(); + const authStore = useAuthStore(); + + // 1.NProgress 开始 + NProgress.start(); + + // 2.动态设置标题 + const title = import.meta.env.VITE_GLOB_APP_TITLE; + document.title = to.meta.title ? `${to.meta.title} - ${title}` : title; + + // 3.判断是访问登陆页,有 Token 就在当前页面,没有 Token 重置路由到登陆页 + if (to.path.toLocaleLowerCase() === LOGIN_URL) { + if (userStore.token) return next(from.fullPath); + resetRouter(); + return next(); + } + + // 4.判断访问页面是否在路由白名单地址(静态路由)中,如果存在直接放行 + if (ROUTER_WHITE_LIST.includes(to.path)) return next(); + + // 5.判断是否有 Token,没有重定向到 login 页面 + if (!userStore.token) return next({ path: LOGIN_URL, replace: true }); + + // 6.如果没有菜单列表,就重新请求菜单列表并添加动态路由 + if (!authStore.authMenuListGet.length) { + await initDynamicRouter(); + return next({ ...to, replace: true }); + } + + // 7.存储 routerName 做按钮权限筛选 + authStore.setRouteName(to.name as string); + + // 8.正常访问页面 + next(); +}); + +/** + * @description 重置路由 + * */ +export const resetRouter = () => { + const authStore = useAuthStore(); + authStore.flatMenuListGet.forEach(route => { + const { name } = route; + if (name && router.hasRoute(name)) router.removeRoute(name); + }); +}; + +/** + * @description 路由跳转错误 + * */ +router.onError(error => { + NProgress.done(); + console.warn("路由错误", error.message); + const userNewStore = useUserStore(); + // 2.清除 Token + userNewStore.setToken(""); + + // 3.重定向到登陆页 + router.replace(LOGIN_URL); +}); + +/** + * @description 路由跳转结束 + * */ +router.afterEach(() => { + NProgress.done(); +}); + +export default router; diff --git a/src/routers/modules/dynamicRouter.ts b/src/routers/modules/dynamicRouter.ts new file mode 100644 index 0000000..256e715 --- /dev/null +++ b/src/routers/modules/dynamicRouter.ts @@ -0,0 +1,54 @@ +import router from "@/routers/index"; +import { LOGIN_URL } from "@/config"; +import { RouteRecordRaw } from "vue-router"; +import { ElNotification } from "element-plus"; +import { useUserStore } from "@/stores/modules/user"; +import { useAuthStore } from "@/stores/modules/auth"; + +// 引入 views 文件夹下所有 vue 文件 +const modules = import.meta.glob("@/views/**/*.vue"); + +/** + * @description 初始化动态路由 + */ +export const initDynamicRouter = async () => { + const userStore = useUserStore(); + const authStore = useAuthStore(); + + try { + // 1.获取菜单列表 && 按钮权限列表 + await authStore.getAuthMenuList(); + await authStore.getAuthButtonList(); + + // 2.判断当前用户有没有菜单权限 + if (!authStore.authMenuListGet.length) { + ElNotification({ + title: "无权限访问", + message: "当前账号无任何菜单权限,请联系系统管理员!", + type: "warning", + duration: 3000 + }); + userStore.setToken(""); + router.replace(LOGIN_URL); + return Promise.reject("No permission"); + } + + // 3.添加动态路由 + authStore.flatMenuListGet.forEach(item => { + item.children && delete item.children; + if (item.component && typeof item.component == "string") { + item.component = modules["/src/views" + item.component + ".vue"]; + } + if (item.meta.isFull) { + router.addRoute(item as unknown as RouteRecordRaw); + } else { + router.addRoute("layout", item as unknown as RouteRecordRaw); + } + }); + } catch (error) { + // 当按钮 || 菜单请求出错时,重定向到登陆页 + userStore.setToken(""); + router.replace(LOGIN_URL); + return Promise.reject(error); + } +}; diff --git a/src/routers/modules/staticRouter.ts b/src/routers/modules/staticRouter.ts new file mode 100644 index 0000000..d949c3f --- /dev/null +++ b/src/routers/modules/staticRouter.ts @@ -0,0 +1,63 @@ +import { RouteRecordRaw } from "vue-router"; +import { HOME_URL, LOGIN_URL } from "@/config"; + +/** + * staticRouter (静态路由) + */ +export const staticRouter: RouteRecordRaw[] = [ + { + path: "/", + redirect: HOME_URL + }, + { + path: LOGIN_URL, + name: "login", + component: () => import("@/views/login/index.vue"), + meta: { + title: "登录" + } + }, + { + path: "/layout", + name: "layout", + component: () => import("@/layouts/index.vue"), + // component: () => import("@/layouts/indexAsync.vue"), + redirect: HOME_URL, + children: [] + } +]; + +/** + * errorRouter (错误页面路由) + */ +export const errorRouter = [ + { + path: "/403", + name: "403", + component: () => import("@/components/ErrorMessage/403.vue"), + meta: { + title: "403页面" + } + }, + { + path: "/404", + name: "404", + component: () => import("@/components/ErrorMessage/404.vue"), + meta: { + title: "404页面" + } + }, + { + path: "/500", + name: "500", + component: () => import("@/components/ErrorMessage/500.vue"), + meta: { + title: "500页面" + } + }, + // Resolve refresh page, route warnings + { + path: "/:pathMatch(.*)*", + component: () => import("@/components/ErrorMessage/404.vue") + } +]; diff --git a/src/stores/helper/persist.ts b/src/stores/helper/persist.ts new file mode 100644 index 0000000..7240392 --- /dev/null +++ b/src/stores/helper/persist.ts @@ -0,0 +1,19 @@ +import { PersistedStateOptions } from "pinia-plugin-persistedstate"; + +/** + * @description pinia 持久化参数配置 + * @param {String} key 存储到持久化的 name + * @param {Array} paths 需要持久化的 state name + * @return persist + * */ +const piniaPersistConfig = (key: string, paths?: string[]) => { + const persist: PersistedStateOptions = { + key, + storage: localStorage, + // storage: sessionStorage, + paths + }; + return persist; +}; + +export default piniaPersistConfig; diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000..0c7dfda --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,8 @@ +import { createPinia } from "pinia"; +import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; + +// pinia persist +const pinia = createPinia(); +pinia.use(piniaPluginPersistedstate); + +export default pinia; diff --git a/src/stores/interface/index.ts b/src/stores/interface/index.ts new file mode 100644 index 0000000..1e90bf5 --- /dev/null +++ b/src/stores/interface/index.ts @@ -0,0 +1,58 @@ +export type LayoutType = "vertical" | "classic" | "transverse" | "columns"; + +export type AssemblySizeType = "large" | "default" | "small"; +/* GlobalState */ +export interface GlobalState { + layout: LayoutType; + assemblySize: AssemblySizeType; + maximize: boolean; + primary: string; + isDark: boolean; + isGrey: boolean; + isWeak: boolean; + asideInverted: boolean; + headerInverted: boolean; + isCollapse: boolean; + accordion: boolean; + breadcrumb: boolean; + breadcrumbIcon: boolean; + tabs: boolean; + tabsIcon: boolean; + footer: boolean; +} + +/* UserState */ +export interface UserState { + token: string; + userInfo: { name: string }; + company: string; +} + +/* tabsMenuProps */ +export interface TabsMenuProps { + icon: string; + title: string; + path: string; + name: string; + close: boolean; + isKeepAlive: boolean; +} + +/* TabsState */ +export interface TabsState { + tabsMenuList: TabsMenuProps[]; +} + +/* AuthState */ +export interface AuthState { + routeName: string; + authButtonList: { + [key: string]: string[]; + }; + authMenuList: Menu.MenuOptions[]; +} + +/* KeepAliveState */ +export interface KeepAliveState { + keepAliveName: string[]; +} diff --git a/src/stores/modules/auth.ts b/src/stores/modules/auth.ts new file mode 100644 index 0000000..20bb1c9 --- /dev/null +++ b/src/stores/modules/auth.ts @@ -0,0 +1,98 @@ +import { defineStore } from "pinia"; +import { AuthState } from "@/stores/interface"; +import { getAuthMenuListApi, getAuthButtonListApi } from "@/api/modules/login"; +import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList } from "@/utils"; +// import { getAuthButtonListApi, getAuthMenuListApi, getUserRoleListApi } from "@/api/modules/login"; +// import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, buildTree, updateWebRoutes } from "@/utils"; +// import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, updateWebRoutes } from "@/utils"; + +export const useAuthStore = defineStore({ + id: "geeker-auth", + state: (): AuthState => ({ + // 按钮权限列表 + authButtonList: {}, + // 菜单权限列表 + authMenuList: [], + // 当前页面的 router name,用来做按钮权限筛选 + routeName: "" + }), + getters: { + // 按钮权限列表 + authButtonListGet: state => state.authButtonList, + // 菜单权限列表 ==> 这里的菜单没有经过任何处理 + authMenuListGet: state => state.authMenuList, + // 菜单权限列表 ==> 左侧菜单栏渲染,需要剔除 isHide == true + showMenuListGet: state => getShowMenuList(state.authMenuList), + // 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由 + flatMenuListGet: state => getFlatMenuList(state.authMenuList), + // 递归处理后的所有面包屑导航列表 + breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList) + }, + actions: { + // Get AuthButtonList + async getAuthButtonList() { + const { data } = await getAuthButtonListApi(); + this.authButtonList = data; + }, + // Get AuthMenuList + async getAuthMenuList() { + const authMenuListJson = await getAuthMenuListApi(); + this.authMenuList = authMenuListJson.data; + /** + const arrAdminInfo = await getUserRoleListApi(); + + // localStorage.setItem("company", arrAdminInfo.data["company"].c_name); + localStorage.setItem("company", "总公司"); + localStorage.setItem("admin_info_data", JSON.stringify(arrAdminInfo.data)); + const arrAdminRoleNode: AdminRole[] = arrAdminInfo.data["admin_role"].admin_role_node; + interface AdminRoleNode { + an_id: number; + an_pid: number; + an_name: string; + an_code: string; + children?: AdminRoleNode[]; + } + interface AdminRole { + admin_role_node: AdminRoleNode; + an_id: number; + ar_id: number; + an_name: string; + } + interface WebRoute { + path: string; + name: string; + component?: string; + meta: { + an_id?: number; + icon: string; + title: string; + isLink: string; + isHide: boolean; + isFull: boolean; + isAffix: boolean; + isKeepAlive: boolean; + }; + children?: WebRoute[]; + } + // 这是一个 前端vue 路由数组 + const arrWebRoute: WebRoute[] = authMenuListJson.data; + + // 更新路由 + const arrWebRouteNews = await updateWebRoutes(arrWebRoute, arrAdminRoleNode); + this.authMenuList = arrWebRouteNews; + + // 遍历 这个用户拥有的 权限,提取他的 an_id 储存起来 + let arrAdminNodeAnId: number[] = []; + arrAdminRoleNode.forEach((item: AdminRole) => { + return arrAdminNodeAnId.push(item.an_id); + }); + localStorage.setItem("arrAdminNodeAnId", JSON.stringify(arrAdminNodeAnId)); + */ + }, + // 遍历 arrWebRoute 的每一个an_id 匹配 testARR 里的每个 an_id,如果testARR 不存在 an_id,那么arrWebRoute 里的 每个 meta.isHide = true + // Set RouteName + async setRouteName(name: string) { + this.routeName = name; + } + } +}); diff --git a/src/stores/modules/global.ts b/src/stores/modules/global.ts new file mode 100644 index 0000000..cb9c154 --- /dev/null +++ b/src/stores/modules/global.ts @@ -0,0 +1,51 @@ +import { defineStore } from "pinia"; +import { GlobalState } from "@/stores/interface"; +import { DEFAULT_PRIMARY } from "@/config"; +import piniaPersistConfig from "@/stores/helper/persist"; + +export const useGlobalStore = defineStore({ + id: "IOMS-global", + // 修改默认值之后,需清除 localStorage 数据 + state: (): GlobalState => ({ + // 布局模式 (纵向:vertical | 经典:classic | 横向:transverse | 分栏:columns) + layout: "transverse", + // element 组件大小 + assemblySize: "default", + // 当前页面是否全屏 + maximize: false, + // 主题颜色 + primary: DEFAULT_PRIMARY, + // 深色模式 + isDark: false, + // 灰色模式 + isGrey: false, + // 色弱模式 + isWeak: false, + // 侧边栏反转 + asideInverted: false, + // 头部反转 + headerInverted: false, + // 折叠菜单 + isCollapse: false, + // 菜单手风琴 + accordion: true, + // 面包屑导航 + breadcrumb: true, + // 面包屑导航图标 + breadcrumbIcon: true, + // 标签页 + tabs: true, + // 标签页图标 + tabsIcon: true, + // 页脚 + footer: false + }), + getters: {}, + actions: { + // Set GlobalState + setGlobalState(...args: ObjToKeyValArray) { + this.$patch({ [args[0]]: args[1] }); + } + }, + persist: piniaPersistConfig("IOMS-global") +}); diff --git a/src/stores/modules/keepAlive.ts b/src/stores/modules/keepAlive.ts new file mode 100644 index 0000000..50c766f --- /dev/null +++ b/src/stores/modules/keepAlive.ts @@ -0,0 +1,23 @@ +import { defineStore } from "pinia"; +import { KeepAliveState } from "@/stores/interface"; + +export const useKeepAliveStore = defineStore({ + id: "geeker-keepAlive", + state: (): KeepAliveState => ({ + keepAliveName: [] + }), + actions: { + // Add KeepAliveName + async addKeepAliveName(name: string) { + !this.keepAliveName.includes(name) && this.keepAliveName.push(name); + }, + // Remove KeepAliveName + async removeKeepAliveName(name: string) { + this.keepAliveName = this.keepAliveName.filter(item => item !== name); + }, + // Set KeepAliveName + async setKeepAliveName(keepAliveName: string[] = []) { + this.keepAliveName = keepAliveName; + } + } +}); diff --git a/src/stores/modules/tabs.ts b/src/stores/modules/tabs.ts new file mode 100644 index 0000000..71e3cb9 --- /dev/null +++ b/src/stores/modules/tabs.ts @@ -0,0 +1,74 @@ +import router from "@/routers"; +import { defineStore } from "pinia"; +import { getUrlWithParams } from "@/utils"; +import { useKeepAliveStore } from "./keepAlive"; +import { TabsState, TabsMenuProps } from "@/stores/interface"; +import piniaPersistConfig from "@/stores/helper/persist"; + +const keepAliveStore = useKeepAliveStore(); + +export const useTabsStore = defineStore({ + id: "IOMS-tabs", + state: (): TabsState => ({ + tabsMenuList: [] + }), + actions: { + // Add Tabs + async addTabs(tabItem: TabsMenuProps) { + if (this.tabsMenuList.every(item => item.path !== tabItem.path)) { + this.tabsMenuList.push(tabItem); + } + if (!keepAliveStore.keepAliveName.includes(tabItem.name) && tabItem.isKeepAlive) { + keepAliveStore.addKeepAliveName(tabItem.name); + } + }, + // Remove Tabs + async removeTabs(tabPath: string, isCurrent: boolean = true) { + if (isCurrent) { + this.tabsMenuList.forEach((item, index) => { + if (item.path !== tabPath) return; + const nextTab = this.tabsMenuList[index + 1] || this.tabsMenuList[index - 1]; + if (!nextTab) return; + router.push(nextTab.path); + }); + } + this.tabsMenuList = this.tabsMenuList.filter(item => item.path !== tabPath); + // remove keepalive + const tabItem = this.tabsMenuList.find(item => item.path === tabPath); + tabItem?.isKeepAlive && keepAliveStore.removeKeepAliveName(tabItem.name); + }, + // Close Tabs On Side + async closeTabsOnSide(path: string, type: "left" | "right") { + const currentIndex = this.tabsMenuList.findIndex(item => item.path === path); + if (currentIndex !== -1) { + const range = type === "left" ? [0, currentIndex] : [currentIndex + 1, this.tabsMenuList.length]; + this.tabsMenuList = this.tabsMenuList.filter((item, index) => { + return index < range[0] || index >= range[1] || !item.close; + }); + } + // set keepalive + const KeepAliveList = this.tabsMenuList.filter(item => item.isKeepAlive); + keepAliveStore.setKeepAliveName(KeepAliveList.map(item => item.name)); + }, + // Close MultipleTab + async closeMultipleTab(tabsMenuValue?: string) { + this.tabsMenuList = this.tabsMenuList.filter(item => { + return item.path === tabsMenuValue || !item.close; + }); + // set keepalive + const KeepAliveList = this.tabsMenuList.filter(item => item.isKeepAlive); + keepAliveStore.setKeepAliveName(KeepAliveList.map(item => item.name)); + }, + // Set Tabs + async setTabs(tabsMenuList: TabsMenuProps[]) { + this.tabsMenuList = tabsMenuList; + }, + // Set Tabs Title + async setTabsTitle(title: string) { + this.tabsMenuList.forEach(item => { + if (item.path == getUrlWithParams()) item.title = title; + }); + } + }, + persist: piniaPersistConfig("IOMS-tabs") +}); diff --git a/src/stores/modules/user.ts b/src/stores/modules/user.ts new file mode 100644 index 0000000..13ded57 --- /dev/null +++ b/src/stores/modules/user.ts @@ -0,0 +1,28 @@ +import { defineStore } from "pinia"; +import { UserState } from "@/stores/interface"; +import piniaPersistConfig from "@/stores/helper/persist"; + +export const useUserStore = defineStore({ + id: "IOMS-user", + state: (): UserState => ({ + token: "", + userInfo: { name: "Admin" }, + company: "" + }), + getters: {}, + actions: { + // Set Token + setToken(token: string) { + this.token = token; + }, + // Set setUserInfo + setUserInfo(userInfo: UserState["userInfo"]) { + this.userInfo = userInfo; + }, + // Set Token + setCompany(company: string) { + this.company = company; + } + }, + persist: piniaPersistConfig("IOMS-user") +}); diff --git a/src/styles/common.scss b/src/styles/common.scss new file mode 100644 index 0000000..a1f0048 --- /dev/null +++ b/src/styles/common.scss @@ -0,0 +1,181 @@ +/* flex */ +.flx-center { + display: flex; + align-items: center; + justify-content: center; +} +.flx-justify-between { + display: flex; + align-items: center; + justify-content: space-between; +} +.flx-align-center { + display: flex; + align-items: center; +} + +/* clearfix */ +.clearfix::after { + display: block; + height: 0; + overflow: hidden; + clear: both; + content: ""; +} + +/* 文字单行省略号 */ +.sle { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* el-popper宽度自定义 */ +.card .el-popper { + max-width: 520px; + max-height: 250px; + overflow-y: scroll; +} + +/* 文字多行省略号 */ +.mle { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +/* 文字多了自动換行 */ +.break-word { + word-break: break-all; + word-wrap: break-word; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all 0.2s; +} +.fade-transform-enter-from { + opacity: 0; + transition: all 0.2s; + transform: translateX(-30px); +} +.fade-transform-leave-to { + opacity: 0; + transition: all 0.2s; + transform: translateX(30px); +} + +/* breadcrumb-transform */ +.breadcrumb-enter-active { + transition: all 0.2s; +} +.breadcrumb-enter-from, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(10px); +} + +/* scroll bar */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} +::-webkit-scrollbar-thumb { + background-color: var(--el-border-color-darker); + border-radius: 20px; +} + +/* nprogress */ +#nprogress .bar { + background: var(--el-color-primary) !important; +} +#nprogress .spinner-icon { + border-top-color: var(--el-color-primary) !important; + border-left-color: var(--el-color-primary) !important; +} +#nprogress .peg { + box-shadow: + 0 0 10px var(--el-color-primary), + 0 0 5px var(--el-color-primary) !important; +} + +/* 外边距、内边距全局样式 */ +@for $i from 0 through 100 { + .mt#{$i} { + margin-top: #{$i}px !important; + } + .mr#{$i} { + margin-right: #{$i}px !important; + } + .mb#{$i} { + margin-bottom: #{$i}px !important; + } + .ml#{$i} { + margin-left: #{$i}px !important; + } + .pt#{$i} { + padding-top: #{$i}px !important; + } + .pr#{$i} { + padding-right: #{$i}px !important; + } + .pb#{$i} { + padding-bottom: #{$i}px !important; + } + .pl#{$i} { + padding-left: #{$i}px !important; + } +} + +// ElMessage +.custom-message-class { + z-index: 99999999; /* 或任何高于页面中其他元素的值 */ +} +.tag-more-h { + width: 100%; + max-height: 250px; + overflow-y: scroll; +} +.el-pagination .el-select { + width: 128px !important; +} +.fixed-width { + height: 40px; + -webkit-box-orient: vertical; /* 垂直排列子元素 */ + -webkit-line-clamp: 1; /* 显示的行数 */ + overflow: hidden; /* 隐藏超出内容 */ + text-overflow: ellipsis; /* 超出部分用省略号表示 */ +} +.table-box .el-table .el-table__row, +.table-main .el-table .el-table__row { + height: 30px !important; +} +.cell .el-button--default { + height: 20px !important; + font-size: 12px; +} +.el-table__row .cell { + font-size: 12px; +} +.header-button-lf .table-box .table-search .operation, +.table-main .table-search .operation { + margin-bottom: 0 !important; +} +.header-button-lf .el-button--default { + margin-right: 10px; +} +.table-box .el-table .el-table__header th, +.table-main .el-table .el-table__header th { + height: 30px !important; +} +.el-table--default .el-table__cell { + padding: 4px 0 !important; +} +.el-main[data-v-62740ae3] { + padding: 5px !important; +} +.el-container[data-v-3a4046f9] .el-header { + height: 45px !important; +} diff --git a/src/styles/element-dark.scss b/src/styles/element-dark.scss new file mode 100644 index 0000000..1a612fa --- /dev/null +++ b/src/styles/element-dark.scss @@ -0,0 +1,28 @@ +/* 自定义 element 暗黑模式 */ +html.dark { + /* wangEditor */ + --w-e-toolbar-color: #eeeeee; + --w-e-toolbar-bg-color: #141414; + --w-e-textarea-bg-color: #141414; + --w-e-textarea-color: #eeeeee; + --w-e-toolbar-active-bg-color: #464646; + --w-e-toolbar-border-color: var(--el-border-color-darker); + .w-e-bar-item button:hover, + .w-e-menu-tooltip-v5::before { + color: #eeeeee; + } + + /* login */ + .login-container { + background-color: #191919 !important; + .login-box { + background-color: rgb(0 0 0 / 80%) !important; + .login-form { + box-shadow: rgb(255 255 255 / 12%) 0 2px 10px 2px !important; + .logo-text { + color: var(--el-text-color-primary) !important; + } + } + } + } +} diff --git a/src/styles/element.scss b/src/styles/element.scss new file mode 100644 index 0000000..4132337 --- /dev/null +++ b/src/styles/element.scss @@ -0,0 +1,282 @@ +/* 设置 notification、message 层级在 loading 之上 */ +.el-message, +.el-notification { + z-index: 9999999999999999999 !important; +} + +/* el-alert */ +.el-alert { + border: 1px solid; +} + +/* 当前页面最大化 css */ +.main-maximize { + .aside-split, + .el-aside, + .el-header, + .el-footer, + .tabs-box { + display: none !important; + } +} + +/* mask image */ +.mask-image { + padding-right: 50px; + mask-image: linear-gradient(90deg, #000000 0%, #000000 calc(100% - 50px), transparent); +} + +/* custom card */ +.card { + box-sizing: border-box; + padding: 7px; + overflow-x: hidden; + background-color: var(--el-bg-color); + border: 1px solid var(--el-border-color-light); + border-radius: 6px; + box-shadow: 0 0 12px rgb(0 0 0 / 5%); +} + +/* ProTable 不需要 card 样式(在组件内使用 ProTable 会使用到) */ +.no-card { + .card { + padding: 0; + background-color: transparent; + border: none; + border-radius: 0; + box-shadow: none; + } + .table-search { + padding: 18px 0 0 !important; + margin-bottom: 0 !important; + } +} + +/* content-box (常用内容盒子) */ +.content-box { + display: flex; + flex-direction: column; + align-items: center; + height: 100%; + .text { + margin: 20px 0 30px; + font-size: 23px; + font-weight: bold; + color: var(--el-text-color-regular); + } + .el-descriptions { + width: 100%; + padding: 40px 0 0; + .el-descriptions__title { + font-size: 18px; + } + .el-descriptions__label { + width: 200px; + } + } +} + +/* main-box (树形表格 treeFilter 页面会使用,左右布局 flex) */ +.main-box { + display: flex; + width: 100%; + height: 100%; + .table-box { + // 这里减去的 230px 是 treeFilter 组件宽度 + width: calc(100% - 230px); + } +} + +/* proTable */ +.table-box, +.table-main { + display: flex; + flex: 1; + flex-direction: column; + width: 100%; + height: 100%; + + // table-search 表格搜索样式 + .table-search { + padding: 7px 7px 0; + margin-bottom: 5px; + .el-form { + .el-form-item__content > * { + width: 100%; + } + .el-form-item--default { + margin-bottom: 7px !important; + } + + // 去除时间选择器上下 padding + .el-range-editor.el-input__wrapper { + padding: 0 10px; + } + } + .operation { + display: flex; + align-items: center; + justify-content: flex-end; + margin-bottom: 7px; + } + } + .header-button-Ce { + float: center; + height: 32px; + margin-right: 10px; + margin-bottom: 10px; + line-height: 32px; + text-align: center; + } + + // 表格 header 样式 + .table-header { + .header-button-lf, + .header-button-ri { + display: flex; + flex-wrap: wrap; + gap: 15px 12px; + .el-button:not(.el-input .el-button) { + margin-left: 0; + } + } + .header-button-lf { + float: left; + } + .header-button-ri { + float: right; + } + .el-button { + margin-bottom: 7px; + } + } + + // el-table 表格样式 + .el-table { + flex: 1; + + // 修复 safari 浏览器表格错位 https://github.com/HalseySpicy/Geeker-Admin/issues/83 + table { + width: 100%; + } + .el-table__header th { + height: 45px; + font-size: 15px; + font-weight: bold; + color: var(--el-text-color-primary); + background: var(--el-fill-color-light); + } + .el-table__row { + height: 45px; + font-size: 14px; + .el-table__cell { + padding: 0 !important; + } + .move { + cursor: move; + .el-icon { + cursor: move; + } + } + } + + // 设置 el-table 中 header 文字不换行,并省略 + .el-table__header .el-table__cell > .cell { + // white-space: nowrap; + white-space: wrap; + } + + // 解决表格数据为空时样式不居中问题(仅在element-plus中) + .el-table__empty-block { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + .table-empty { + line-height: 30px; + } + } + + // table 中 image 图片样式 + .table-image { + width: 50px; + height: 50px; + border-radius: 50%; + } + } + + // 表格 pagination 样式 + .el-pagination { + display: flex; + justify-content: flex-end; + margin-top: 10px; + } +} + +/* el-table 组件大小 */ +.el-table--small { + .el-table__header th { + height: 40px !important; + font-size: 14px !important; + } + .el-table__row { + height: 40px !important; + font-size: 13px !important; + } +} +.el-table--large { + .el-table__header th { + height: 50px !important; + font-size: 16px !important; + } + .el-table__row { + height: 50px !important; + font-size: 15px !important; + } +} + +/* el-drawer */ +.el-drawer { + .el-drawer__header { + padding: 16px 20px; + margin-bottom: 0; + border-bottom: 1px solid var(--el-border-color-lighter); + span { + font-size: 17px; + line-height: 17px; + color: var(--el-text-color-primary) !important; + } + } + .el-drawer__footer { + border-top: 1px solid var(--el-border-color-lighter); + } + + // select 样式 + .el-select { + width: 100%; + } + + // drawer-form 中存在两列 form-item 样式 + .drawer-multiColumn-form { + display: flex; + flex-wrap: wrap; + .el-form-item { + width: 47%; + &:nth-child(2n-1) { + margin-right: 5%; + } + } + } +} + +/* el-dialog */ +.el-dialog { + .el-dialog__header { + padding: 15px 20px; + margin: 0; + border-bottom: 1px solid var(--el-border-color-lighter); + .el-dialog__title { + font-size: 17px; + } + } +} diff --git a/src/styles/reset.scss b/src/styles/reset.scss new file mode 100644 index 0000000..209b32a --- /dev/null +++ b/src/styles/reset.scss @@ -0,0 +1,142 @@ +/* Reset style sheet */ + +/* 目前项目中使用富文本编辑器需要注释,如果你项目中没有使用富文本编辑器,可以取消注释 */ +// html, +// body, +// div, +// span, +// applet, +// object, +// iframe, +// h1, +// h2, +// h3, +// h4, +// h5, +// h6, +// p, +// blockquote, +// pre, +// a, +// abbr, +// acronym, +// address, +// big, +// cite, +// code, +// del, +// dfn, +// em, +// img, +// ins, +// kbd, +// q, +// s, +// samp, +// small, +// strike, +// strong, +// sub, +// sup, +// tt, +// var, +// b, +// u, +// i, +// center, +// dl, +// dt, +// dd, +// ol, +// ul, +// li, +// fieldset, +// form, +// label, +// legend, +// table, +// caption, +// tbody, +// tfoot, +// thead, +// tr, +// th, +// td, +// article, +// aside, +// canvas, +// details, +// embed, +// figure, +// figcaption, +// footer, +// header, +// hgroup, +// menu, +// nav, +// output, +// ruby, +// section, +// summary, +// time, +// mark, +// audio, +// video { +// padding: 0; +// margin: 0; +// font: inherit; +// font-size: 100%; +// vertical-align: baseline; +// border: 0; +// } + +// /* HTML5 display-role reset for older browsers */ +// article, +// aside, +// details, +// figcaption, +// figure, +// footer, +// header, +// hgroup, +// menu, +// nav, +// section { +// display: block; +// } +// body { +// padding: 0; +// margin: 0; +// } +// ol, +// ul { +// list-style: none; +// } +// blockquote, +// q { +// quotes: none; +// } +// blockquote::before, +// blockquote::after, +// q::before, +// q::after { +// content: ""; +// content: none; +// } +// table { +// border-spacing: 0; +// border-collapse: collapse; +// } +html, +body, +#app { + width: 100%; + height: 100%; + padding: 0; + margin: 0; +} + +/* 解决 h1 标签在 webkit 内核浏览器中文字大小失效问题 */ +:-webkit-any(article, aside, nav, section) h1 { + font-size: 2em; +} diff --git a/src/styles/theme/aside.ts b/src/styles/theme/aside.ts new file mode 100644 index 0000000..ecf9277 --- /dev/null +++ b/src/styles/theme/aside.ts @@ -0,0 +1,16 @@ +import { Theme } from "@/hooks/interface"; + +export const asideTheme: Record = { + light: { + "--el-aside-logo-text-color": "#303133", + "--el-aside-border-color": "#e4e7ed" + }, + inverted: { + "--el-aside-logo-text-color": "#dadada", + "--el-aside-border-color": "#414243" + }, + dark: { + "--el-aside-logo-text-color": "#dadada", + "--el-aside-border-color": "#414243" + } +}; diff --git a/src/styles/theme/header.ts b/src/styles/theme/header.ts new file mode 100644 index 0000000..a138784 --- /dev/null +++ b/src/styles/theme/header.ts @@ -0,0 +1,25 @@ +import { Theme } from "@/hooks/interface"; + +export const headerTheme: Record = { + light: { + "--el-header-logo-text-color": "#303133", + "--el-header-bg-color": "#ffffff", + "--el-header-text-color": "#303133", + "--el-header-text-color-regular": "#606266", + "--el-header-border-color": "#e4e7ed" + }, + inverted: { + "--el-header-logo-text-color": "#dadada", + "--el-header-bg-color": "#191a20", + "--el-header-text-color": "#e5eaf3", + "--el-header-text-color-regular": "#cfd3dc", + "--el-header-border-color": "#414243" + }, + dark: { + "--el-header-logo-text-color": "#dadada", + "--el-header-bg-color": "#141414", + "--el-header-text-color": "#e5eaf3", + "--el-header-text-color-regular": "#cfd3dc", + "--el-header-border-color": "#414243" + } +}; diff --git a/src/styles/theme/menu.ts b/src/styles/theme/menu.ts new file mode 100644 index 0000000..b17fcea --- /dev/null +++ b/src/styles/theme/menu.ts @@ -0,0 +1,31 @@ +import { Theme } from "@/hooks/interface"; + +export const menuTheme: Record = { + light: { + "--el-menu-bg-color": "#ffffff", + "--el-menu-hover-bg-color": "#cccccc", + "--el-menu-active-bg-color": "var(--el-color-primary-light-9)", + "--el-menu-text-color": "#333333", + "--el-menu-active-color": "var(--el-color-primary)", + "--el-menu-hover-text-color": "#333333", + "--el-menu-horizontal-sub-item-height": "50px" + }, + inverted: { + "--el-menu-bg-color": "#191a20", + "--el-menu-hover-bg-color": "#000000", + "--el-menu-active-bg-color": "#000000", + "--el-menu-text-color": "#bdbdc0", + "--el-menu-active-color": "#ffffff", + "--el-menu-hover-text-color": "#ffffff", + "--el-menu-horizontal-sub-item-height": "50px" + }, + dark: { + "--el-menu-bg-color": "#141414", + "--el-menu-hover-bg-color": "#000000", + "--el-menu-active-bg-color": "#000000", + "--el-menu-text-color": "#bdbdc0", + "--el-menu-active-color": "#ffffff", + "--el-menu-hover-text-color": "#ffffff", + "--el-menu-horizontal-sub-item-height": "50px" + } +}; diff --git a/src/styles/var.scss b/src/styles/var.scss new file mode 100644 index 0000000..bdc1cb2 --- /dev/null +++ b/src/styles/var.scss @@ -0,0 +1,2 @@ +/* global css variable */ +$primary-color: var(--el-color-primary); diff --git a/src/typings/global.d.ts b/src/typings/global.d.ts new file mode 100644 index 0000000..f926db6 --- /dev/null +++ b/src/typings/global.d.ts @@ -0,0 +1,73 @@ +/* Menu */ +declare namespace Menu { + interface MenuOptions { + path: string; + name: string; + component?: string | (() => Promise); + redirect?: string; + meta: MetaProps; + children?: MenuOptions[]; + } + interface MetaProps { + icon: string; + title: string; + activeMenu?: string; + isLink?: string; + isHide: boolean; + isFull: boolean; + isAffix: boolean; + isKeepAlive: boolean; + } +} + +/* FileType */ +declare namespace File { + type ImageMimeType = + | "image/apng" + | "image/bmp" + | "image/gif" + | "image/jpeg" + | "image/pjpeg" + | "image/png" + | "image/svg+xml" + | "image/tiff" + | "image/webp" + | "image/x-icon"; + + type ExcelMimeType = "application/vnd.ms-excel" | "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; +} + +/* Vite */ +declare type Recordable = Record; + +declare interface ViteEnv { + VITE_USER_NODE_ENV: "development" | "production" | "test"; + VITE_GLOB_APP_TITLE: string; + VITE_PORT: number; + VITE_OPEN: boolean; + VITE_REPORT: boolean; + VITE_ROUTER_MODE: "hash" | "history"; + VITE_BUILD_COMPRESS: "gzip" | "brotli" | "gzip,brotli" | "none"; + VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; + VITE_DROP_CONSOLE: boolean; + VITE_PWA: boolean; + VITE_PUBLIC_PATH: string; + VITE_API_URL: string; + VITE_URL: string; + VITE_PROXY: [string, string][]; +} + +interface ImportMetaEnv extends ViteEnv { + __: unknown; +} + +/* __APP_INFO__ */ +declare const __APP_INFO__: { + pkg: { + name: string; + version: string; + dependencies: Recordable; + devDependencies: Recordable; + }; + lastBuildTime: string; +}; diff --git a/src/typings/utils.d.ts b/src/typings/utils.d.ts new file mode 100644 index 0000000..28e3147 --- /dev/null +++ b/src/typings/utils.d.ts @@ -0,0 +1,17 @@ +type ObjToKeyValUnion = { + [K in keyof T]: { key: K; value: T[K] }; +}[keyof T]; + +type ObjToKeyValArray = { + [K in keyof T]: [K, T[K]]; +}[keyof T]; + +type ObjToSelectedValueUnion = { + [K in keyof T]: T[K]; +}[keyof T]; + +type Optional = Omit & Partial>; + +type GetOptional = { + [P in keyof T as T[P] extends Required[P] ? never : P]: T[P]; +}; diff --git a/src/typings/window.d.ts b/src/typings/window.d.ts new file mode 100644 index 0000000..757ab42 --- /dev/null +++ b/src/typings/window.d.ts @@ -0,0 +1,8 @@ +declare global { + interface Navigator { + msSaveOrOpenBlob: (blob: Blob, fileName: string) => void; + browserLanguage: string; + } +} + +export {}; diff --git a/src/utils/color.ts b/src/utils/color.ts new file mode 100644 index 0000000..3595f76 --- /dev/null +++ b/src/utils/color.ts @@ -0,0 +1,59 @@ +import { ElMessage } from "element-plus"; + +/** + * @description hex颜色转rgb颜色 + * @param {String} str 颜色值字符串 + * @returns {String} 返回处理后的颜色值 + */ +export function hexToRgb(str: any) { + let hexs: any = ""; + let reg = /^\#?[0-9A-Fa-f]{6}$/; + if (!reg.test(str)) return ElMessage.warning("输入错误的hex"); + str = str.replace("#", ""); + hexs = str.match(/../g); + for (let i = 0; i < 3; i++) hexs[i] = parseInt(hexs[i], 16); + return hexs; +} + +/** + * @description rgb颜色转Hex颜色 + * @param {*} r 代表红色 + * @param {*} g 代表绿色 + * @param {*} b 代表蓝色 + * @returns {String} 返回处理后的颜色值 + */ +export function rgbToHex(r: any, g: any, b: any) { + let reg = /^\d{1,3}$/; + if (!reg.test(r) || !reg.test(g) || !reg.test(b)) return ElMessage.warning("输入错误的rgb颜色值"); + let hexs = [r.toString(16), g.toString(16), b.toString(16)]; + for (let i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = `0${hexs[i]}`; + return `#${hexs.join("")}`; +} + +/** + * @description 加深颜色值 + * @param {String} color 颜色值字符串 + * @param {Number} level 加深的程度,限0-1之间 + * @returns {String} 返回处理后的颜色值 + */ +export function getDarkColor(color: string, level: number) { + let reg = /^\#?[0-9A-Fa-f]{6}$/; + if (!reg.test(color)) return ElMessage.warning("输入错误的hex颜色值"); + let rgb = hexToRgb(color); + for (let i = 0; i < 3; i++) rgb[i] = Math.round(20.5 * level + rgb[i] * (1 - level)); + return rgbToHex(rgb[0], rgb[1], rgb[2]); +} + +/** + * @description 变浅颜色值 + * @param {String} color 颜色值字符串 + * @param {Number} level 加深的程度,限0-1之间 + * @returns {String} 返回处理后的颜色值 + */ +export function getLightColor(color: string, level: number) { + let reg = /^\#?[0-9A-Fa-f]{6}$/; + if (!reg.test(color)) return ElMessage.warning("输入错误的hex颜色值"); + let rgb = hexToRgb(color); + for (let i = 0; i < 3; i++) rgb[i] = Math.round(255 * level + rgb[i] * (1 - level)); + return rgbToHex(rgb[0], rgb[1], rgb[2]); +} diff --git a/src/utils/dateForMatter.ts b/src/utils/dateForMatter.ts new file mode 100644 index 0000000..23bc22a --- /dev/null +++ b/src/utils/dateForMatter.ts @@ -0,0 +1,56 @@ +//数字补零 +const complement = function (value: any) { + return value < 10 ? "0" + value : value; +}; +//根据时间戳 转换时间格式 : 2014-02-02 +export const formateDate = (date: any, type: number) => { + if (!date) { + return; + } + const time = new Date(date); + const y = time.getFullYear(); + const m = time.getMonth() + 1; + const d = time.getDate(); + const h = time.getHours(); + const mm = time.getMinutes(); + const s = time.getSeconds(); + if (type == 0) { + return complement(d); + } else if (type == 1) { + return y + "-" + complement(m) + "-" + complement(d); + } else if (type == 6) { + return y + complement(m) + complement(d); + } else if (type == 2) { + return complement(m) + "月" + complement(d) + "日" + "\xa0\xa0\xa0" + complement(h) + ":" + complement(mm); + } else if (type == 3) { + return y + "-" + complement(m) + "-" + complement(d) + " " + complement(h) + ":" + complement(mm) + ":" + complement(s); + } else if (type == 4) { + return y; + } else if (type == 5) { + // 时间格式:8/6 18:51:11 + return m + "/" + d + " " + complement(h) + ":" + complement(mm) + ":" + complement(s); + } else { + return y + "-" + complement(m) + "-" + complement(d) + " " + complement(h) + ":" + complement(mm) + ":" + complement(s); + } +}; +// 秒转换成00:00:00 +export const secondsToTimeFormat = (seconds: any) => { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = seconds % 60; + + const formattedHours = String(hours).padStart(2, "0"); + const formattedMinutes = String(minutes).padStart(2, "0"); + const formattedSeconds = String(secs).padStart(2, "0"); + + return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`; +}; + +/* 获取当前时间戳 + */ +export const nowTime = function () { + let now = new Date().getTime() / 1000; + return Math.floor(now); +}; + +export const defaultTime = ["00:00:00", "23:59:59"]; diff --git a/src/utils/decrypt.ts b/src/utils/decrypt.ts new file mode 100644 index 0000000..ff85b0d --- /dev/null +++ b/src/utils/decrypt.ts @@ -0,0 +1,87 @@ +export const fetchAndDecodeImage = (url: string): Promise => { + return new Promise((resolve, reject) => { + let xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = function () { + if (xhr.status === 200) { + let decodedImage = decode(xhr.response); + resolve(decodedImage); + } else { + reject(`Failed to load image: ${xhr.statusText}`); + } + }; + xhr.onerror = function () { + reject("Network error"); + }; + xhr.send(); + }); +}; +import { defineComponent, onMounted, ref, h } from "vue"; +import { ElImage } from "element-plus"; +// 异步加载图片组件 +export const AsyncImageComponent = defineComponent({ + props: { + url: { + type: String, + required: true + } + }, + setup(props) { + const imageUrl = ref(""); + const isLoading = ref(true); + const error = ref(null); + + onMounted(async () => { + try { + const data = await fetchImageData(props.url); + const decodedImage = decode(data); + imageUrl.value = decodedImage; + isLoading.value = false; + } catch (err) { + console.error("Error converting image to base64:", err); + error.value = err as any; + isLoading.value = false; + } + }); + + return () => { + if (isLoading.value) { + return h("ElImage", { src: "Loading..." }); + } + + if (error.value) { + return h("ElImage", { src: "无法加载" }); + } + return h(ElImage, { + style: "width: 98%; height: 30px; display: flex; align-items: center;", + src: imageUrl.value, + previewSrcList: [imageUrl.value], + hideOnClickModal: true, + zIndex: 999999999, + previewTeleported: true, + fit: "cover" + }); + }; + } +}); + +// 获取图片数据 +async function fetchImageData(url) { + const response = await fetch(url); + const data = await response.arrayBuffer(); + return data; +} + +// 解码图片函数 +function decode(data, key = 0x88) { + let binary = ""; + let bytes = new Uint8Array(data); + let len = bytes.byteLength; + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i] ^ key); + } + let src = window.btoa(binary); + let image = "data:image/jpeg;base64," + src; + return image; +} diff --git a/src/utils/eleValidate.ts b/src/utils/eleValidate.ts new file mode 100644 index 0000000..d2b1e7b --- /dev/null +++ b/src/utils/eleValidate.ts @@ -0,0 +1,27 @@ +// ? Element 常用表单校验规则 + +/** + * @rule 手机号 + */ +export function checkPhoneNumber(rule: any, value: any, callback: any) { + const regexp = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/; + if (value === "") callback("请输入手机号码"); + if (!regexp.test(value)) { + callback(new Error("请输入正确的手机号码")); + } else { + return callback(); + } +} + +/** + * @rule 正则匹配图片去掉前缀 只保留 (如 ".jpg"、".png"、".gif" 等) + */ + +export function extractURI(url) { + const regex = /^(?:https?:\/\/)?[^\/]+(\/.*)$/; + const matches = url.match(regex); + if (matches && matches[1]) { + return matches[1].replace(/\/\/\//g, "//"); + } + return null; +} diff --git a/src/utils/errorHandler.ts b/src/utils/errorHandler.ts new file mode 100644 index 0000000..b4ca931 --- /dev/null +++ b/src/utils/errorHandler.ts @@ -0,0 +1,27 @@ +import { ElNotification } from "element-plus"; + +/** + * @description 全局代码错误捕捉 + * */ +const errorHandler = (error: any) => { + // 过滤 HTTP 请求错误 + if (error.status || error.status == 0) return false; + let errorMap: { [key: string]: string } = { + InternalError: "Javascript引擎内部错误", + ReferenceError: "未找到对象", + TypeError: "使用了错误的类型或对象", + RangeError: "使用内置对象时,参数超范围", + SyntaxError: "语法错误", + EvalError: "错误的使用了Eval", + URIError: "URI错误" + }; + let errorName = errorMap[error.name] || "未知错误"; + ElNotification({ + title: errorName, + message: error, + type: "error", + duration: 3000 + }); +}; + +export default errorHandler; diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..b948c27 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,519 @@ +import { isArray } from "@/utils/is"; +const mode = import.meta.env.VITE_ROUTER_MODE; + +/** + * @description 获取localStorage + * @param {String} key Storage名称 + * @returns {String} + */ +export function localGet(key: string) { + const value = window.localStorage.getItem(key); + try { + return JSON.parse(window.localStorage.getItem(key) as string); + } catch (error) { + return value; + } +} + +/** + * @description 存储localStorage + * @param {String} key Storage名称 + * @param {*} value Storage值 + * @returns {void} + */ +export function localSet(key: string, value: any) { + window.localStorage.setItem(key, JSON.stringify(value)); +} + +export type FieldNamesProps = { + label: string; + value: string; + children?: string; +}; + +/** + * @description 清除localStorage + * @param {String} key Storage名称 + * @returns {void} + */ +export function localRemove(key: string) { + window.localStorage.removeItem(key); +} + +/** + * @description 清除所有localStorage + * @returns {void} + */ +export function localClear() { + window.localStorage.clear(); +} + +/** + * @description 判断数据类型 + * @param {*} val 需要判断类型的数据 + * @returns {String} + */ +export function isType(val: any) { + if (val === null) return "null"; + if (typeof val !== "object") return typeof val; + else return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase(); +} + +/** + * @description 生成唯一 uuid + * @returns {String} + */ +export function generateUUID() { + let uuid = ""; + for (let i = 0; i < 32; i++) { + let random = (Math.random() * 16) | 0; + if (i === 8 || i === 12 || i === 16 || i === 20) uuid += "-"; + uuid += (i === 12 ? 4 : i === 16 ? (random & 3) | 8 : random).toString(16); + } + return uuid; +} + +/** + * 判断两个对象是否相同 + * @param {Object} a 要比较的对象一 + * @param {Object} b 要比较的对象二 + * @returns {Boolean} 相同返回 true,反之 false + */ +export function isObjectValueEqual(a: { [key: string]: any }, b: { [key: string]: any }) { + if (!a || !b) return false; + let aProps = Object.getOwnPropertyNames(a); + let bProps = Object.getOwnPropertyNames(b); + if (aProps.length != bProps.length) return false; + for (let i = 0; i < aProps.length; i++) { + let propName = aProps[i]; + let propA = a[propName]; + let propB = b[propName]; + if (!b.hasOwnProperty(propName)) return false; + if (propA instanceof Object) { + if (!isObjectValueEqual(propA, propB)) return false; + } else if (propA !== propB) { + return false; + } + } + return true; +} + +/** + * @description 生成随机数 + * @param {Number} min 最小值 + * @param {Number} max 最大值 + * @returns {Number} + */ +export function randomNum(min: number, max: number): number { + let num = Math.floor(Math.random() * (min - max) + max); + return num; +} + +/** + * @description 获取当前时间对应的提示语 + * @returns {String} + */ +export function getTimeState() { + let timeNow = new Date(); + let hours = timeNow.getHours(); + if (hours >= 6 && hours <= 10) return `早上好 ⛅`; + if (hours >= 10 && hours <= 14) return `中午好 🌞`; + if (hours >= 14 && hours <= 18) return `下午好 🌞`; + if (hours >= 18 && hours <= 24) return `晚上好 🌛`; + if (hours >= 0 && hours <= 6) return `凌晨好 🌛`; +} + +/** + * @description 获取浏览器默认语言 + * @returns {String} + */ +export function getBrowserLang() { + let browserLang = navigator.language ? navigator.language : navigator.browserLanguage; + let defaultBrowserLang = ""; + if (["cn", "zh", "zh-cn"].includes(browserLang.toLowerCase())) { + defaultBrowserLang = "zh"; + } else { + defaultBrowserLang = "en"; + } + return defaultBrowserLang; +} + +/** + * @description 获取不同路由模式所对应的 url + params + * @returns {String} + */ +export function getUrlWithParams() { + const url = { + hash: location.hash.substring(1), + history: location.pathname + location.search + }; + return url[mode]; +} + +/** + * @description 使用递归扁平化菜单,方便添加动态路由 + * @param {Array} menuList 菜单列表 + * @returns {Array} + */ +export function getFlatMenuList(menuList: Menu.MenuOptions[]): Menu.MenuOptions[] { + let newMenuList: Menu.MenuOptions[] = JSON.parse(JSON.stringify(menuList)); + return newMenuList.flatMap(item => [item, ...(item.children ? getFlatMenuList(item.children) : [])]); +} + +/** + * @description 使用递归过滤出需要渲染在左侧菜单的列表 (需剔除 isHide == true 的菜单) + * @param {Array} menuList 菜单列表 + * @returns {Array} + * */ +export function getShowMenuList(menuList: Menu.MenuOptions[]) { + let newMenuList: Menu.MenuOptions[] = JSON.parse(JSON.stringify(menuList)); + return newMenuList.filter(item => { + item.children?.length && (item.children = getShowMenuList(item.children)); + return !item.meta?.isHide; + }); +} + +/** + * @description 根据枚举列表查询当需要的数据(如果指定了 label 和 value 的 key值,会自动识别格式化) + * @param {String} callValue 当前单元格值 + * @param {Array} enumData 字典列表 + * @param {Array} fieldNames label && value && children 的 key 值 + * @param {String} type 过滤类型(目前只有 tag) + * @returns {String} + * */ +export function filterEnum(callValue: any, enumData?: any, fieldNames?: FieldNamesProps, type?: "tag") { + const value = fieldNames?.value ?? "value"; + const label = fieldNames?.label ?? "label"; + const children = fieldNames?.children ?? "children"; + let filterData: { [key: string]: any } = {}; + // 判断 enumData 是否为数组 + if (Array.isArray(enumData)) filterData = findItemNested(enumData, callValue, value, children); + // 判断是否输出的结果为 tag 类型 + if (type == "tag") { + return filterData?.tagType ? filterData.tagType : ""; + } else { + return filterData ? filterData[label] : "--"; + } +} + +/** + * @description 使用递归找出所有面包屑存储到 pinia/vuex 中 + * @param {Array} menuList 菜单列表 + * @param {Array} parent 父级菜单 + * @param {Object} result 处理后的结果 + * @returns {Object} + */ +export const getAllBreadcrumbList = (menuList: Menu.MenuOptions[], parent = [], result: { [key: string]: any } = {}) => { + for (const item of menuList) { + result[item.path] = [...parent, item]; + if (item.children) getAllBreadcrumbList(item.children, result[item.path], result); + } + return result; +}; + +/** + * @description 使用递归处理路由菜单 path,生成一维数组 (第一版本地路由鉴权会用到,该函数暂未使用) + * @param {Array} menuList 所有菜单列表 + * @param {Array} menuPathArr 菜单地址的一维数组 ['**','**'] + * @returns {Array} + */ +export function getMenuListPath(menuList: Menu.MenuOptions[], menuPathArr: string[] = []): string[] { + for (const item of menuList) { + if (typeof item === "object" && item.path) menuPathArr.push(item.path); + if (item.children?.length) getMenuListPath(item.children, menuPathArr); + } + return menuPathArr; +} + +/** + * @description 递归查询当前 path 所对应的菜单对象 (该函数暂未使用) + * @param {Array} menuList 菜单列表 + * @param {String} path 当前访问地址 + * @returns {Object | null} + */ +export function findMenuByPath(menuList: Menu.MenuOptions[], path: string): Menu.MenuOptions | null { + for (const item of menuList) { + if (item.path === path) return item; + if (item.children) { + const res = findMenuByPath(item.children, path); + if (res) return res; + } + } + return null; +} + +export async function sleep(time: number) { + return new Promise(resolve => setTimeout(resolve, time)); +} +/** + * @description 使用递归过滤需要缓存的菜单 name (该函数暂未使用) + * @param {Array} menuList 所有菜单列表 + * @param {Array} keepAliveNameArr 缓存的菜单 name ['**','**'] + * @returns {Array} + * */ +export function getKeepAliveRouterName(menuList: Menu.MenuOptions[], keepAliveNameArr: string[] = []) { + menuList.forEach(item => { + item.meta.isKeepAlive && item.name && keepAliveNameArr.push(item.name); + item.children?.length && getKeepAliveRouterName(item.children, keepAliveNameArr); + }); + return keepAliveNameArr; +} + +/** + * @description 格式化表格单元格默认值 (el-table-column) + * @param {Number} row 行 + * @param {Number} col 列 + * @param {*} callValue 当前单元格值 + * @returns {String} + * */ +export function formatTableColumn(row: number, col: number, callValue: any) { + // 如果当前值为数组,使用 / 拼接(根据需求自定义) + if (isArray(callValue)) return callValue.length ? callValue.join(" / ") : "--"; + return callValue ?? "--"; +} + +/** + * @description 处理值无数据情况 + * @param {*} callValue 需要处理的值 + * @returns {String} + * */ +export function formatValue(callValue: any) { + // 如果当前值为数组,使用 / 拼接(根据需求自定义) + if (isArray(callValue)) return callValue.length ? callValue.join(" / ") : "--"; + return callValue ?? "--"; +} + +/** + * @description 处理 prop 为多级嵌套的情况,返回的数据 (列如: prop: user.name) + * @param {Object} row 当前行数据 + * @param {String} prop 当前 prop + * @returns {*} + * */ +export function handleRowAccordingToProp(row: { [key: string]: any }, prop: string) { + if (!prop.includes(".")) return row[prop] ?? "--"; + prop.split(".").forEach(item => (row = row[item] ?? "--")); + return row; +} + +/** + * @description 处理 prop,当 prop 为多级嵌套时 ==> 返回最后一级 prop + * @param {String} prop 当前 prop + * @returns {String} + * */ +export function handleProp(prop: string) { + const propArr = prop.split("."); + if (propArr.length == 1) return prop; + return propArr[propArr.length - 1]; +} + +/** + * @description 递归查找 callValue 对应的 enum 值 + * */ +export function findItemNested(enumData: any, callValue: any, value: string, children: string) { + return enumData.reduce((accumulator: any, current: any) => { + if (accumulator) return accumulator; + if (current[value] === callValue) return current; + if (current[children]) return findItemNested(current[children], callValue, value, children); + }, null); +} + +interface AdminRoleNode { + an_id: number; + an_pid: number; + an_name: string; + an_code: string; + children?: AdminRoleNode[]; +} +interface AdminRole { + admin_role_node: AdminRoleNode; + an_id: number; + ar_id: number; + an_name: string; +} +interface WebRoute { + path: string; + name: string; + component?: string; + meta: { + an_id?: number; + icon: string; + title: string; + isLink: string; + isHide: boolean; + isFull: boolean; + isAffix: boolean; + isKeepAlive: boolean; + }; + children?: WebRoute[]; +} + +/** + * 构建树形结构 + * @param data { Array } + * @returns { Array } + */ +export function buildTree(data: AdminRole[]): AdminRoleNode[] { + let tree: AdminRoleNode[] = []; + let mappedArr: Record = {}; + + // 将数组转换为一个映射对象 + data.forEach(item => { + if (!item.admin_role_node.children) { + item.admin_role_node.children = []; + } + mappedArr[item.an_id] = item.admin_role_node; + }); + + // 构建树形结构 + data.forEach(item => { + const node = item.admin_role_node; + if (node.an_pid === 0) { + tree.push(node); + } else { + if (mappedArr[node.an_pid]) { + mappedArr[node.an_pid].children.push(node); + } + } + }); + + return tree; +} + +// 将数据转为树结构的函数 +export function convertToTree(data, parentId = 0) { + const tree = [] as any; + const lookup = {}; + + data.forEach(node => { + lookup[node.an_id] = node; + node.children = []; + }); + + data.forEach(node => { + const parent = lookup[node.an_pid]; + + if (parent) { + // 确保父节点存在再添加到父节点的 children 数组中 + parent.children.push(node); + } else { + // 如果父节点不存在,并且当前节点的 an_pid 是 0,才添加到 tree 数组中 + if (node.an_pid === parentId) { + tree.push(node); + } + } + }); + + return tree; +} + +// 检查 an_id 是否存在于 arrAdminRole 中 +export function existsInTestARR(intAnId: number, arrAdminRole: AdminRole[]): number { + return arrAdminRole.findIndex(item => item.admin_role_node.an_id === intAnId); +} + +// 检查 an_pid 是否有子元素 +export function existsInPid(intAnId: string, arrAdminRole: AdminRole[]): number { + return arrAdminRole.findIndex(item => item.admin_role_node.an_pid === intAnId); +} + +/** + * 递归函数来更新 arrWebRoute + * @param arrWebRoute { Array } + * @param arrAdminRole { Array } + * @returns { Array } + */ +export function updateWebRoutes(arrWebRoute: WebRoute[], arrAdminRole: AdminRole[]): Array { + arrWebRoute.forEach(arrWebRoute => { + let intFindIndex: number = -1; + if (arrWebRoute.meta.an_id) { + intFindIndex = existsInTestARR(arrWebRoute.meta.an_id, arrAdminRole); + } + + // 拿前端路由 和 后端返回的路由对比,如果不存在,则隐藏,这里要区分是否目录 + if (arrWebRoute.meta.an_id && intFindIndex == -1) { + arrWebRoute.meta.isHide = true; + } + + if (arrWebRoute.meta.an_id && intFindIndex >= 0) { + if (arrAdminRole[intFindIndex].admin_role_node.an_is_hidden == 1) { + arrWebRoute.meta.isHide = true; + } + + if (arrAdminRole[intFindIndex].admin_role_node.an_is_dir == 1) { + // 如果 这个是目录且 没有子节点 那么隐藏 + if (existsInPid(arrWebRoute.meta.an_id, arrAdminRole) == "-1") { + arrWebRoute.meta.isHide = true; + } + + // 如果有子节点 但是里面的子节点最少保持一个展示的,如果一个展示的子节点都没有,那么隐藏这个目录 + if (existsInPid(arrWebRoute.meta.an_id, arrAdminRole) != "-1") { + // 遍历这个数组 arrAdminRole , 里面的元素 am_pid == arrWebRoute.meta.an_id 的所有元素,获取他的 an_is_hidden 是否有 0 + let intIndex = arrAdminRole.findIndex( + item => item.admin_role_node.an_pid === arrWebRoute.meta.an_id && item.admin_role_node.an_is_hidden === 0 + ); + if (intIndex == "-1") { + arrWebRoute.meta.isHide = true; + } + } + } + arrWebRoute.meta.title = arrAdminRole[intFindIndex].admin_role_node.an_name; + } + + if (arrWebRoute.children) { + updateWebRoutes(arrWebRoute.children, arrAdminRole); + } + }); + + return arrWebRoute; +} + +/** + * 检测存储的数组中是否包含指定的值 + * @param {string | number} value - 要检测的值 + * @param {string} storageKey - 存储在 localStorage 中的键名 + * @returns {boolean} - 如果存储的数组中包含指定的值,则返回 true,否则返回 false + */ +export function checkStoredValue(value, storageKey = "arrAdminNodeAnId") { + // 从 localStorage 中获取存储的字符串 + const storedData = localStorage.getItem(storageKey); + + // 将字符串解析为数组 + const storedArray = storedData ? JSON.parse(storedData) : []; + + // 检测数组中是否包含指定的值 + const isValueIncluded = storedArray.includes(value); + + return isValueIncluded; +} + +/** + * 检测 是不是数据超级管理员 + * @param {string | number} value - 要检测的值 + * @param {string} storageKey - 存储在 localStorage 中的键名 + * @returns {boolean} - 如果存储的数组中包含指定的值,则返回 true,否则返回 false + */ +export function checkCSuperpower(storageKey = "admin_info_data") { + // 从 localStorage 中获取存储的字符串 + const storedData = localStorage.getItem(storageKey); + + // 将字符串解析为数组 + const storedArray = storedData ? JSON.parse(storedData) : []; + + // 检测数组中是否包含指定的值 + if (storedArray.company.c_superpower == 1) { + return true; + } else { + return false; + } + + //return isValueIncluded; +} + +/** + * 打开新窗口的函数,根据传入的域名自动拼接协议并打开新窗口。 + * @param {string} domain - 要打开的域名。 + */ +export const openNewWindowFun = domain => { + // 使用 window.open 打开新窗口 + window.open(domain, "_blank"); +}; diff --git a/src/utils/is/index.ts b/src/utils/is/index.ts new file mode 100644 index 0000000..ff77fbd --- /dev/null +++ b/src/utils/is/index.ts @@ -0,0 +1,125 @@ +/** + * @description: 判断值是否未某个类型 + */ +export function is(val: unknown, type: string) { + return Object.prototype.toString.call(val) === `[object ${type}]`; +} + +/** + * @description: 是否为函数 + */ +export function isFunction(val: unknown): val is T { + return is(val, "Function"); +} + +/** + * @description: 是否已定义 + */ +export const isDef = (val?: T): val is T => { + return typeof val !== "undefined"; +}; + +/** + * @description: 是否未定义 + */ +export const isUnDef = (val?: T): val is T => { + return !isDef(val); +}; + +/** + * @description: 是否为对象 + */ +export const isObject = (val: any): val is Record => { + return val !== null && is(val, "Object"); +}; + +/** + * @description: 是否为时间 + */ +export function isDate(val: unknown): val is Date { + return is(val, "Date"); +} + +/** + * @description: 是否为数值 + */ +export function isNumber(val: unknown): val is number { + return is(val, "Number"); +} + +/** + * @description: 是否为AsyncFunction + */ +export function isAsyncFunction(val: unknown): val is Promise { + return is(val, "AsyncFunction"); +} + +/** + * @description: 是否为promise + */ +export function isPromise(val: unknown): val is Promise { + return is(val, "Promise") && isObject(val) && isFunction(val.then) && isFunction(val.catch); +} + +/** + * @description: 是否为字符串 + */ +export function isString(val: unknown): val is string { + return is(val, "String"); +} + +/** + * @description: 是否为boolean类型 + */ +export function isBoolean(val: unknown): val is boolean { + return is(val, "Boolean"); +} + +/** + * @description: 是否为数组 + */ +export function isArray(val: any): val is Array { + return val && Array.isArray(val); +} + +/** + * @description: 是否客户端 + */ +export const isClient = () => { + return typeof window !== "undefined"; +}; + +/** + * @description: 是否为浏览器 + */ +export const isWindow = (val: any): val is Window => { + return typeof window !== "undefined" && is(val, "Window"); +}; + +/** + * @description: 是否为 element 元素 + */ +export const isElement = (val: unknown): val is Element => { + return isObject(val) && !!val.tagName; +}; + +/** + * @description: 是否为 null + */ +export function isNull(val: unknown): val is null { + return val === null; +} + +/** + * @description: 是否为 null || undefined + */ +export function isNullOrUnDef(val: unknown): val is null | undefined { + return isUnDef(val) || isNull(val); +} + +/** + * @description: 是否为 16 进制颜色 + */ +export const isHexColor = (str: string) => { + return /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(str); +}; diff --git a/src/utils/mittBus.ts b/src/utils/mittBus.ts new file mode 100644 index 0000000..1ab1228 --- /dev/null +++ b/src/utils/mittBus.ts @@ -0,0 +1,5 @@ +import mitt from "mitt"; + +const mittBus = mitt(); + +export default mittBus; diff --git a/src/utils/serviceDict.ts b/src/utils/serviceDict.ts new file mode 100644 index 0000000..1fffa27 --- /dev/null +++ b/src/utils/serviceDict.ts @@ -0,0 +1,202 @@ +// ? 系统全局字典 + +// 0=启用,1=禁用 +export const arrAuStatusSwitch = [ + { label: "启用", value: 0 }, + { label: "禁用", value: 1 } +]; +/** + * @description:用户性别 + */ +export const arrGenderType = [ + { label: "男", value: 1 }, + { label: "女", value: 2 } +]; + +/** + * @description:用户状态 + */ +export const arrUserStatus = [ + { label: "启用", value: 1 }, + { label: "禁用", value: 0 } +]; + +/** + * @description:DNS账户状态 + */ +export const arrPermissionStatus = [ + { label: "否", value: 0 }, + { label: "是", value: 1 } +]; +/** + * @description + */ +export const arrReTypeStatus = [ + { label: "普通", value: 0, type: "danger" }, + { label: "VIP", value: 1, type: "success" }, + { label: "", value: 2, type: "info" } +]; + +/** + * @description:计划任务 + */ +export const arrPlanSwitch = [ + { label: "关闭", value: 0 }, + { label: "开启", value: 1 } +]; +/** + * @description:通知类型是否启用 + */ +export const arrNoticeSwitch = [ + { label: "否", value: 0 }, + { label: "是", value: 1 } +]; + +/** + * @description:上下架 + */ +export const arrSxStatus = [ + { label: "下架", value: 0 }, + { label: "上架", value: 1 } +]; +/** + * @description:发布状态:0=连载中,1=已完结 + */ +export const arrWjLzStatus = [ + { label: "连载中", value: 0 }, + { label: "已完结", value: 1 } +]; + +/** + * @description:资源类型 0=>视频,1=>漫画,2=>图册,3=>小说 + */ +export const arrResourcesType = [ + { label: "视频", value: 0 }, + { label: "漫画", value: 1 }, + { label: "图册", value: 2 }, + { label: "小说", value: 3 } +]; + +/** + * @description:主题模板 蓝色,黑色,黄色,粉色 + */ +export const arrColorType = [ + { label: "蓝色", value: "blue" }, + { label: "黑色", value: "black" }, + { label: "黄色", value: "yellow" }, + { label: "粉色", value: "pink" } +]; +/** + * @description:精彩类型 0=>普通,1=>精彩 + */ +export const arrWonderfulType = [ + { label: "普通", value: 0 }, + { label: "精彩", value: 1 } +]; +/** + * @description:推荐类型 0=>普通,1=>推荐 + */ +export const arrRecommendType = [ + { label: "普通", value: 0 }, + { label: "推荐", value: 1 } +]; + +/** + * @description:推荐类型 0=>普通,1=>VIP + */ +export const arrVipType = [ + { label: "普通", value: 0 }, + { label: "VIP", value: 1 } +]; + +/** + * @description:推荐类型 0=普通,1=推荐,2=精彩。默认0 | + */ +export const arrNovelType = [ + { label: "普通", value: 0 }, + { label: "推荐", value: 1 }, + { label: "精彩", value: 2 } +]; + +/** + * @description 状态: 0=视频卡顿 1=没有字幕 2=出现黑屏 3=其他原因 + */ +export const arrReasonType = [ + { label: "视频卡顿", value: 0 }, + { label: "没有字幕", value: 1 }, + { label: "出现黑屏", value: 2 }, + { label: "其他原因", value: 3 } +]; +/** + * @description 广告类型: a_type + */ +export const arrAdType = [ + { label: "站内", value: 0 }, + { label: "站外", value: 1 } +]; + +/** + * @description 支付状态:0 未支付,1 已支付,2 已过期 + */ +export const arrVoStatus = [ + { label: "未支付", value: 0, type: "danger" }, + { label: "已支付", value: 1, type: "success" }, + { label: "已过期", value: 2, type: "info" } +]; + +/** + * @description 操作类型:-1=减少, 0=不操作, 1=增加 + */ +export const arrFtOperation = [ + { label: "减少", value: -1, type: "danger", index: 0 }, + { label: "不操作", value: 0, type: "info", index: 1 }, + { label: "增加", value: 1, type: " success", index: 2 } +]; + +/** + * @description 问题类型:0=未到账,1=少充,2=多充,默认0 + */ +export const arrProblemOperation = [ + { label: "未到账", value: 0, type: "danger", index: 0 }, + { label: "少充", value: 1, type: "info", index: 1 }, + { label: "多充", value: 2, type: " success", index: 2 } +]; + +export const shortcuts = [ + { + text: "最近一周", + value: () => { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); + return [start, end]; + } + }, + { + text: "最近一个月", + value: () => { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); + return [start, end]; + } + }, + { + text: "最近三个月", + value: () => { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); + return [start, end]; + } + }, + { + text: "最近六个月", + value: () => { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 180); + return [start, end]; + } + } +]; diff --git a/src/utils/svg.ts b/src/utils/svg.ts new file mode 100644 index 0000000..0c191c9 --- /dev/null +++ b/src/utils/svg.ts @@ -0,0 +1,13 @@ +/** + * @description Loading Svg + */ +export const loadingSvg = ` + +`; diff --git a/src/views/ad/config/drawer.vue b/src/views/ad/config/drawer.vue new file mode 100644 index 0000000..74cd04e --- /dev/null +++ b/src/views/ad/config/drawer.vue @@ -0,0 +1,192 @@ + + + diff --git a/src/views/ad/config/index.vue b/src/views/ad/config/index.vue new file mode 100644 index 0000000..e1e6622 --- /dev/null +++ b/src/views/ad/config/index.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/ad/group/drawer.vue b/src/views/ad/group/drawer.vue new file mode 100644 index 0000000..c4e5853 --- /dev/null +++ b/src/views/ad/group/drawer.vue @@ -0,0 +1,177 @@ + + + diff --git a/src/views/ad/group/index.vue b/src/views/ad/group/index.vue new file mode 100644 index 0000000..9afc740 --- /dev/null +++ b/src/views/ad/group/index.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/views/ad/list/cloneDrawer.vue b/src/views/ad/list/cloneDrawer.vue new file mode 100644 index 0000000..1810316 --- /dev/null +++ b/src/views/ad/list/cloneDrawer.vue @@ -0,0 +1,227 @@ + + + + diff --git a/src/views/ad/list/components/Drawer.vue b/src/views/ad/list/components/Drawer.vue new file mode 100644 index 0000000..66752f8 --- /dev/null +++ b/src/views/ad/list/components/Drawer.vue @@ -0,0 +1,159 @@ + + + + diff --git a/src/views/ad/list/index-bf.vue b/src/views/ad/list/index-bf.vue new file mode 100644 index 0000000..e7a795b --- /dev/null +++ b/src/views/ad/list/index-bf.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/views/ad/list/index.vue b/src/views/ad/list/index.vue new file mode 100644 index 0000000..4e3430f --- /dev/null +++ b/src/views/ad/list/index.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/ad/list/modifyDrawer.vue b/src/views/ad/list/modifyDrawer.vue new file mode 100644 index 0000000..3ed7bad --- /dev/null +++ b/src/views/ad/list/modifyDrawer.vue @@ -0,0 +1,294 @@ + + + + diff --git a/src/views/ad/list/replaceDrawer.vue b/src/views/ad/list/replaceDrawer.vue new file mode 100644 index 0000000..1eff00d --- /dev/null +++ b/src/views/ad/list/replaceDrawer.vue @@ -0,0 +1,247 @@ + + + + diff --git a/src/views/ad/template/index.vue b/src/views/ad/template/index.vue new file mode 100644 index 0000000..bef6781 --- /dev/null +++ b/src/views/ad/template/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/views/atlas/drawer-bf.vue b/src/views/atlas/drawer-bf.vue new file mode 100644 index 0000000..075c092 --- /dev/null +++ b/src/views/atlas/drawer-bf.vue @@ -0,0 +1,390 @@ + + + + diff --git a/src/views/atlas/drawer.vue b/src/views/atlas/drawer.vue new file mode 100644 index 0000000..656777c --- /dev/null +++ b/src/views/atlas/drawer.vue @@ -0,0 +1,503 @@ + + + + diff --git a/src/views/atlas/imgDialog.vue b/src/views/atlas/imgDialog.vue new file mode 100644 index 0000000..0f7ad43 --- /dev/null +++ b/src/views/atlas/imgDialog.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/views/atlas/index.vue b/src/views/atlas/index.vue new file mode 100644 index 0000000..0b97d25 --- /dev/null +++ b/src/views/atlas/index.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/src/views/atlas/tagDialog.vue b/src/views/atlas/tagDialog.vue new file mode 100644 index 0000000..cc5c847 --- /dev/null +++ b/src/views/atlas/tagDialog.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/channel/statistics/drawer.vue b/src/views/channel/statistics/drawer.vue new file mode 100644 index 0000000..8a6ab7f --- /dev/null +++ b/src/views/channel/statistics/drawer.vue @@ -0,0 +1,161 @@ + + + diff --git a/src/views/channel/statistics/index.vue b/src/views/channel/statistics/index.vue new file mode 100644 index 0000000..e311740 --- /dev/null +++ b/src/views/channel/statistics/index.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/components/imgDialog.vue b/src/views/components/imgDialog.vue new file mode 100644 index 0000000..d4128a5 --- /dev/null +++ b/src/views/components/imgDialog.vue @@ -0,0 +1,279 @@ + + + + + + diff --git a/src/views/home/index.scss b/src/views/home/index.scss new file mode 100644 index 0000000..27045dc --- /dev/null +++ b/src/views/home/index.scss @@ -0,0 +1,12 @@ +.home { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + .home-bg { + width: 70%; + max-width: 1200px; + margin-bottom: 20px; + } +} diff --git a/src/views/home/index.vue b/src/views/home/index.vue new file mode 100644 index 0000000..e707f7c --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/login/components/LoginForm.vue b/src/views/login/components/LoginForm.vue new file mode 100644 index 0000000..73592d0 --- /dev/null +++ b/src/views/login/components/LoginForm.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/views/login/index.scss b/src/views/login/index.scss new file mode 100644 index 0000000..90ff14f --- /dev/null +++ b/src/views/login/index.scss @@ -0,0 +1,83 @@ +.login-container { + height: 100%; + min-height: 550px; + background-color: #eeeeee; + background-image: url("@/assets/images/login_bg.svg"); + background-size: 100% 100%; + background-size: cover; + .login-box { + position: relative; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-around; + width: 96.5%; + height: 94%; + padding: 0 50px; + background-color: rgb(255 255 255 / 80%); + border-radius: 10px; + .dark { + position: absolute; + top: 13px; + right: 18px; + } + .login-left { + width: 800px; + margin-right: 10px; + .login-left-img { + width: 100%; + height: 100%; + } + } + .login-form { + width: 420px; + padding: 50px 40px 45px; + background-color: var(--el-bg-color); + border-radius: 10px; + box-shadow: rgb(0 0 0 / 10%) 0 2px 10px 2px; + .login-logo { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 45px; + .login-icon { + width: 60px; + height: 60px; + } + .logo-text { + padding: 0 0 0 25px; + margin: 0; + font-size: 42px; + font-weight: bold; + color: #34495e; + white-space: nowrap; + } + } + .el-form-item { + margin-bottom: 40px; + } + .login-btn { + display: flex; + justify-content: space-between; + width: 100%; + margin-top: 40px; + white-space: nowrap; + .el-button { + width: 185px; + } + } + } + } +} + +@media screen and (width <= 1250px) { + .login-left { + display: none; + } +} + +@media screen and (width <= 600px) { + .login-form { + width: 97% !important; + } +} diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..74da6c8 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/views/manga/chapter/index.vue b/src/views/manga/chapter/index.vue new file mode 100644 index 0000000..d140be5 --- /dev/null +++ b/src/views/manga/chapter/index.vue @@ -0,0 +1,141 @@ + + + + diff --git a/src/views/manga/component/chapterDrawer.vue b/src/views/manga/component/chapterDrawer.vue new file mode 100644 index 0000000..d6b8d77 --- /dev/null +++ b/src/views/manga/component/chapterDrawer.vue @@ -0,0 +1,312 @@ + + + + diff --git a/src/views/manga/component/imgDialog.vue b/src/views/manga/component/imgDialog.vue new file mode 100644 index 0000000..d9d0782 --- /dev/null +++ b/src/views/manga/component/imgDialog.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/views/manga/component/modifyDrawer.vue b/src/views/manga/component/modifyDrawer.vue new file mode 100644 index 0000000..8415368 --- /dev/null +++ b/src/views/manga/component/modifyDrawer.vue @@ -0,0 +1,200 @@ + + + + diff --git a/src/views/manga/components/chapter.vue b/src/views/manga/components/chapter.vue new file mode 100644 index 0000000..40cfab0 --- /dev/null +++ b/src/views/manga/components/chapter.vue @@ -0,0 +1,224 @@ + + + + diff --git a/src/views/manga/drawer.vue b/src/views/manga/drawer.vue new file mode 100644 index 0000000..a22e0ff --- /dev/null +++ b/src/views/manga/drawer.vue @@ -0,0 +1,481 @@ + + + + diff --git a/src/views/manga/fenlei/index.vue b/src/views/manga/fenlei/index.vue new file mode 100644 index 0000000..c46ca04 --- /dev/null +++ b/src/views/manga/fenlei/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/manga/index.vue b/src/views/manga/index.vue new file mode 100644 index 0000000..fde3302 --- /dev/null +++ b/src/views/manga/index.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/src/views/manga/tagDialog.vue b/src/views/manga/tagDialog.vue new file mode 100644 index 0000000..df0c56a --- /dev/null +++ b/src/views/manga/tagDialog.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/miUser/drawer.vue b/src/views/miUser/drawer.vue new file mode 100644 index 0000000..1d84805 --- /dev/null +++ b/src/views/miUser/drawer.vue @@ -0,0 +1,224 @@ + + + diff --git a/src/views/miUser/index.vue b/src/views/miUser/index.vue new file mode 100644 index 0000000..e67578b --- /dev/null +++ b/src/views/miUser/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/novel/chapter/index.vue b/src/views/novel/chapter/index.vue new file mode 100644 index 0000000..bfc1dbc --- /dev/null +++ b/src/views/novel/chapter/index.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/views/novel/component/chapterDrawer.vue b/src/views/novel/component/chapterDrawer.vue new file mode 100644 index 0000000..96af7c5 --- /dev/null +++ b/src/views/novel/component/chapterDrawer.vue @@ -0,0 +1,229 @@ + + + diff --git a/src/views/novel/components/chapter.vue b/src/views/novel/components/chapter.vue new file mode 100644 index 0000000..79a2be5 --- /dev/null +++ b/src/views/novel/components/chapter.vue @@ -0,0 +1,181 @@ + + + + diff --git a/src/views/novel/drawer.vue b/src/views/novel/drawer.vue new file mode 100644 index 0000000..9a34806 --- /dev/null +++ b/src/views/novel/drawer.vue @@ -0,0 +1,457 @@ + + + + diff --git a/src/views/novel/fenlei/index.vue b/src/views/novel/fenlei/index.vue new file mode 100644 index 0000000..80d9520 --- /dev/null +++ b/src/views/novel/fenlei/index.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/views/novel/index.vue b/src/views/novel/index.vue new file mode 100644 index 0000000..f2f0c1f --- /dev/null +++ b/src/views/novel/index.vue @@ -0,0 +1,334 @@ + + + + + diff --git a/src/views/novel/setDrawer.vue b/src/views/novel/setDrawer.vue new file mode 100644 index 0000000..43e8dc6 --- /dev/null +++ b/src/views/novel/setDrawer.vue @@ -0,0 +1,363 @@ + + + + diff --git a/src/views/resource/endpoint/components/Drawer.vue b/src/views/resource/endpoint/components/Drawer.vue new file mode 100644 index 0000000..fb0d44e --- /dev/null +++ b/src/views/resource/endpoint/components/Drawer.vue @@ -0,0 +1,100 @@ + + + diff --git a/src/views/resource/endpoint/index.vue b/src/views/resource/endpoint/index.vue new file mode 100644 index 0000000..ab72a89 --- /dev/null +++ b/src/views/resource/endpoint/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/resource/endpointGroup/components/Drawer.vue b/src/views/resource/endpointGroup/components/Drawer.vue new file mode 100644 index 0000000..7fb2a1b --- /dev/null +++ b/src/views/resource/endpointGroup/components/Drawer.vue @@ -0,0 +1,87 @@ + + + diff --git a/src/views/resource/endpointGroup/index.vue b/src/views/resource/endpointGroup/index.vue new file mode 100644 index 0000000..1a66283 --- /dev/null +++ b/src/views/resource/endpointGroup/index.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/searchGroup/drawer.vue b/src/views/searchGroup/drawer.vue new file mode 100644 index 0000000..6e08a9d --- /dev/null +++ b/src/views/searchGroup/drawer.vue @@ -0,0 +1,178 @@ + + + diff --git a/src/views/searchGroup/index.vue b/src/views/searchGroup/index.vue new file mode 100644 index 0000000..8fa6201 --- /dev/null +++ b/src/views/searchGroup/index.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/searchKey/drawer.vue b/src/views/searchKey/drawer.vue new file mode 100644 index 0000000..9151599 --- /dev/null +++ b/src/views/searchKey/drawer.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/views/searchKey/index.vue b/src/views/searchKey/index.vue new file mode 100644 index 0000000..551eb07 --- /dev/null +++ b/src/views/searchKey/index.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/views/site/drawer.vue b/src/views/site/drawer.vue new file mode 100644 index 0000000..3d55e73 --- /dev/null +++ b/src/views/site/drawer.vue @@ -0,0 +1,554 @@ + + + + + diff --git a/src/views/site/index.vue b/src/views/site/index.vue new file mode 100644 index 0000000..08c617d --- /dev/null +++ b/src/views/site/index.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/src/views/site/subject/fomart/group/drawer.vue b/src/views/site/subject/fomart/group/drawer.vue new file mode 100644 index 0000000..f551d12 --- /dev/null +++ b/src/views/site/subject/fomart/group/drawer.vue @@ -0,0 +1,172 @@ + + + diff --git a/src/views/site/subject/fomart/group/list.vue b/src/views/site/subject/fomart/group/list.vue new file mode 100644 index 0000000..1088ffe --- /dev/null +++ b/src/views/site/subject/fomart/group/list.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/views/site/subject/fomart/list/drawer.vue b/src/views/site/subject/fomart/list/drawer.vue new file mode 100644 index 0000000..ec8e653 --- /dev/null +++ b/src/views/site/subject/fomart/list/drawer.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/views/site/subject/fomart/list/index.vue b/src/views/site/subject/fomart/list/index.vue new file mode 100644 index 0000000..e1caa7e --- /dev/null +++ b/src/views/site/subject/fomart/list/index.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/views/site/template.vue b/src/views/site/template.vue new file mode 100644 index 0000000..4fee545 --- /dev/null +++ b/src/views/site/template.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/views/site/tkdarg.vue b/src/views/site/tkdarg.vue new file mode 100644 index 0000000..6d49f29 --- /dev/null +++ b/src/views/site/tkdarg.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/views/system/bot/drawer.vue b/src/views/system/bot/drawer.vue new file mode 100644 index 0000000..1df7d94 --- /dev/null +++ b/src/views/system/bot/drawer.vue @@ -0,0 +1,161 @@ + + + diff --git a/src/views/system/bot/index.vue b/src/views/system/bot/index.vue new file mode 100644 index 0000000..87c6187 --- /dev/null +++ b/src/views/system/bot/index.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/views/system/caChe/es/index.vue b/src/views/system/caChe/es/index.vue new file mode 100644 index 0000000..ce05b12 --- /dev/null +++ b/src/views/system/caChe/es/index.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/views/system/caChe/manage/index.vue b/src/views/system/caChe/manage/index.vue new file mode 100644 index 0000000..6b87dfe --- /dev/null +++ b/src/views/system/caChe/manage/index.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/views/system/company/drawer.vue b/src/views/system/company/drawer.vue new file mode 100644 index 0000000..c0f3b01 --- /dev/null +++ b/src/views/system/company/drawer.vue @@ -0,0 +1,236 @@ + + + diff --git a/src/views/system/company/index.vue b/src/views/system/company/index.vue new file mode 100644 index 0000000..05cee2a --- /dev/null +++ b/src/views/system/company/index.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/src/views/system/company/info.vue b/src/views/system/company/info.vue new file mode 100644 index 0000000..ebe53a3 --- /dev/null +++ b/src/views/system/company/info.vue @@ -0,0 +1,119 @@ + + + + + + + diff --git a/src/views/system/config/drawer.vue b/src/views/system/config/drawer.vue new file mode 100644 index 0000000..8f197f7 --- /dev/null +++ b/src/views/system/config/drawer.vue @@ -0,0 +1,173 @@ + + + diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue new file mode 100644 index 0000000..25274ba --- /dev/null +++ b/src/views/system/config/index.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/system/gather/drawer.vue b/src/views/system/gather/drawer.vue new file mode 100644 index 0000000..d6f74af --- /dev/null +++ b/src/views/system/gather/drawer.vue @@ -0,0 +1,183 @@ + + + diff --git a/src/views/system/gather/index.vue b/src/views/system/gather/index.vue new file mode 100644 index 0000000..7926548 --- /dev/null +++ b/src/views/system/gather/index.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/src/views/system/logs/operate/index.vue b/src/views/system/logs/operate/index.vue new file mode 100644 index 0000000..eafacb6 --- /dev/null +++ b/src/views/system/logs/operate/index.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/views/system/node/Drawer.vue b/src/views/system/node/Drawer.vue new file mode 100644 index 0000000..75df396 --- /dev/null +++ b/src/views/system/node/Drawer.vue @@ -0,0 +1,202 @@ + + + diff --git a/src/views/system/node/index.vue b/src/views/system/node/index.vue new file mode 100644 index 0000000..e3e84ec --- /dev/null +++ b/src/views/system/node/index.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/system/notice/components/botRead.vue b/src/views/system/notice/components/botRead.vue new file mode 100644 index 0000000..d9fe3c7 --- /dev/null +++ b/src/views/system/notice/components/botRead.vue @@ -0,0 +1,81 @@ + + + + diff --git a/src/views/system/notice/drawer.vue b/src/views/system/notice/drawer.vue new file mode 100644 index 0000000..46d7576 --- /dev/null +++ b/src/views/system/notice/drawer.vue @@ -0,0 +1,234 @@ + + + diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue new file mode 100644 index 0000000..81d526a --- /dev/null +++ b/src/views/system/notice/index.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/views/system/plan/drawer.vue b/src/views/system/plan/drawer.vue new file mode 100644 index 0000000..d2e6dec --- /dev/null +++ b/src/views/system/plan/drawer.vue @@ -0,0 +1,224 @@ + + + diff --git a/src/views/system/plan/index.vue b/src/views/system/plan/index.vue new file mode 100644 index 0000000..49ccb9c --- /dev/null +++ b/src/views/system/plan/index.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/views/system/role/Drawer.vue b/src/views/system/role/Drawer.vue new file mode 100644 index 0000000..b43332a --- /dev/null +++ b/src/views/system/role/Drawer.vue @@ -0,0 +1,166 @@ + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..28214c6 --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/views/system/user/Drawer.vue b/src/views/system/user/Drawer.vue new file mode 100644 index 0000000..4bbce90 --- /dev/null +++ b/src/views/system/user/Drawer.vue @@ -0,0 +1,221 @@ + + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..5b7515d --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/views/system/user/info.vue b/src/views/system/user/info.vue new file mode 100644 index 0000000..aa7a020 --- /dev/null +++ b/src/views/system/user/info.vue @@ -0,0 +1,167 @@ + + + + + + diff --git a/src/views/tab/drawer.vue b/src/views/tab/drawer.vue new file mode 100644 index 0000000..303d71f --- /dev/null +++ b/src/views/tab/drawer.vue @@ -0,0 +1,447 @@ + + + + + diff --git a/src/views/tab/index.vue b/src/views/tab/index.vue new file mode 100644 index 0000000..b4d124c --- /dev/null +++ b/src/views/tab/index.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/views/tag/atlasTag/drawer.vue b/src/views/tag/atlasTag/drawer.vue new file mode 100644 index 0000000..57d4863 --- /dev/null +++ b/src/views/tag/atlasTag/drawer.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/tag/atlasTag/index.vue b/src/views/tag/atlasTag/index.vue new file mode 100644 index 0000000..49c77b0 --- /dev/null +++ b/src/views/tag/atlasTag/index.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/tag/mangaTag/drawer.vue b/src/views/tag/mangaTag/drawer.vue new file mode 100644 index 0000000..86b0f77 --- /dev/null +++ b/src/views/tag/mangaTag/drawer.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/tag/mangaTag/index.vue b/src/views/tag/mangaTag/index.vue new file mode 100644 index 0000000..3e8d128 --- /dev/null +++ b/src/views/tag/mangaTag/index.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/tag/novelTag/drawer.vue b/src/views/tag/novelTag/drawer.vue new file mode 100644 index 0000000..94b27c0 --- /dev/null +++ b/src/views/tag/novelTag/drawer.vue @@ -0,0 +1,203 @@ + + + diff --git a/src/views/tag/novelTag/index.vue b/src/views/tag/novelTag/index.vue new file mode 100644 index 0000000..bf18c16 --- /dev/null +++ b/src/views/tag/novelTag/index.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/tag/videoTag/drawer.vue b/src/views/tag/videoTag/drawer.vue new file mode 100644 index 0000000..8a12211 --- /dev/null +++ b/src/views/tag/videoTag/drawer.vue @@ -0,0 +1,215 @@ + + + diff --git a/src/views/tag/videoTag/index.vue b/src/views/tag/videoTag/index.vue new file mode 100644 index 0000000..7732fe2 --- /dev/null +++ b/src/views/tag/videoTag/index.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/src/views/tag/videoTag/modifyDrawer.vue b/src/views/tag/videoTag/modifyDrawer.vue new file mode 100644 index 0000000..c16d63a --- /dev/null +++ b/src/views/tag/videoTag/modifyDrawer.vue @@ -0,0 +1,205 @@ + + + + diff --git a/src/views/video/dialog.vue b/src/views/video/dialog.vue new file mode 100644 index 0000000..e687f8e --- /dev/null +++ b/src/views/video/dialog.vue @@ -0,0 +1,223 @@ + + + diff --git a/src/views/video/drawer.vue b/src/views/video/drawer.vue new file mode 100644 index 0000000..6c31748 --- /dev/null +++ b/src/views/video/drawer.vue @@ -0,0 +1,482 @@ + + + + diff --git a/src/views/video/fenlei/index.vue b/src/views/video/fenlei/index.vue new file mode 100644 index 0000000..d8c2b7f --- /dev/null +++ b/src/views/video/fenlei/index.vue @@ -0,0 +1,103 @@ + + + diff --git a/src/views/video/index.vue b/src/views/video/index.vue new file mode 100644 index 0000000..03eedec --- /dev/null +++ b/src/views/video/index.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/src/views/video/modifyDrawer.vue b/src/views/video/modifyDrawer.vue new file mode 100644 index 0000000..90711cf --- /dev/null +++ b/src/views/video/modifyDrawer.vue @@ -0,0 +1,207 @@ + + + + diff --git a/src/views/video/nvyou/index.vue b/src/views/video/nvyou/index.vue new file mode 100644 index 0000000..74d2c7a --- /dev/null +++ b/src/views/video/nvyou/index.vue @@ -0,0 +1,113 @@ + + + diff --git a/src/views/video/tagDialog.vue b/src/views/video/tagDialog.vue new file mode 100644 index 0000000..693db6f --- /dev/null +++ b/src/views/video/tagDialog.vue @@ -0,0 +1,178 @@ + + + + diff --git a/src/views/videoFeedback/drawer.vue b/src/views/videoFeedback/drawer.vue new file mode 100644 index 0000000..c32246a --- /dev/null +++ b/src/views/videoFeedback/drawer.vue @@ -0,0 +1,205 @@ + + + diff --git a/src/views/videoFeedback/index.vue b/src/views/videoFeedback/index.vue new file mode 100644 index 0000000..02ed9d4 --- /dev/null +++ b/src/views/videoFeedback/index.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ba1d59c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,45 @@ +{ + "compilerOptions": { + "allowJs": true, + "target": "ESNext", + "useDefineForClassFields": true, // 使用类字段的定义初始化,适用于类字段的初始化 + "module": "ESNext", + "moduleResolution": "Node", + "types": ["vite/client", "element-plus/global"], + + /* Strict Type-Checking Options */ + "strict": true, // 启用所有严格的类型检查选项 + "noImplicitAny": false /* 在具有隐含 'any' 类型的表达式和声明上引发错误。 */, + // "strictNullChecks": true, /* 启用严格的 null 检查。 */ + // "strictFunctionTypes": true, /* 启用对函数类型的严格检查。 */ + // "strictBindCallApply": true, /* 启用对函数上的严格 'bind', 'call', 和 'apply' 方法的检查。 */ + // "strictPropertyInitialization": true, /* 启用对类中属性初始化的严格检查。 */ + // "noImplicitThis": true, /* 在具有隐含 'any' 类型的 'this' 表达式上引发错误。 */ + // "alwaysStrict": true, /* 在严格模式下解析并为每个源文件发出 "use strict"。 */ + + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "noEmit": true, + "baseUrl": "./", + "paths": { + "@": ["src"], + "@/*": ["src/*"] + } + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue", + "build/**/*.ts", + "build/**/*.d.ts", + "vite.config.ts", + "src/utils/lozad.min.js" + ], + "exclude": ["node_modules", "dist", "**/*.js"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..f2293dc --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,78 @@ +import { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite"; +import { resolve } from "path"; +import { wrapperEnv } from "./build/getEnv"; +import { createProxy } from "./build/proxy"; +import { createVitePlugins } from "./build/plugins"; +import pkg from "./package.json"; +import dayjs from "dayjs"; +const { dependencies, devDependencies, name, version } = pkg; +const __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; + +// @see: https://vitejs.dev/config/ +export default defineConfig(({ mode }: ConfigEnv): UserConfig => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve(__dirname, "./src"), + "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js" + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@import "@/styles/var.scss";` + } + } + }, + server: { + host: "0.0.0.0", + port: viteEnv.VITE_PORT, + open: viteEnv.VITE_OPEN, + cors: true, + // Load proxy configuration from .env.development + proxy: createProxy(viteEnv.VITE_PROXY) + }, + plugins: createVitePlugins(viteEnv), + esbuild: { + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: viteEnv.VITE_OUT_PATH, + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + sourcemap: false, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2000, + rollupOptions: { + output: { + // Static resource classification and packaging + chunkFileNames: "assets/js/[name]-[hash].js", + entryFileNames: "assets/js/[name]-[hash].js", + assetFileNames: "assets/[ext]/[name]-[hash].[ext]" + } + } + } + // logLevel: "warn" // 设置日志等级为 'warn' 或 'error' + }; +}); diff --git a/默认模板数据位置.md b/默认模板数据位置.md new file mode 100644 index 0000000..19bcab0 --- /dev/null +++ b/默认模板数据位置.md @@ -0,0 +1,10 @@ +1. **控制整个模板的** + src\stores\modules\global.ts + +2. **头部导航栏左边** + src\layouts\components\Header\ToolBarLeft.vue + +3. **头部导航栏右边边** + src\layouts\components\Header\ToolBarRight.vue + +4. **底部分页数据修改**