diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..aa721d0 --- /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 = 2 # 缩进大小 +max_line_length = 130 # 最大行长度 + +[*.md] # 表示仅对 md 文件适用以下规则 +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/.env b/.env new file mode 100644 index 0000000..874e71b --- /dev/null +++ b/.env @@ -0,0 +1,11 @@ +# title +VITE_GLOB_APP_TITLE = OPS供应链系统 + +# 本地运行端口号 +VITE_PORT = 8080 + +# 启动时自动打开浏览器 +VITE_OPEN = true + +# 打包后是否生成包分析文件 +VITE_REPORT = true diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..ef75230 --- /dev/null +++ b/.env.development @@ -0,0 +1,30 @@ +ENV = 'test' +VITE_APP_API_VERSION ="" +VITE_APP_API_BASEURL = https://dev.wms.api.v2.f2b211.com/v1/admapi/ +VITE_APP_SSO_LOGINURL = http://dev.uc.v3.f2b211.com/uc/login # http://dev.uc.f2b211.com/index.php/uc/user/login.html +VITE_APP_SSO_APPID = 101341644040699904 + +VITE_REDIRECT_URL =http://localhost:8080/login #单点从定向地址 +VITE_SINGLE_URL = https://dev.uc.v3.f2b211.com/ #测试环境单点登录通知 + +# 测试环境 +VITE_USER_NODE_ENV = test + +# 公共基础路径 +VITE_PUBLIC_PATH = / + +# 是否启用 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_API_URL = "https://www.fastmock.site/mock/f81e8333c1a9276214bcdbc170d9e0a0" diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..3fc5f4e --- /dev/null +++ b/.env.production @@ -0,0 +1,30 @@ +ENV = 'production' +VITE_APP_API_VERSION = "" #版本号 +VITE_APP_API_BASEURL = https://opsscmapi.f2b211.com/api/ #请求地址 +VITE_APP_SSO_LOGINURL = http://uc.v3.f2b211.com/uc/login +VITE_APP_SSO_APPID = 100664627590856707 + +VITE_REDIRECT_URL = https://opsscm.f2b211.com/login #单点从定向地址 +VITE_SINGLE_URL = https://uc.v3.f2b211.com/ #单点登录通知 +# 线上环境 +VITE_USER_NODE_ENV = production + +# 公共基础路径 +VITE_PUBLIC_PATH = / + +# 是否启用 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_API_URL = "https://mock.mengxuegu.com/mock/629d727e6163854a32e8307e" + diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..16ceb60 --- /dev/null +++ b/.env.test @@ -0,0 +1,30 @@ +ENV = 'test' +VITE_APP_API_VERSION ="" +VITE_APP_API_BASEURL = https://dev.wms.api.v2.f2b211.com/admapi/ +VITE_APP_SSO_LOGINURL = http://dev.uc.v3.f2b211.com/uc/login # http://dev.uc.f2b211.com/index.php/uc/user/login.html +VITE_APP_SSO_APPID = 101341644040699904 + +VITE_REDIRECT_URL =https://dev.wms.v2.f2b211.com/login #单点从定向地址 +VITE_SINGLE_URL = https://dev.uc.v3.f2b211.com/ #测试环境单点登录通知 + +# 测试环境 +VITE_USER_NODE_ENV = test + +# 公共基础路径 +VITE_PUBLIC_PATH = / + +# 是否启用 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_API_URL = "https://www.fastmock.site/mock/f81e8333c1a9276214bcdbc170d9e0a0" diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..0c7bd77 --- /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 +/src/assets diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..63e47b7 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,65 @@ +// @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", // 禁止在 函数/类/变量 定义之前使用它们 + //import.meta.env.ENV process.env.NODE_ENV + // typeScript (https://typescript-eslint.io/rules) + "@typescript-eslint/no-unused-vars": "error", + //'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + // "@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..04d1d40 --- /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..d91644d --- /dev/null +++ b/package.json @@ -0,0 +1,124 @@ +{ + "name": "yc_ops_admin_ts", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "serve": "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + "axios": "^1.4.0", + "bwip-js": "^4.3.2", + "dayjs": "^1.11.9", + "decimal": "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + "jsbarcode": "^3.11.6", + "jsonpack": "^1.1.5", + "lodash-es": "^4.17.21", + "mitt": "^3.0.0", + "nprogress": "^0.2.0", + "pinia": "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + "qs": "^6.11.2", + "sortablejs": "^1.15.0", + "vue": "^3.3.4", + "vue-router": "^4.2.2", + "vuedraggable": "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "autoprefixer": "^10.4.14", + "cz-git": "^1.6.1", + "czg": "^1.6.1", + "eslint": "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + "husky": "^8.0.3", + "lint-staged": "^13.2.2", + "postcss": "^8.4.23", + "postcss-html": "^1.5.0", + "prettier": "^2.8.8", + "qrcode": "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + "sass": "^1.62.1", + "standard-version": "^9.5.0", + "stylelint": "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + "typescript": "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + "vite": "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + "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..e98ab89 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,10881 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.1.0 + version: 2.3.2(vue@3.5.21(typescript@5.9.2)) + '@types/decimal.js': + specifier: ^7.4.0 + version: 7.4.3 + '@vueuse/core': + specifier: ^10.1.2 + version: 10.11.1(vue@3.5.21(typescript@5.9.2)) + '@wangeditor/editor': + specifier: ^5.1.23 + version: 5.1.23 + '@wangeditor/editor-for-vue': + specifier: ^5.1.12 + version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.21(typescript@5.9.2)) + async-validator: + specifier: ^4.2.5 + version: 4.2.5 + axios: + specifier: ^1.4.0 + version: 1.12.2 + bwip-js: + specifier: ^4.3.2 + version: 4.7.0 + dayjs: + specifier: ^1.11.9 + version: 1.11.18 + decimal: + specifier: ^0.0.2 + version: 0.0.2 + default-passive-events: + specifier: ^2.0.0 + version: 2.0.0 + driver.js: + specifier: ^0.9.8 + version: 0.9.8 + element-plus: + specifier: ^2.3.4 + version: 2.11.2(vue@3.5.21(typescript@5.9.2)) + file-saver: + specifier: ^2.0.5 + version: 2.0.5 + js-md5: + specifier: ^0.7.3 + version: 0.7.3 + jsbarcode: + specifier: ^3.11.6 + version: 3.12.1 + jsonpack: + specifier: ^1.1.5 + version: 1.1.5 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + mitt: + specifier: ^3.0.0 + version: 3.0.1 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + pinia: + specifier: ^2.1.3 + version: 2.3.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + pinia-plugin-persistedstate: + specifier: ^3.1.0 + version: 3.2.3(pinia@2.3.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))) + print-js: + specifier: ^1.6.0 + version: 1.6.0 + qs: + specifier: ^6.11.2 + version: 6.14.0 + sortablejs: + specifier: ^1.15.0 + version: 1.15.6 + vue: + specifier: ^3.3.4 + version: 3.5.21(typescript@5.9.2) + vue-router: + specifier: ^4.2.2 + version: 4.5.1(vue@3.5.21(typescript@5.9.2)) + vuedraggable: + specifier: ^4.1.0 + version: 4.1.0(vue@3.5.21(typescript@5.9.2)) + vxe-table: + specifier: ^4.5.0-beta.10 + version: 4.16.12(vue@3.5.21(typescript@5.9.2)) + xe-utils: + specifier: ^3.5.11 + version: 3.7.9 + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@commitlint/cli': + specifier: ^17.6.3 + version: 17.8.1 + '@commitlint/config-conventional': + specifier: ^17.6.3 + version: 17.8.1 + '@iconify-json/ep': + specifier: ^1.1.10 + version: 1.2.3 + '@types/file-saver': + specifier: ^2.0.5 + version: 2.0.7 + '@types/js-md5': + specifier: ^0.7.0 + version: 0.7.2 + '@types/nprogress': + specifier: ^0.2.0 + version: 0.2.3 + '@types/qs': + specifier: ^6.9.7 + version: 6.14.0 + '@types/sortablejs': + specifier: ^1.15.1 + version: 1.15.8 + '@typescript-eslint/eslint-plugin': + specifier: ^5.59.7 + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': + specifier: ^5.59.7 + version: 5.62.0(eslint@8.57.1)(typescript@5.9.2) + '@vitejs/plugin-vue': + specifier: ^4.2.3 + version: 4.6.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(vue@3.5.21(typescript@5.9.2)) + '@vitejs/plugin-vue-jsx': + specifier: ^3.0.1 + version: 3.1.0(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(vue@3.5.21(typescript@5.9.2)) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.21(postcss@8.5.6) + cz-git: + specifier: ^1.6.1 + version: 1.12.0 + czg: + specifier: ^1.6.1 + version: 1.12.0 + eslint: + specifier: ^8.41.0 + version: 8.57.1 + eslint-config-prettier: + specifier: ^8.8.0 + version: 8.10.2(eslint@8.57.1) + eslint-plugin-prettier: + specifier: ^4.2.1 + version: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) + eslint-plugin-vue: + specifier: ^9.14.0 + version: 9.33.0(eslint@8.57.1) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.2.2 + version: 13.3.0 + postcss: + specifier: ^8.4.23 + version: 8.5.6 + postcss-html: + specifier: ^1.5.0 + version: 1.8.0 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + qrcode: + specifier: ^1.5.3 + version: 1.5.4 + rollup-plugin-visualizer: + specifier: ^5.9.0 + version: 5.14.0(rollup@2.79.2) + sass: + specifier: ^1.62.1 + version: 1.92.1 + standard-version: + specifier: ^9.5.0 + version: 9.5.0 + stylelint: + specifier: ^15.6.2 + version: 15.11.0(typescript@5.9.2) + stylelint-config-html: + specifier: ^1.1.0 + version: 1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-recess-order: + specifier: ^4.0.0 + version: 4.6.0(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-recommended-scss: + specifier: ^12.0.0 + version: 12.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-recommended-vue: + specifier: ^1.4.0 + version: 1.6.1(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-standard: + specifier: ^33.0.0 + version: 33.0.0(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-standard-scss: + specifier: ^9.0.0 + version: 9.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)) + typescript: + specifier: ^5.0.2 + version: 5.9.2 + unplugin-auto-import: + specifier: ^0.16.4 + version: 0.16.7(@vueuse/core@10.11.1(vue@3.5.21(typescript@5.9.2)))(rollup@2.79.2) + unplugin-icons: + specifier: ^0.16.3 + version: 0.16.6(@vue/compiler-sfc@3.5.21)(vue-template-compiler@2.7.16) + unplugin-vue-components: + specifier: ^0.25.1 + version: 0.25.2(@babel/parser@7.28.4)(rollup@2.79.2)(vue@3.5.21(typescript@5.9.2)) + unplugin-vue-setup-extend-plus: + specifier: ^1.0.0 + version: 1.0.1 + vite: + specifier: ^4.3.9 + version: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)) + vite-plugin-eslint: + specifier: ^1.8.1 + version: 1.8.1(eslint@8.57.1)(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)) + vite-plugin-html: + specifier: ^3.2.0 + version: 3.2.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)) + vite-plugin-pwa: + specifier: ^0.15.0 + version: 0.15.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(workbox-build@6.6.0)(workbox-window@6.6.0) + vite-plugin-svg-icons: + specifier: ^2.0.1 + version: 2.0.1(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)) + vue-tsc: + specifier: ^1.6.5 + version: 1.8.27(typescript@5.9.2) + +packages: + + '@antfu/install-pkg@0.1.1': + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.5': + resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.28.0': + resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.4': + resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.0': + resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.0': + resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.0': + resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.28.3': + resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@commitlint/cli@17.8.1': + resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} + engines: {node: '>=v14'} + hasBin: true + + '@commitlint/config-conventional@17.8.1': + resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==} + engines: {node: '>=v14'} + + '@commitlint/config-validator@17.8.1': + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} + engines: {node: '>=v14'} + + '@commitlint/ensure@17.8.1': + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} + engines: {node: '>=v14'} + + '@commitlint/execute-rule@17.8.1': + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} + engines: {node: '>=v14'} + + '@commitlint/format@17.8.1': + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} + engines: {node: '>=v14'} + + '@commitlint/is-ignored@17.8.1': + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} + engines: {node: '>=v14'} + + '@commitlint/lint@17.8.1': + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} + engines: {node: '>=v14'} + + '@commitlint/load@17.8.1': + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} + engines: {node: '>=v14'} + + '@commitlint/message@17.8.1': + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} + engines: {node: '>=v14'} + + '@commitlint/parse@17.8.1': + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} + engines: {node: '>=v14'} + + '@commitlint/read@17.8.1': + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} + engines: {node: '>=v14'} + + '@commitlint/resolve-extends@17.8.1': + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} + engines: {node: '>=v14'} + + '@commitlint/rules@17.8.1': + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} + engines: {node: '>=v14'} + + '@commitlint/to-lines@17.8.1': + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} + engines: {node: '>=v14'} + + '@commitlint/top-level@17.8.1': + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} + engines: {node: '>=v14'} + + '@commitlint/types@17.8.1': + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} + engines: {node: '>=v14'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/css-parser-algorithms@2.7.1': + resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/css-tokenizer@2.4.1': + resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==} + engines: {node: ^14 || ^16 || >=18} + + '@csstools/media-query-list-parser@2.1.13': + resolution: {integrity: sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.7.1 + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.2': + resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@hutson/parse-repository-url@3.0.2': + resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} + engines: {node: '>=6.9.0'} + + '@iconify-json/ep@1.2.3': + resolution: {integrity: sha512-bESiKz5aTcbT4chTVSKjR5P+Nk81ibRtWgR7Gng5JPdF1Az+91+bIOof/OCUKThFRWqWsQ9A4XmSSrakvjuJDQ==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@rollup/plugin-babel@5.3.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 + + '@rollup/plugin-node-resolve@11.2.1': + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@transloadit/prettier-bytes@0.0.7': + resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/decimal.js@7.4.3': + resolution: {integrity: sha512-7MpxcJPHqQ637FCZwJLtJMaDZkcD/iyUxj0m8A+m06slFeqRiK9QtgEyuocWNRbEtCrOZOEbZPTSSR88hMZVsg==} + deprecated: This is a stub types definition. decimal.js provides its own type definitions, so you do not need this installed. + + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/event-emitter@0.3.5': + resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==} + + '@types/file-saver@2.0.7': + resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} + + '@types/js-md5@0.7.2': + resolution: {integrity: sha512-IwcFIov1JbiEToo3DgrVEwkMUR1BVlVyLjk245AzGHyyOlyddDFIeSIZO+WlhTortOa4P1PdCS8cDrTl7RW1HA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/node@20.5.1': + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + + '@types/node@24.5.0': + resolution: {integrity: sha512-y1dMvuvJspJiPSDZUQ+WMBvF7dpnEqN4x9DDC9ie5Fs/HUZJA3wFp7EhHoVaKX/iI0cRoECV8X2jL8zi0xrHCg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/nprogress@0.2.3': + resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@types/sortablejs@1.15.8': + resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + + '@types/svgo@2.6.4': + resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@uppy/companion-client@2.2.2': + resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==} + + '@uppy/core@2.3.4': + resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==} + + '@uppy/store-default@2.1.1': + resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==} + + '@uppy/utils@4.1.3': + resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==} + + '@uppy/xhr-upload@2.1.3': + resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==} + peerDependencies: + '@uppy/core': ^2.3.3 + + '@vitejs/plugin-vue-jsx@3.1.0': + resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@4.6.2': + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.2.25 + + '@volar/language-core@1.11.1': + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + + '@volar/source-map@1.11.1': + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + + '@volar/typescript@1.11.1': + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + + '@vue/babel-helper-vue-transform-on@1.5.0': + resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} + + '@vue/babel-plugin-jsx@1.5.0': + resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.5.0': + resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.21': + resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} + + '@vue/compiler-dom@3.5.21': + resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} + + '@vue/compiler-sfc@3.5.21': + resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} + + '@vue/compiler-ssr@3.5.21': + resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/language-core@1.8.27': + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.21': + resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} + + '@vue/runtime-core@3.5.21': + resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} + + '@vue/runtime-dom@3.5.21': + resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} + + '@vue/server-renderer@3.5.21': + resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} + peerDependencies: + vue: 3.5.21 + + '@vue/shared@3.5.21': + resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} + + '@vueuse/core@10.11.1': + resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@10.11.1': + resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@10.11.1': + resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + '@vxe-ui/core@4.2.12': + resolution: {integrity: sha512-g6gNDykKrKLzxsDDFDYTD/6tWrV9AfSaU7WIlKCO67BSXgKDMaEVTsH7ZZ7fI5qkOO9DH1vo07kbacyBNx7gSQ==} + peerDependencies: + vue: ^3.2.0 + + '@wangeditor/basic-modules@1.1.7': + resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/code-highlight@1.0.3': + resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/core@1.1.19': + resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==} + peerDependencies: + '@uppy/core': ^2.1.1 + '@uppy/xhr-upload': ^2.0.3 + dom7: ^3.0.0 + is-hotkey: ^0.2.0 + lodash.camelcase: ^4.3.0 + lodash.clonedeep: ^4.5.0 + lodash.debounce: ^4.0.8 + lodash.foreach: ^4.5.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + lodash.toarray: ^4.4.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/editor-for-vue@5.1.12': + resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==} + peerDependencies: + '@wangeditor/editor': '>=5.1.0' + vue: ^3.0.5 + + '@wangeditor/editor@5.1.23': + resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==} + + '@wangeditor/list-module@1.0.5': + resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/table-module@1.1.4': + resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/upload-image-module@1.0.2': + resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==} + peerDependencies: + '@uppy/core': ^2.0.3 + '@uppy/xhr-upload': ^2.0.3 + '@wangeditor/basic-modules': 1.x + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.foreach: ^4.5.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/video-module@1.1.4': + resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==} + peerDependencies: + '@uppy/core': ^2.1.4 + '@uppy/xhr-upload': ^2.0.7 + '@wangeditor/core': 1.x + dom7: ^3.0.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + add-stream@1.0.0: + resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} + + adler-32@1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + + arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + + arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + babel-plugin-polyfill-corejs2@0.4.14: + resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.5: + resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + + base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + + baseline-browser-mapping@2.8.4: + resolution: {integrity: sha512-L+YvJwGAgwJBV1p6ffpSTa2KRc69EeeYGYjRVWKs0GKrK+LON0GC0gV+rKSNtALEDvMDqkvCFq9r1r94/Gjwxw==} + hasBin: true + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.26.0: + resolution: {integrity: sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bwip-js@4.7.0: + resolution: {integrity: sha512-b7oQcgbWUl8rpcZayQ32SQrBCNteiZFuLkimKKBRlPwIHCeUN2VNeUE3HCMYShe04Evxd+ucS9uUAOsvNKjQbA==} + hasBin: true + + cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase-keys@7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001741: + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} + + cfb@1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + codepage@1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + + collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + conventional-changelog-angular@5.0.13: + resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + engines: {node: '>=10'} + + conventional-changelog-angular@6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + + conventional-changelog-atom@2.0.8: + resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} + engines: {node: '>=10'} + + conventional-changelog-codemirror@2.0.8: + resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} + engines: {node: '>=10'} + + conventional-changelog-config-spec@2.1.0: + resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} + + conventional-changelog-conventionalcommits@4.6.3: + resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} + engines: {node: '>=10'} + + conventional-changelog-conventionalcommits@6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + + conventional-changelog-core@4.2.4: + resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} + engines: {node: '>=10'} + + conventional-changelog-ember@2.0.9: + resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} + engines: {node: '>=10'} + + conventional-changelog-eslint@3.0.9: + resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} + engines: {node: '>=10'} + + conventional-changelog-express@2.0.6: + resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} + engines: {node: '>=10'} + + conventional-changelog-jquery@3.0.11: + resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} + engines: {node: '>=10'} + + conventional-changelog-jshint@2.0.9: + resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} + engines: {node: '>=10'} + + conventional-changelog-preset-loader@2.3.4: + resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} + engines: {node: '>=10'} + + conventional-changelog-writer@5.0.1: + resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} + engines: {node: '>=10'} + hasBin: true + + conventional-changelog@3.1.25: + resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==} + engines: {node: '>=10'} + + conventional-commits-filter@2.0.7: + resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} + engines: {node: '>=10'} + + conventional-commits-parser@3.2.4: + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} + engines: {node: '>=10'} + hasBin: true + + conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + + conventional-recommended-bump@6.1.0: + resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} + engines: {node: '>=10'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + + core-js-compat@3.45.1: + resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig-typescript-loader@4.4.0: + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=4' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-functions-list@3.2.3: + resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==} + engines: {node: '>=12 || >=16'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + 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} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + cz-git@1.12.0: + resolution: {integrity: sha512-LaZ+8whPPUOo6Y0Zy4nIbf6JOleV3ejp41sT6N4RPKiKKA+ICWf4ueeIlxIO8b6JtdlDxRzHH/EcRji07nDxcg==} + engines: {node: '>=v12.20.0'} + + czg@1.12.0: + resolution: {integrity: sha512-LGltcoZ5m7vhe3WNw16QXqd5WurnHegx9V15MwZJtFAU2AVCYLCqDbwxPUgZOnAcdzzooq33ONcU148HOQsjdA==} + engines: {node: '>=v12.20.0'} + hasBin: true + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + dateformat@3.0.3: + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + decimal@0.0.2: + resolution: {integrity: sha512-puX1+D5GlpXYH0kDejnu8F2jsGLKRePc7eOznNjqMbA2otl7AzvubrvvZVmOvRCHhsqeAPKNcAxHHbevsH/1qg==} + engines: {node: 0.4.x} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-passive-events@2.0.0: + resolution: {integrity: sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + + define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + + define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serializer@0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + dom-zindex@1.0.6: + resolution: {integrity: sha512-FKWIhiU96bi3xpP9ewRMgANsoVmMUBnMnmpCT6dPMZOunVYJQmJhSRruoI0XSPoHeIif3kyEuiHbFrOJwEJaEA==} + + dom7@3.0.0: + resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==} + + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv-expand@8.0.3: + resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotgitignore@2.1.0: + resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} + engines: {node: '>=6'} + + driver.js@0.9.8: + resolution: {integrity: sha512-bczjyKdX6XmFyCDkwtRmlaORDwfBk1xXmRO0CAe5VwNQTM98aWaG2LAIiIdTe53iV/B7W5lXlIy2xYtf0JRb7Q==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.218: + resolution: {integrity: sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==} + + element-plus@2.11.2: + resolution: {integrity: sha512-sTMDXtgeqy17TUsBSH/DL3h1/5sqIOVUUgXFoVbdD8lWWYssKrDX50CEYy4k29tYJhPHKZyFSwcLJsIajr+dDA==} + peerDependencies: + vue: ^3.2.0 + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@8.10.2: + resolution: {integrity: sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@4.2.5: + resolution: {integrity: sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.33.0: + resolution: {integrity: sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + 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} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + + extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-entry-cache@7.0.2: + resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} + engines: {node: '>=12.0.0'} + + file-saver@2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + frac@1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-pkg-repo@4.2.1: + resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} + engines: {node: '>=6.9.0'} + hasBin: true + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + + git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + + git-remote-origin-url@2.0.0: + resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==} + engines: {node: '>=4'} + + git-semver-tags@4.1.1: + resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} + engines: {node: '>=10'} + hasBin: true + + gitconfiglocal@1.0.0: + resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + + has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + + has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + + has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + + htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + + i18next@20.6.1: + resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + + immutable@5.1.3: + resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + 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'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + + is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hotkey@0.2.0: + resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-text-path@1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + js-base64@2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + js-md5@0.7.3: + resolution: {integrity: sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbarcode@3.12.1: + resolution: {integrity: sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsonpack@1.1.5: + resolution: {integrity: sha512-d2vwomK605ks7Q+uCpbwGyoIF5j+UZuJjlYcugISBt3CxM+eBo/W6y63yVPIyIvbYON+pvJYsYZjCYbzqJj/xQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + + kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + + kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + known-css-properties@0.29.0: + resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: 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 + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + lodash.ismatch@4.4.0: + resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.toarray@4.4.0: + resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + 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} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-options@1.0.1: + resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==} + engines: {node: '>=4'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@3.1.0: + resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==} + engines: {node: '>=0.10.0'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-match@1.0.2: + resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + + modify-values@1.0.1: + resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} + engines: {node: '>=0.10.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + + namespace-emitter@2.0.1: + resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + 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'} + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-html-parser@5.4.2: + resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} + + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@0.2.0: + resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pinia-plugin-persistedstate@3.2.3: + resolution: {integrity: sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==} + peerDependencies: + pinia: ^2.0.0 + + pinia@2.3.1: + resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-html@1.8.0: + resolution: {integrity: sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==} + engines: {node: ^12 || >=14} + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-prefix-selector@1.16.1: + resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==} + peerDependencies: + postcss: '>4 <9' + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-sorting@8.0.2: + resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} + peerDependencies: + postcss: ^8.4.20 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + posthtml-parser@0.2.1: + resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} + + posthtml-rename-id@1.0.12: + resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==} + + posthtml-render@1.4.0: + resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==} + engines: {node: '>=10'} + + posthtml-svg-mode@1.0.3: + resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==} + + posthtml@0.9.2: + resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==} + engines: {node: '>=0.10.0'} + + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + print-js@1.6.0: + resolution: {integrity: sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + query-string@4.3.4: + resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==} + engines: {node: '>=0.10.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + read-pkg-up@3.0.0: + resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} + engines: {node: '>=4'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg-up@8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-pkg@6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.3.1: + resolution: {integrity: sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + + resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: 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} + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-terser@7.0.2: + 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 + + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@3.29.5: + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + sass@1.92.1: + resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + scroll-into-view-if-needed@2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slate-history@0.66.0: + resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==} + peerDependencies: + slate: '>=0.65.3' + + slate@0.72.8: + resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + snabbdom@3.6.2: + resolution: {integrity: sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==} + engines: {node: '>=12.17.0'} + + snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + + snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + + snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + + sortablejs@1.14.0: + resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} + + sortablejs@1.15.6: + resolution: {integrity: sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + 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 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + + split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + ssf@0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + + ssr-window@3.0.0: + resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==} + + 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' + + standard-version@9.5.0: + resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==} + engines: {node: '>=10'} + hasBin: true + + static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + 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 + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.1.0: + resolution: {integrity: sha512-OA95x+JPmL7kc7zCu+e+TeYxEiaIyndRx0OrBcK2QPPH09oAndr2ALvymxWA+Lx1PYYvFUm4O63pRkdJAaW96w==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} + + style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + + stylelint-config-html@1.1.0: + resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recess-order@4.6.0: + resolution: {integrity: sha512-V76fhv3YtcNXh/hyAuAdSzi5FmcrG54Mp2AThJ3D/PTMTSYzUPd7GIhP6z9mTqnRhmkk6YTfcu/JWB8h+Yrcaw==} + peerDependencies: + stylelint: '>=15' + + stylelint-config-recommended-scss@11.0.0: + resolution: {integrity: sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-scss@12.0.0: + resolution: {integrity: sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended-vue@1.6.1: + resolution: {integrity: sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==} + engines: {node: ^12 || >=14} + peerDependencies: + postcss-html: ^1.0.0 + stylelint: '>=14.0.0' + + stylelint-config-recommended@12.0.0: + resolution: {integrity: sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==} + peerDependencies: + stylelint: ^15.5.0 + + stylelint-config-recommended@17.0.0: + resolution: {integrity: sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.23.0 + + stylelint-config-standard-scss@9.0.0: + resolution: {integrity: sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@33.0.0: + resolution: {integrity: sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg==} + peerDependencies: + stylelint: ^15.5.0 + + stylelint-order@6.0.4: + resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + + stylelint-scss@4.7.0: + resolution: {integrity: sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + + stylelint-scss@5.3.2: + resolution: {integrity: sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + + stylelint@15.11.0: + resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-baker@1.7.0: + resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} + engines: {node: '>=10'} + hasBin: true + + text-extensions@1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + + to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + traverse@0.6.11: + resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==} + engines: {node: '>= 0.4'} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + 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 + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray.prototype.slice@1.0.5: + resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==} + engines: {node: '>= 0.4'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + + unimport@3.14.6: + resolution: {integrity: sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==} + + union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-auto-import@0.16.7: + resolution: {integrity: sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-icons@0.16.6: + resolution: {integrity: sha512-jL70sAC7twp4hI/MTfm+vyvTRtHqiEIzf3XOjJz7yzhMEEQnk5Ey5YIXRAU03Mc4BF99ITvvnBzfyRZee86OeA==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + + unplugin-vue-components@0.25.2: + resolution: {integrity: sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin-vue-setup-extend-plus@1.0.1: + resolution: {integrity: sha512-mW2IzkyJITyspAV/LEdnEyE1CJip9jB5fCeaVv7Q6X0oJyDrOxXoB+jyet0q5pRJNjErbjQx950/8NPTvbqLTQ==} + + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} + + unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + + use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-eslint@1.8.1: + resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} + peerDependencies: + eslint: '>=7' + vite: '>=2' + + vite-plugin-html@3.2.2: + resolution: {integrity: sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-pwa@0.15.2: + resolution: {integrity: sha512-l1srtaad5NMNrAtAuub6ArTYG5Ci9AwofXXQ6IsbpCMYQ/0HUndwI7RB2x95+1UBFm7VGttQtT7woBlVnNhBRw==} + peerDependencies: + vite: ^3.1.0 || ^4.0.0 + workbox-build: ^6.5.4 + workbox-window: ^6.5.4 + + vite-plugin-svg-icons@2.0.1: + resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} + peerDependencies: + vite: '>=2.0.0' + + vite@4.5.14: + resolution: {integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==} + 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 + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-router@4.5.1: + resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==} + peerDependencies: + vue: ^3.2.0 + + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + vue-tsc@1.8.27: + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + + vue@3.5.21: + resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuedraggable@4.1.0: + resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} + peerDependencies: + vue: ^3.0.1 + + vxe-pc-ui@4.9.30: + resolution: {integrity: sha512-7PETgUnAVgQdBpDmYxEPllngKBnmWPwprnFBjTI61RVnTk/Zny54Bv9NmCmtou2xKddhzWuNFaPKzRkdIi35Bw==} + + vxe-table@4.16.12: + resolution: {integrity: sha512-h3l1RLaRKaglPuhZreqQVEATcc1ANWXxll27GJonDEthsYhCAwj6IENWqrSJ3ufzbNWkztCy8FwMUtf0aveJVg==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wildcard@1.1.2: + resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==} + + wmf@1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + word@0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} + + workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} + + workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} + engines: {node: '>=10.0.0'} + + workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 + + workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + + workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} + + workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained + + workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} + + workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} + + workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} + + workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} + + workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} + + workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} + + workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} + + workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} + + workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + xe-utils@3.7.9: + resolution: {integrity: sha512-LWH6M7g+TKX8P2fqGxDPgJQygiULhbMtpmfxTMxJTUjuUv9y2+I45UCcVLh5AnmJSxDV1xTxsq7G5P9Eid06JQ==} + + xlsx@0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@antfu/install-pkg@0.1.1': + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.3.0 + tinyexec: 1.0.1 + + '@antfu/utils@0.7.10': {} + + '@antfu/utils@8.1.1': {} + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.26.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.3.1 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.4 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.28.3': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.4 + esutils: 2.0.3 + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@commitlint/cli@17.8.1': + dependencies: + '@commitlint/format': 17.8.1 + '@commitlint/lint': 17.8.1 + '@commitlint/load': 17.8.1 + '@commitlint/read': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/config-conventional@17.8.1': + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + + '@commitlint/config-validator@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + ajv: 8.17.1 + + '@commitlint/ensure@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + 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 + + '@commitlint/execute-rule@17.8.1': {} + + '@commitlint/format@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + chalk: 4.1.2 + + '@commitlint/is-ignored@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + semver: 7.5.4 + + '@commitlint/lint@17.8.1': + dependencies: + '@commitlint/is-ignored': 17.8.1 + '@commitlint/parse': 17.8.1 + '@commitlint/rules': 17.8.1 + '@commitlint/types': 17.8.1 + + '@commitlint/load@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/execute-rule': 17.8.1 + '@commitlint/resolve-extends': 17.8.1 + '@commitlint/types': 17.8.1 + '@types/node': 20.5.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.9.2) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.2))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2))(typescript@5.9.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/message@17.8.1': {} + + '@commitlint/parse@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + + '@commitlint/read@17.8.1': + dependencies: + '@commitlint/top-level': 17.8.1 + '@commitlint/types': 17.8.1 + fs-extra: 11.3.2 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + + '@commitlint/resolve-extends@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/types': 17.8.1 + import-fresh: 3.3.1 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + + '@commitlint/rules@17.8.1': + dependencies: + '@commitlint/ensure': 17.8.1 + '@commitlint/message': 17.8.1 + '@commitlint/to-lines': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + + '@commitlint/to-lines@17.8.1': {} + + '@commitlint/top-level@17.8.1': + dependencies: + find-up: 5.0.0 + + '@commitlint/types@17.8.1': + dependencies: + chalk: 4.1.2 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/css-tokenizer@2.4.1': {} + + '@csstools/media-query-list-parser@2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.2)': + dependencies: + postcss-selector-parser: 6.1.2 + + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.21(typescript@5.9.2))': + dependencies: + vue: 3.5.21(typescript@5.9.2) + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@hutson/parse-repository-url@3.0.2': {} + + '@iconify-json/ep@1.2.3': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.8.0 + transitivePeerDependencies: + - supports-color + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + optional: true + + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.4)(rollup@2.79.2)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.10 + rollup: 2.79.2 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + magic-string: 0.25.9 + rollup: 2.79.2 + + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/pluginutils@5.3.0(rollup@2.79.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 2.79.2 + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.12 + + '@sxzz/popperjs-es@2.11.7': {} + + '@transloadit/prettier-bytes@0.0.7': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/decimal.js@7.4.3': + dependencies: + decimal.js: 10.6.0 + + '@types/eslint@8.56.12': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.8': {} + + '@types/event-emitter@0.3.5': {} + + '@types/file-saver@2.0.7': {} + + '@types/js-md5@0.7.2': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.20 + + '@types/lodash@4.17.20': {} + + '@types/minimist@1.2.5': {} + + '@types/node@20.5.1': {} + + '@types/node@24.5.0': + dependencies: + undici-types: 7.12.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/nprogress@0.2.3': {} + + '@types/qs@6.14.0': {} + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 24.5.0 + + '@types/semver@7.7.1': {} + + '@types/sortablejs@1.15.8': {} + + '@types/svgo@2.6.4': + dependencies: + '@types/node': 24.5.0 + + '@types/trusted-types@2.0.7': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) + debug: 4.4.3 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.7.2 + tsutils: 3.21.0(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + debug: 4.4.3 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.2) + debug: 4.4.3 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.3 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.2 + tsutils: 3.21.0(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.1 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.0': {} + + '@uppy/companion-client@2.2.2': + dependencies: + '@uppy/utils': 4.1.3 + namespace-emitter: 2.0.1 + + '@uppy/core@2.3.4': + dependencies: + '@transloadit/prettier-bytes': 0.0.7 + '@uppy/store-default': 2.1.1 + '@uppy/utils': 4.1.3 + lodash.throttle: 4.1.1 + mime-match: 1.0.2 + namespace-emitter: 2.0.1 + nanoid: 3.3.11 + preact: 10.27.2 + + '@uppy/store-default@2.1.1': {} + + '@uppy/utils@4.1.3': + dependencies: + lodash.throttle: 4.1.1 + + '@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4)': + dependencies: + '@uppy/companion-client': 2.2.2 + '@uppy/core': 2.3.4 + '@uppy/utils': 4.1.3 + nanoid: 3.3.11 + + '@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(vue@3.5.21(typescript@5.9.2))': + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + vue: 3.5.21(typescript@5.9.2) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@4.6.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(vue@3.5.21(typescript@5.9.2))': + dependencies: + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + vue: 3.5.21(typescript@5.9.2) + + '@volar/language-core@1.11.1': + dependencies: + '@volar/source-map': 1.11.1 + + '@volar/source-map@1.11.1': + dependencies: + muggle-string: 0.3.1 + + '@volar/typescript@1.11.1': + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + + '@vue/babel-helper-vue-transform-on@1.5.0': {} + + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.4)': + dependencies: + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.4) + '@vue/shared': 3.5.21 + optionalDependencies: + '@babel/core': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.4)': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/parser': 7.28.4 + '@vue/compiler-sfc': 3.5.21 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.21': + dependencies: + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.21': + dependencies: + '@vue/compiler-core': 3.5.21 + '@vue/shared': 3.5.21 + + '@vue/compiler-sfc@3.5.21': + dependencies: + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.21 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 + estree-walker: 2.0.2 + magic-string: 0.30.19 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.21': + dependencies: + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 + + '@vue/devtools-api@6.6.4': {} + + '@vue/language-core@1.8.27(typescript@5.9.2)': + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 5.9.2 + + '@vue/reactivity@3.5.21': + dependencies: + '@vue/shared': 3.5.21 + + '@vue/runtime-core@3.5.21': + dependencies: + '@vue/reactivity': 3.5.21 + '@vue/shared': 3.5.21 + + '@vue/runtime-dom@3.5.21': + dependencies: + '@vue/reactivity': 3.5.21 + '@vue/runtime-core': 3.5.21 + '@vue/shared': 3.5.21 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2))': + dependencies: + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 + vue: 3.5.21(typescript@5.9.2) + + '@vue/shared@3.5.21': {} + + '@vueuse/core@10.11.1(vue@3.5.21(typescript@5.9.2))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.1 + '@vueuse/shared': 10.11.1(vue@3.5.21(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@9.13.0(vue@3.5.21(typescript@5.9.2))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.21(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.1': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@10.11.1(vue@3.5.21(typescript@5.9.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@9.13.0(vue@3.5.21(typescript@5.9.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vxe-ui/core@4.2.12(vue@3.5.21(typescript@5.9.2))': + dependencies: + dom-zindex: 1.0.6 + vue: 3.5.21(typescript@5.9.2) + xe-utils: 3.7.9 + + '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-url: 1.2.4 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + prismjs: 1.30.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@types/event-emitter': 0.3.5 + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + dom7: 3.0.0 + event-emitter: 0.3.5 + html-void-elements: 2.0.1 + i18next: 20.6.1 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + scroll-into-view-if-needed: 2.2.31 + slate: 0.72.8 + slate-history: 0.66.0(slate@0.72.8) + snabbdom: 3.6.2 + + '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.21(typescript@5.9.2))': + dependencies: + '@wangeditor/editor': 5.1.23 + vue: 3.5.21(typescript@5.9.2) + + '@wangeditor/editor@5.1.23': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + lodash.foreach: 4.5.0 + slate: 0.72.8 + snabbdom: 3.6.2 + + '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.2) + dom7: 3.0.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.2 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + add-stream@1.0.0: {} + + adler-32@1.3.1: {} + + ajv@6.12.6: + 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 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@2.2.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + arr-diff@4.0.0: {} + + arr-flatten@1.1.0: {} + + arr-union@3.1.0: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-ify@1.0.0: {} + + array-union@2.1.0: {} + + array-unique@0.3.2: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arrify@1.0.1: {} + + assign-symbols@1.0.0: {} + + astral-regex@2.0.0: {} + + async-function@1.0.0: {} + + async-validator@4.2.5: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + atob@2.1.2: {} + + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.26.0 + caniuse-lite: 1.0.30001741 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4): + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + core-js-compat: 3.45.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + base@0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + + baseline-browser-mapping@2.8.4: {} + + big.js@5.2.2: {} + + binary-extensions@2.3.0: {} + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@2.3.2: + 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 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.26.0: + dependencies: + baseline-browser-mapping: 2.8.4 + caniuse-lite: 1.0.30001741 + electron-to-chromium: 1.5.218 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.0) + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + bwip-js@4.7.0: {} + + cache-base@1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + 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 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase-keys@6.2.2: + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + camelcase-keys@7.0.2: + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001741: {} + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chalk@1.1.3: + 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 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + class-utils@0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@2.1.2: {} + + codepage@1.15.0: {} + + collection-visit@1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.0.0: {} + + commander@2.20.3: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-tags@1.8.2: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + component-emitter@1.3.1: {} + + compute-scroll-into-view@1.0.20: {} + + computeds@0.0.1: {} + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + connect-history-api-fallback@1.6.0: {} + + consola@2.15.3: {} + + conventional-changelog-angular@5.0.13: + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + + conventional-changelog-angular@6.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-atom@2.0.8: + dependencies: + q: 1.5.1 + + conventional-changelog-codemirror@2.0.8: + dependencies: + q: 1.5.1 + + conventional-changelog-config-spec@2.1.0: {} + + conventional-changelog-conventionalcommits@4.6.3: + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + + conventional-changelog-conventionalcommits@6.1.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-core@4.2.4: + 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 + + conventional-changelog-ember@2.0.9: + dependencies: + q: 1.5.1 + + conventional-changelog-eslint@3.0.9: + dependencies: + q: 1.5.1 + + conventional-changelog-express@2.0.6: + dependencies: + q: 1.5.1 + + conventional-changelog-jquery@3.0.11: + dependencies: + q: 1.5.1 + + conventional-changelog-jshint@2.0.9: + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + + conventional-changelog-preset-loader@2.3.4: {} + + conventional-changelog-writer@5.0.1: + dependencies: + conventional-commits-filter: 2.0.7 + dateformat: 3.0.3 + handlebars: 4.7.8 + json-stringify-safe: 5.0.1 + lodash: 4.17.21 + meow: 8.1.2 + semver: 6.3.1 + split: 1.0.1 + through2: 4.0.2 + + conventional-changelog@3.1.25: + 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 + + conventional-commits-filter@2.0.7: + dependencies: + lodash.ismatch: 4.4.0 + modify-values: 1.0.1 + + conventional-commits-parser@3.2.4: + 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 + + conventional-commits-parser@4.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + + conventional-recommended-bump@6.1.0: + 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 + + convert-source-map@2.0.0: {} + + copy-descriptor@0.1.1: {} + + core-js-compat@3.45.1: + dependencies: + browserslist: 4.26.0 + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.9.2))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2))(typescript@5.9.2): + dependencies: + '@types/node': 20.5.1 + cosmiconfig: 8.3.6(typescript@5.9.2) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.2) + typescript: 5.9.2 + + cosmiconfig@8.3.6(typescript@5.9.2): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.2 + + crc-32@1.2.2: {} + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-random-string@2.0.0: {} + + css-functions-list@3.2.3: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csstype@3.1.3: {} + + cz-git@1.12.0: {} + + czg@1.12.0: {} + + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + dargs@7.0.0: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + dateformat@3.0.3: {} + + dayjs@1.11.18: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decamelize-keys@1.1.1: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + + decamelize@1.2.0: {} + + decamelize@5.0.1: {} + + decimal.js@10.6.0: {} + + decimal@0.0.2: {} + + decode-uri-component@0.2.2: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-passive-events@2.0.0: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + define-property@0.2.5: + dependencies: + is-descriptor: 0.1.7 + + define-property@1.0.0: + dependencies: + is-descriptor: 1.0.3 + + define-property@2.0.2: + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + + delayed-stream@1.0.0: {} + + detect-indent@6.1.0: {} + + detect-libc@1.0.3: + optional: true + + detect-newline@3.1.0: {} + + diff@4.0.2: {} + + dijkstrajs@1.0.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@0.2.2: + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + dom-zindex@1.0.6: {} + + dom7@3.0.0: + dependencies: + ssr-window: 3.0.0 + + domelementtype@1.3.1: {} + + domelementtype@2.3.0: {} + + domhandler@2.4.2: + dependencies: + domelementtype: 1.3.1 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv-expand@8.0.3: {} + + dotenv@16.6.1: {} + + dotgitignore@2.1.0: + dependencies: + find-up: 3.0.0 + minimatch: 3.1.2 + + driver.js@0.9.8: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + + electron-to-chromium@1.5.218: {} + + element-plus@2.11.2(vue@3.5.21(typescript@5.9.2)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.2(vue@3.5.21(typescript@5.9.2)) + '@floating-ui/dom': 1.7.4 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.20 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.21(typescript@5.9.2)) + async-validator: 4.2.5 + dayjs: 1.11.18 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.21(typescript@5.9.2) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + emojis-list@3.0.0: {} + + entities@1.1.2: {} + + entities@2.2.0: {} + + entities@4.5.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@8.10.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-prettier@4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8): + dependencies: + eslint: 8.57.1 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + optionalDependencies: + eslint-config-prettier: 8.10.2(eslint@8.57.1) + + eslint-plugin-vue@9.33.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + eslint: 8.57.1 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.2 + vue-eslint-parser: 9.4.3(eslint@8.57.1) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + 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.6.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.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + 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 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + expand-brackets@2.1.4: + 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 + + exsolve@1.0.7: {} + + ext@1.7.0: + dependencies: + type: 2.7.3 + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend-shallow@3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + + extglob@2.0.4: + 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 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + 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.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.0: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-entry-cache@7.0.2: + dependencies: + flat-cache: 3.2.0 + + file-saver@2.0.5: {} + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + for-in@1.0.2: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + frac@1.1.2: {} + + fraction.js@4.3.7: {} + + fragment-cache@0.2.1: + dependencies: + map-cache: 0.2.2 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-pkg-repo@4.2.1: + dependencies: + '@hutson/parse-repository-url': 3.0.2 + hosted-git-info: 4.1.0 + through2: 2.0.5 + yargs: 16.2.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-value@2.0.6: {} + + git-raw-commits@2.0.11: + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + + git-remote-origin-url@2.0.0: + dependencies: + gitconfiglocal: 1.0.0 + pify: 2.3.0 + + git-semver-tags@4.1.1: + dependencies: + meow: 8.1.2 + semver: 6.3.1 + + gitconfiglocal@1.0.0: + dependencies: + ini: 1.3.8 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + 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 + + global-dirs@0.1.1: + dependencies: + ini: 1.3.8 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@15.15.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globjoin@0.1.4: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + hard-rejection@2.1.0: {} + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@1.0.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-value@0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + + has-value@1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + + has-values@0.1.4: {} + + has-values@1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hosted-git-info@2.8.9: {} + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + html-minifier-terser@6.1.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.44.0 + + html-tags@3.3.1: {} + + html-void-elements@2.0.1: {} + + htmlparser2@3.10.1: + 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 + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + husky@8.0.3: {} + + i18next@20.6.1: + dependencies: + '@babel/runtime': 7.28.4 + + idb@7.1.1: {} + + ignore@5.3.2: {} + + image-size@0.5.5: {} + + immer@9.0.21: {} + + immutable@5.1.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-lazy@4.0.0: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + indent-string@5.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-accessor-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-descriptor@1.0.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-descriptor@0.1.7: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-descriptor@1.0.3: + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + + is-docker@2.2.1: {} + + is-extendable@0.1.1: {} + + is-extendable@1.0.1: + dependencies: + is-plain-object: 2.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hotkey@0.2.0: {} + + is-map@2.0.3: {} + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@3.0.0: + dependencies: + kind-of: 3.2.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@1.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-plain-object@5.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-regexp@1.0.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-text-path@1.0.1: + dependencies: + text-extensions: 1.9.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-url@1.2.4: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@2.1.0: + dependencies: + isarray: 1.0.0 + + isobject@3.0.1: {} + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + + jest-worker@26.6.2: + dependencies: + '@types/node': 24.5.0 + merge-stream: 2.0.0 + supports-color: 7.2.0 + + js-base64@2.6.4: {} + + js-md5@0.7.3: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbarcode@3.12.1: {} + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpack@1.1.5: {} + + jsonparse@1.3.1: {} + + jsonpointer@5.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@3.2.2: + dependencies: + is-buffer: 1.1.6 + + kind-of@4.0.0: + dependencies: + is-buffer: 1.1.6 + + kind-of@5.1.0: {} + + kind-of@6.0.3: {} + + known-css-properties@0.29.0: {} + + kolorist@1.8.0: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lines-and-columns@1.2.4: {} + + lint-staged@13.3.0: + 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 + + listr2@6.6.1: + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.4.1 + wrap-ansi: 8.1.0 + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + loader-utils@1.4.2: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + local-pkg@0.4.3: {} + + local-pkg@0.5.1: + dependencies: + mlly: 1.8.0 + pkg-types: 1.3.1 + + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.debounce@4.0.8: {} + + lodash.foreach@4.5.0: {} + + lodash.isequal@4.5.0: {} + + lodash.isfunction@3.0.9: {} + + lodash.ismatch@4.4.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.sortby@4.7.0: {} + + lodash.startcase@4.4.0: {} + + lodash.throttle@4.1.1: {} + + lodash.toarray@4.4.0: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-update@5.0.1: + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.2 + wrap-ansi: 8.1.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.26.7: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-error@1.3.6: {} + + map-cache@0.2.2: {} + + map-obj@1.0.1: {} + + map-obj@4.3.0: {} + + map-visit@1.0.0: + dependencies: + object-visit: 1.0.1 + + math-intrinsics@1.1.0: {} + + mathml-tag-names@2.1.3: {} + + mdn-data@2.0.14: {} + + mdn-data@2.0.30: {} + + memoize-one@6.0.0: {} + + meow@10.1.5: + dependencies: + '@types/minimist': 1.2.5 + 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 + + meow@8.1.2: + dependencies: + '@types/minimist': 1.2.5 + 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 + + merge-options@1.0.1: + dependencies: + is-plain-obj: 1.1.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@3.1.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 + + micromatch@4.0.5: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-match@1.0.2: + dependencies: + wildcard: 1.1.2 + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist-options@4.1.0: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + + minimist@1.2.8: {} + + mitt@3.0.1: {} + + mixin-deep@1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + modify-values@1.0.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + muggle-string@0.3.1: {} + + namespace-emitter@2.0.1: {} + + nanoid@3.3.11: {} + + nanomatch@1.2.13: + 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 + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + next-tick@1.1.0: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-addon-api@7.1.1: + optional: true + + node-html-parser@5.4.2: + dependencies: + css-select: 4.3.0 + he: 1.2.0 + + node-releases@2.0.21: {} + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@3.0.3: + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.16.1 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-assign@4.1.1: {} + + object-copy@0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object-visit@1.0.1: + dependencies: + isobject: 3.0.1 + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.pick@1.3.0: + dependencies: + isobject: 3.0.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@1.0.0: {} + + p-try@2.2.0: {} + + package-manager-detector@1.3.0: {} + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.4 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + pascalcase@0.1.1: {} + + path-browserify@1.0.1: {} + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-type@3.0.0: + dependencies: + pify: 3.0.0 + + path-type@4.0.0: {} + + pathe@0.2.0: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pify@3.0.0: {} + + pinia-plugin-persistedstate@3.2.3(pinia@2.3.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2))): + dependencies: + pinia: 2.3.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)) + + pinia@2.3.1(typescript@5.9.2)(vue@3.5.21(typescript@5.9.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.21(typescript@5.9.2) + vue-demi: 0.14.10(vue@3.5.21(typescript@5.9.2)) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - '@vue/composition-api' + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + pngjs@5.0.0: {} + + posix-character-classes@0.1.1: {} + + possible-typed-array-names@1.1.0: {} + + postcss-html@1.8.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.1 + postcss: 8.5.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) + + postcss-media-query-parser@0.2.3: {} + + postcss-prefix-selector@1.16.1(postcss@5.2.18): + dependencies: + postcss: 5.2.18 + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@6.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-sorting@8.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-value-parser@4.2.0: {} + + postcss@5.2.18: + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthtml-parser@0.2.1: + dependencies: + htmlparser2: 3.10.1 + isobject: 2.1.0 + + posthtml-rename-id@1.0.12: + dependencies: + escape-string-regexp: 1.0.5 + + posthtml-render@1.4.0: {} + + posthtml-svg-mode@1.0.3: + dependencies: + merge-options: 1.0.1 + posthtml: 0.9.2 + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + posthtml@0.9.2: + dependencies: + posthtml-parser: 0.2.1 + posthtml-render: 1.4.0 + + preact@10.27.2: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@2.8.8: {} + + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + + print-js@1.6.0: {} + + prismjs@1.30.0: {} + + process-nextick-args@2.0.1: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + q@1.5.1: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.11: {} + + query-string@4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-lru@4.0.1: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + read-pkg-up@3.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 3.0.0 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg-up@8.0.0: + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + read-pkg@6.0.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + + readable-stream@2.3.8: + 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 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redent@4.0.0: + dependencies: + indent-string: 5.0.0 + strip-indent: 4.1.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regex-not@1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.3.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + relateurl@0.2.7: {} + + repeat-element@1.1.4: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-main-filename@2.0.0: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-global@1.0.0: + dependencies: + global-dirs: 0.1.1 + + resolve-url@0.2.1: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + ret@0.1.15: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup-plugin-terser@7.0.2(rollup@2.79.2): + dependencies: + '@babel/code-frame': 7.27.1 + jest-worker: 26.6.2 + rollup: 2.79.2 + serialize-javascript: 4.0.0 + terser: 5.44.0 + + rollup-plugin-visualizer@5.14.0(rollup@2.79.2): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 2.79.2 + + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + + rollup@3.29.5: + optionalDependencies: + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + sass@1.92.1: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + scroll-into-view-if-needed@2.2.31: + dependencies: + compute-scroll-into-view: 1.0.20 + + scule@1.3.0: {} + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + set-value@2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + slate-history@0.66.0(slate@0.72.8): + dependencies: + is-plain-object: 5.0.0 + slate: 0.72.8 + + slate@0.72.8: + dependencies: + immer: 9.0.21 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + snabbdom@3.6.2: {} + + snapdragon-node@2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + + snapdragon-util@3.0.1: + dependencies: + kind-of: 3.2.2 + + snapdragon@0.8.2: + 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 + + sortablejs@1.14.0: {} + + sortablejs@1.15.6: {} + + source-map-js@1.2.1: {} + + source-map-resolve@0.5.3: + 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 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-url@0.4.1: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + + split-string@3.1.0: + dependencies: + extend-shallow: 3.0.2 + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + split@1.0.1: + dependencies: + through: 2.3.8 + + ssf@0.11.2: + dependencies: + frac: 1.1.2 + + ssr-window@3.0.0: {} + + stable@0.1.8: {} + + standard-version@9.5.0: + 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.7.2 + stringify-package: 1.0.1 + yargs: 16.2.0 + + static-extend@0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + strict-uri-encode@1.1.0: {} + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + stringify-package@1.0.1: {} + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@3.0.0: {} + + strip-comments@2.0.1: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.1.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@2.1.1: + dependencies: + js-tokens: 9.0.1 + + style-search@0.1.0: {} + + stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss-html: 1.8.0 + stylelint: 15.11.0(typescript@5.9.2) + + stylelint-config-recess-order@4.6.0(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + stylelint: 15.11.0(typescript@5.9.2) + stylelint-order: 6.0.4(stylelint@15.11.0(typescript@5.9.2)) + + stylelint-config-recommended-scss@11.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.6) + stylelint: 15.11.0(typescript@5.9.2) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.9.2)) + stylelint-scss: 4.7.0(stylelint@15.11.0(typescript@5.9.2)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-recommended-scss@12.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.6) + stylelint: 15.11.0(typescript@5.9.2) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.9.2)) + stylelint-scss: 5.3.2(stylelint@15.11.0(typescript@5.9.2)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss-html: 1.8.0 + semver: 7.7.2 + stylelint: 15.11.0(typescript@5.9.2) + stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-recommended: 17.0.0(stylelint@15.11.0(typescript@5.9.2)) + + stylelint-config-recommended@12.0.0(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + stylelint: 15.11.0(typescript@5.9.2) + + stylelint-config-recommended@17.0.0(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + stylelint: 15.11.0(typescript@5.9.2) + + stylelint-config-standard-scss@9.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + stylelint: 15.11.0(typescript@5.9.2) + stylelint-config-recommended-scss: 11.0.0(postcss@8.5.6)(stylelint@15.11.0(typescript@5.9.2)) + stylelint-config-standard: 33.0.0(stylelint@15.11.0(typescript@5.9.2)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-standard@33.0.0(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + stylelint: 15.11.0(typescript@5.9.2) + stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.9.2)) + + stylelint-order@6.0.4(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss: 8.5.6 + postcss-sorting: 8.0.2(postcss@8.5.6) + stylelint: 15.11.0(typescript@5.9.2) + + stylelint-scss@4.7.0(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + stylelint: 15.11.0(typescript@5.9.2) + + stylelint-scss@5.3.2(stylelint@15.11.0(typescript@5.9.2)): + dependencies: + known-css-properties: 0.29.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + stylelint: 15.11.0(typescript@5.9.2) + + stylelint@15.11.0(typescript@5.9.2): + dependencies: + '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) + '@csstools/css-tokenizer': 2.4.1 + '@csstools/media-query-list-parser': 2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 8.3.6(typescript@5.9.2) + css-functions-list: 3.2.3 + css-tree: 2.3.1 + debug: 4.4.3 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 7.0.2 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.2 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.29.0 + mathml-tag-names: 2.1.3 + meow: 10.1.5 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + 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.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + supports-color@2.0.0: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-baker@1.7.0: + 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.1(postcss@5.2.18) + posthtml-rename-id: 1.0.12 + posthtml-svg-mode: 1.0.3 + query-string: 4.3.4 + traverse: 0.6.11 + transitivePeerDependencies: + - supports-color + + svg-tags@1.0.0: {} + + svgo@2.8.0: + 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.1.1 + stable: 0.1.8 + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terser@5.44.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-extensions@1.9.0: {} + + text-table@0.2.0: {} + + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + + through@2.3.8: {} + + tiny-warning@1.0.3: {} + + tinyexec@1.0.1: {} + + to-object-path@0.3.0: + dependencies: + kind-of: 3.2.2 + + to-regex-range@2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-regex@3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + traverse@0.6.11: + dependencies: + gopd: 1.2.0 + typedarray.prototype.slice: 1.0.5 + which-typed-array: 1.1.19 + + trim-newlines@3.0.1: {} + + trim-newlines@4.1.1: {} + + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.5.1 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsutils@3.21.0(typescript@5.9.2): + dependencies: + tslib: 1.14.1 + typescript: 5.9.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.16.0: {} + + type-fest@0.18.1: {} + + type-fest@0.20.2: {} + + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + type-fest@1.4.0: {} + + type@2.7.3: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray.prototype.slice@1.0.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-proto: 1.0.1 + math-intrinsics: 1.1.0 + typed-array-buffer: 1.0.3 + typed-array-byte-offset: 1.0.4 + + typedarray@0.0.6: {} + + typescript@5.9.2: {} + + ufo@1.6.1: {} + + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@7.12.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + + unimport@3.14.6(rollup@2.79.2): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.3 + local-pkg: 1.1.2 + magic-string: 0.30.19 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 1.3.1 + scule: 1.3.0 + strip-literal: 2.1.1 + unplugin: 1.16.1 + transitivePeerDependencies: + - rollup + + union-value@1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@2.0.1: {} + + unplugin-auto-import@0.16.7(@vueuse/core@10.11.1(vue@3.5.21(typescript@5.9.2)))(rollup@2.79.2): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + fast-glob: 3.3.3 + local-pkg: 0.5.1 + magic-string: 0.30.19 + minimatch: 9.0.5 + unimport: 3.14.6(rollup@2.79.2) + unplugin: 1.16.1 + optionalDependencies: + '@vueuse/core': 10.11.1(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - rollup + + unplugin-icons@0.16.6(@vue/compiler-sfc@3.5.21)(vue-template-compiler@2.7.16): + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.10 + '@iconify/utils': 2.3.0 + debug: 4.4.3 + kolorist: 1.8.0 + local-pkg: 0.4.3 + unplugin: 1.16.1 + optionalDependencies: + '@vue/compiler-sfc': 3.5.21 + vue-template-compiler: 2.7.16 + transitivePeerDependencies: + - supports-color + + unplugin-vue-components@0.25.2(@babel/parser@7.28.4)(rollup@2.79.2)(vue@3.5.21(typescript@5.9.2)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.3.0(rollup@2.79.2) + chokidar: 3.6.0 + debug: 4.4.3 + fast-glob: 3.3.3 + local-pkg: 0.4.3 + magic-string: 0.30.19 + minimatch: 9.0.5 + resolve: 1.22.10 + unplugin: 1.16.1 + vue: 3.5.21(typescript@5.9.2) + optionalDependencies: + '@babel/parser': 7.28.4 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin-vue-setup-extend-plus@1.0.1: + dependencies: + '@vue/compiler-sfc': 3.5.21 + magic-string: 0.26.7 + unplugin: 1.16.1 + + unplugin@1.16.1: + dependencies: + acorn: 8.15.0 + webpack-virtual-modules: 0.6.2 + + unset-value@1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + + upath@1.2.0: {} + + update-browserslist-db@1.1.3(browserslist@4.26.0): + dependencies: + browserslist: 4.26.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + urix@0.1.0: {} + + use@3.1.1: {} + + util-deprecate@1.0.2: {} + + v8-compile-cache-lib@3.0.1: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vary@1.1.2: {} + + vite-plugin-compression@0.5.1(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)): + dependencies: + chalk: 4.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)): + dependencies: + '@rollup/pluginutils': 4.2.1 + '@types/eslint': 8.56.12 + eslint: 8.57.1 + rollup: 2.79.2 + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + + vite-plugin-html@3.2.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)): + dependencies: + '@rollup/pluginutils': 4.2.1 + colorette: 2.0.20 + connect-history-api-fallback: 1.6.0 + consola: 2.15.3 + dotenv: 16.6.1 + dotenv-expand: 8.0.3 + ejs: 3.1.10 + fast-glob: 3.3.3 + fs-extra: 10.1.0 + html-minifier-terser: 6.1.0 + node-html-parser: 5.4.2 + pathe: 0.2.0 + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + + vite-plugin-pwa@0.15.2(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0))(workbox-build@6.6.0)(workbox-window@6.6.0): + dependencies: + debug: 4.4.3 + fast-glob: 3.3.3 + pretty-bytes: 6.1.1 + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + workbox-build: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - supports-color + + vite-plugin-svg-icons@2.0.1(vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0)): + dependencies: + '@types/svgo': 2.6.4 + cors: 2.8.5 + debug: 4.4.3 + etag: 1.8.1 + fs-extra: 10.1.0 + pathe: 0.2.0 + svg-baker: 1.7.0 + svgo: 2.8.0 + vite: 4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0) + transitivePeerDependencies: + - supports-color + + vite@4.5.14(@types/node@20.5.1)(sass@1.92.1)(terser@5.44.0): + dependencies: + esbuild: 0.18.20 + postcss: 8.5.6 + rollup: 3.29.5 + optionalDependencies: + '@types/node': 20.5.1 + fsevents: 2.3.3 + sass: 1.92.1 + terser: 5.44.0 + + vue-demi@0.14.10(vue@3.5.21(typescript@5.9.2)): + dependencies: + vue: 3.5.21(typescript@5.9.2) + + vue-eslint-parser@9.4.3(eslint@8.57.1): + dependencies: + debug: 4.4.3 + eslint: 8.57.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + vue-router@4.5.1(vue@3.5.21(typescript@5.9.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.21(typescript@5.9.2) + + vue-template-compiler@2.7.16: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tsc@1.8.27(typescript@5.9.2): + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.9.2) + semver: 7.7.2 + typescript: 5.9.2 + + vue@3.5.21(typescript@5.9.2): + dependencies: + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-sfc': 3.5.21 + '@vue/runtime-dom': 3.5.21 + '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.9.2)) + '@vue/shared': 3.5.21 + optionalDependencies: + typescript: 5.9.2 + + vuedraggable@4.1.0(vue@3.5.21(typescript@5.9.2)): + dependencies: + sortablejs: 1.14.0 + vue: 3.5.21(typescript@5.9.2) + + vxe-pc-ui@4.9.30(vue@3.5.21(typescript@5.9.2)): + dependencies: + '@vxe-ui/core': 4.2.12(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - vue + + vxe-table@4.16.12(vue@3.5.21(typescript@5.9.2)): + dependencies: + vxe-pc-ui: 4.9.30(vue@3.5.21(typescript@5.9.2)) + transitivePeerDependencies: + - vue + + webidl-conversions@4.0.2: {} + + webpack-virtual-modules@0.6.2: {} + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-module@2.0.1: {} + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard@1.1.2: {} + + wmf@1.0.2: {} + + word-wrap@1.2.5: {} + + word@0.3.0: {} + + wordwrap@1.0.0: {} + + workbox-background-sync@6.6.0: + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + + workbox-broadcast-update@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-build@6.6.0: + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.28.4 + '@babel/preset-env': 7.28.3(@babel/core@7.28.4) + '@babel/runtime': 7.28.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.4)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.17.1 + 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.2 + rollup-plugin-terser: 7.0.2(rollup@2.79.2) + 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: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-core@6.6.0: {} + + workbox-expiration@6.6.0: + dependencies: + idb: 7.1.1 + workbox-core: 6.6.0 + + workbox-google-analytics@6.6.0: + dependencies: + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-navigation-preload@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-precaching@6.6.0: + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-range-requests@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-recipes@6.6.0: + dependencies: + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + + workbox-routing@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-strategies@6.6.0: + dependencies: + workbox-core: 6.6.0 + + workbox-streams@6.6.0: + dependencies: + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + + workbox-sw@6.6.0: {} + + workbox-window@6.6.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 6.6.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + xe-utils@3.7.9: {} + + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + + xml-name-validator@4.0.0: {} + + xtend@4.0.2: {} + + y18n@4.0.3: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.3.1: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + 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 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + 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 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..5bfb8f6 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +}; diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..9b62435 Binary files /dev/null and b/public/logo.png differ 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..08f9635 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/api/config/servicePort.ts b/src/api/config/servicePort.ts new file mode 100644 index 0000000..f8df42d --- /dev/null +++ b/src/api/config/servicePort.ts @@ -0,0 +1,3 @@ +// 后端微服务模块前缀 +export const PORT1 = "/api"; +export const PORT2 = "/hooks"; 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..2e69910 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,125 @@ +import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosResponse } from "axios"; +//endLoading +import { showFullScreenLoading, tryHideFullScreenLoading } from "@/config/serviceLoading"; +import { usePathUrl } from "@/hooks/usePathUrl"; +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"; + +//loading控制 +export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig { + noLoading?: boolean; +} + +//计步器 +// let setUp: number = 0; +const config = { + // 默认地址请求地址,可在 .env.** 文件中修改 + baseURL: (import.meta.env.VITE_APP_API_BASEURL + import.meta.env.VITE_APP_API_VERSION) 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("authorization", `${"Bearer" + " " + userStore.newUserToken}`); + } + + 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 == 401) { + ElMessage.error(data.msg || data.message); + // getUcOffline(); + location.href = usePathUrl(); + return Promise.reject(data); + } + if (data.code === 504) { + ElMessage.error("请求超时!请您稍后重试"); + } + //0正常,1非正常 + if (data.code == 1) { + ElMessage.error(data.msg); + } + + // 成功请求(在页面上除非特殊情况,否则不用处理失败逻辑) + 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 (response.status === 401) { + location.href = usePathUrl(); + } + } + // 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面 + 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/global.ts b/src/api/interface/global.ts new file mode 100644 index 0000000..83617f3 --- /dev/null +++ b/src/api/interface/global.ts @@ -0,0 +1,19 @@ +// 全局模块 +export namespace Global { + //供应链 + export interface ResSupplier { + id: number; + code: string; + name: string; + disable: boolean; + } + + //用户 + export interface ResUserList { + id: number; + code: null; + name: string; + number: number; + disable: boolean; + } +} diff --git a/src/api/interface/index.ts b/src/api/interface/index.ts new file mode 100644 index 0000000..c78f251 --- /dev/null +++ b/src/api/interface/index.ts @@ -0,0 +1,7 @@ +import { Global } from "./global"; +import { User } from "./user"; +import { Login } from "./login"; +import { Result, ResultData } from "./result"; +import { ResPage, ReqPage } from "./page"; +import { Upload } from "./upload"; +export type { Global, User, Login, ResultData, Result, ResPage, ReqPage, Upload }; diff --git a/src/api/interface/login.ts b/src/api/interface/login.ts new file mode 100644 index 0000000..2f6e360 --- /dev/null +++ b/src/api/interface/login.ts @@ -0,0 +1,61 @@ +// 登录模块 +export interface Dept { + id: number; + deptCode: string; + deptName: string; + managerId: null; +} + +export namespace Login { + //登录要传的参数 + export interface ReqLoginCode { + code: string; + } + //登录返回的参数 + interface Dept { + id: number; + deptCode: string; + deptName: string; + managerId: null; + } + export interface ResLogin { + isSuccess: boolean; + message: string; + status: number; + data: { + accessToken: { + token: string; + phpToken: string; + tokenType: string; + refreshToken: string; + expired: string; + }; + signedIn: boolean; + userInfo: { + seesionId: string; + ucId: number; + depts: Dept[]; + staffId: number; + staff_code: string; + business_code: null; + avatar: null; + closed: number; + createdAt: string; + email: null; + mobile: string; + nickname: string; + roleId: string; + signinAt: string; + updatedAt: string; + companyId: number; + companyName: string; + orgId: number; + supplierId: null; + supplierName: null; + customerId: null; + customerName: null; + identity: number; + }; + }; + } +} diff --git a/src/api/interface/page.ts b/src/api/interface/page.ts new file mode 100644 index 0000000..72f1d8e --- /dev/null +++ b/src/api/interface/page.ts @@ -0,0 +1,15 @@ +//分页 +import { Result } from "./result"; +// 分页响应参数 +export interface ResPage extends Result { + data: { + list: T[]; + total: number; + }; +} + +// 分页请求参数 +export interface ReqPage { + pageNum: number; + size: number; +} diff --git a/src/api/interface/result.ts b/src/api/interface/result.ts new file mode 100644 index 0000000..644f9d7 --- /dev/null +++ b/src/api/interface/result.ts @@ -0,0 +1,12 @@ +// 请求响应参数(不包含data) +export interface Result { + isSuccess: boolean; + message: string; + status: number; +} + +// 请求响应参数(包含data) +export interface ResultData extends Result { + [x: string]: any; + data: T; +} diff --git a/src/api/interface/upload.ts b/src/api/interface/upload.ts new file mode 100644 index 0000000..05e7b05 --- /dev/null +++ b/src/api/interface/upload.ts @@ -0,0 +1,6 @@ +// 文件上传模块 +export namespace Upload { + export interface ResFileUrl { + fileUrl: string; + } +} diff --git a/src/api/interface/user.ts b/src/api/interface/user.ts new file mode 100644 index 0000000..c3a31c4 --- /dev/null +++ b/src/api/interface/user.ts @@ -0,0 +1,44 @@ +// 用户管理模块 +export namespace User { + // 获取组织list + export interface ResUserOrgs { + id: number; + orgCode: string; + name: string; + orgType: string; + standardCoin: string; + standardCoinId: number; + autoDetaultStockId: number; + disable: boolean; + } + export interface ResUserDept { + id: number; + name: string; + pid: number; + managerId: null; + disable: boolean; + children: ResUserDept[]; + } + export interface ResWarehouse { + id: number; + name: string; + code: null; + contacts: string; + contactsId: number; + useOrgId: null; + customerWarehouseTag: boolean; + tempTransferWarehouse: number; + defaultReplenishCustomer: number; + customerId: number; + stockType: number; + disable: boolean; + } + //获取组织下的用户 + export interface ResUserList { + id: number; + code: null; + name: string; + number: number; + disable: boolean; + } +} diff --git a/src/api/modules/antiCode.ts b/src/api/modules/antiCode.ts new file mode 100644 index 0000000..42966c1 --- /dev/null +++ b/src/api/modules/antiCode.ts @@ -0,0 +1,25 @@ +import http from "@/api"; +import { ResPage } from "@/api/interface/index"; +/** + * @name 防伪码模块 + */ +//防伪码记录列表 +export const getListApi = (params: Record) => { + return http.post>(`SecurityNumber/GetGenerateRecordList`, params); +}; +//生成防伪码 +export const getGenerateSecurityNumberApi = (params: Record) => { + return http.post>(`SecurityNumber/Generate`, params); +}; +//防伪码下载列表 getDownListApi +export const getDownListApi = (params: Record) => { + return http.post>(`SecurityNumber/GetList`, params); +}; +//下载 +export const getDownAllApi = (params: Record) => { + return http.post>(`SecurityNumber/Export`, params); +}; +//选择下载 +export const getDownApi = (params: Record) => { + return http.post>(`SecurityNumber/Export`, params); +}; diff --git a/src/api/modules/barCode.ts b/src/api/modules/barCode.ts new file mode 100644 index 0000000..703cb8e --- /dev/null +++ b/src/api/modules/barCode.ts @@ -0,0 +1,110 @@ +import http from "@/api"; +import { ResPage } from "@/api/interface/index"; +/** + * @name 打印产品条码模块 + */ +//产品条码生成记录列表 +export const getListApi = (params: Record) => { + // console.log(params); + // return { + // isSuccess: true, + // message: "Success", + // status: 200, + // totalCount: 1, + // data: [ + // { + // id: 17372, + // specifications: "ORICO-H7013-U3-AD-EU-BK-BP", + // materialNumber: "G01-43-552867", + // materialName: "7口USB3.0集线器", + // barCode: "6936761881968", + // purchaseBillNo: "ceshi1224", + // generateComplete: "已完成", + // number: 300, + // printNumber: 0, + // downLoadNumber: 300, + // useNumber: 2, + // creator: "admin", + // createTime: "2024-12-24 10:27:04", + // generateCompleteTime: "2024-12-24 10:27:05", + // supplierOrOrg: "深圳市元创时代科技有限公司", + // isUpdateMaterial: false, + // isTwo: 2 + // } + // ] + // }; + return http.post>(`SerialNumber/GetGenerateRecordList`, params); +}; +//产品条码列表 +export const getCodeListApi = (params: Record) => { + // console.log(params); + // return { + // totalCount: 300, + // data: [ + // { + // materialNumber: "G01-43-552867", + // materialName: "7口USB3.0集线器", + // specifications: "ORICO-H7013-U3-AD-EU-BK-BP", + // old_Specifications: "", + // barCode: "6936761881968", + // serialNumber: "10FC-616M3R", + // twoSerialNumber: "10FC-616M3R-two", + // numberCode: "241224000417", + // id: 202593401, + // number: 300, + // isUse: false, + // isUseStr: "否", + // box: "", + // creator: "admin", + // createTime: "2024-12-24 10:27:05", + // printNumber: 0, + // downLoadNumber: 1, + // printTime: "", + // downLoadTime: "2025-01-08 16:11:39", + // isEnablePrint: true + // }, + // { + // materialNumber: "G01-43-552867", + // materialName: "7口USB3.0集线器", + // specifications: "ORICO-H7013-U3-AD-EU-BK-BP", + // old_Specifications: "", + // barCode: "6936761881968", + // serialNumber: "10FC-616M3Q", + // twoSerialNumber: "10FC-616M3R-two", + // numberCode: "241224000416", + // id: 202593400, + // number: 300, + // isUse: false, + // isUseStr: "否", + // box: "", + // creator: "admin", + // createTime: "2024-12-24 10:27:05", + // printNumber: 0, + // downLoadNumber: 1, + // printTime: "", + // downLoadTime: "2025-01-08 16:11:39", + // isEnablePrint: true + // } + // ], + // isSuccess: true, + // status: 200, + // message: "Success" + // }; + return http.post>(`SerialNumber/GetList`, params); +}; +//转换规格型号 SerialNumber/UpdateMaterial +export const getUpdateMaterialApi = (params: Record) => { + return http.post>(`SerialNumber/UpdateMaterial`, params); +}; +//产品条码列表下载 +export const getSerialNumberDownLoadApi = (params: Record) => { + return http.post>(`SerialNumber/Export`, params); +}; +//生成条码 +export const generateBarCodeApi = (params: Record) => { + return http.post>(`SerialNumber/Generate`, params); +}; +//打印 +export const getPrintListCodeApi = (params: Record) => { + return http.post>(`SerialNumber/Print`, params); +}; diff --git a/src/api/modules/boxCode.ts b/src/api/modules/boxCode.ts new file mode 100644 index 0000000..459d869 --- /dev/null +++ b/src/api/modules/boxCode.ts @@ -0,0 +1,48 @@ +import http from "@/api"; +import { ResPage } from "@/api/interface/index"; +//箱信息列表 +export const getListApi = (params: any) => { + return http.post>(`Box/GetList`, params); +}; +//生成箱碼 +export const getBoxGenerateApi = (params: any) => { + return http.post>(`Box/Generate`, params); +}; +//裝箱保存 +export const getSaveBoxApi = (params: any) => { + return http.post>(`Box/Save`, params, { noLoading: false }); +}; +//打印 +export const getPrintBoxApi = (params: any) => { + return http.post>(`Box/Print`, params); +}; +//刪除 / +export const getDeleteBoxApi = (params: any) => { + return http.post>(`Box/Delete`, params); +}; +//清空 +export const getClearBoxApi = (params: any) => { + return http.get>(`Box/Clear`, params); +}; +//根据箱号获取箱信息 +export const getBoxByNoApi = (params: any) => { + return http.get>(`Box/GetBoxByNo`, params, { + noLoading: true + }); +}; +//根据序列号获取序列号信息 +export const getSerialNumberApi = (params: any) => { + return http.get>(`SerialNumber/Get`, params); +}; +//根据箱号去获取序列号 +export const getSerialNumberByBoxIdApi = (params: any) => { + return http.post>(`SerialNumber/GetByBoxId`, params, { noLoading: true }); +}; +//重新装箱 +export const getBoxRestartApi = (params: any) => { + return http.post>(`Box/Restart`, params); +}; +//开始装箱时间接口 Box/BeginCarton +export const getBeginCartonApi = (params: any) => { + return http.get>(`Box/BeginCarton`, params); +}; diff --git a/src/api/modules/boxMark.ts b/src/api/modules/boxMark.ts new file mode 100644 index 0000000..6aa9db8 --- /dev/null +++ b/src/api/modules/boxMark.ts @@ -0,0 +1,14 @@ +//箱唛 +import http from "@/api"; +import { ResPage } from "@/api/interface/index"; + +//箱唛列表 +export const getBoxMarkListApi = (params: Record) => { + return http.post>(`BoxMark/GetList`, params); +}; +//生成箱唛 +export const getMaterialListApi = (params: any) => { + console.log(params); + // return http.get(`SysConfig/GetMaterialList?speci=${encodeURIComponent(speci)}`); + return []; +}; diff --git a/src/api/modules/exportList.ts b/src/api/modules/exportList.ts new file mode 100644 index 0000000..16b4ed4 --- /dev/null +++ b/src/api/modules/exportList.ts @@ -0,0 +1,9 @@ +import http from "@/api"; +// 导出列表 +export const getListApi = (params: Record) => { + return http.get(`exports`, params); +}; +//状态 +export const getExportTypesApi = () => { + return http.get(`export/types`); +}; diff --git a/src/api/modules/foundationMaterial.ts b/src/api/modules/foundationMaterial.ts new file mode 100644 index 0000000..f329688 --- /dev/null +++ b/src/api/modules/foundationMaterial.ts @@ -0,0 +1,10 @@ +import http from "@/api"; + +/** + * @name 全局模块(在公司下面的数据) + */ + +//物料分页列表 +export const getMaterialListApi = (params: any) => { + return http.get(`material`, params); +}; diff --git a/src/api/modules/global.ts b/src/api/modules/global.ts new file mode 100644 index 0000000..8914a32 --- /dev/null +++ b/src/api/modules/global.ts @@ -0,0 +1,26 @@ +import http from "@/api"; + +/** + * @name 全局模块(在公司下面的数据) + */ + +//获取供应商 +export const getSupplierApi = (params: any) => { + return http.get(`basicinfo/suppliers`, params); +}; +//組織 +export const getOrgsApi = () => { + return http.get(`basicinfo/orgs`); +}; +//客戶 +export const getCustomersApi = (params: any) => { + return http.get(`basicinfo/customers`, params); +}; +//用户(订阅账号) +export const getUsersApi = (params: any) => { + return http.get(`user/list`, params); +}; +//品线 +export const getProductLinesApi = (params: any) => { + return http.get(`basicinfo/productlines`, params); +}; diff --git a/src/api/modules/inspection.ts b/src/api/modules/inspection.ts new file mode 100644 index 0000000..2e9f344 --- /dev/null +++ b/src/api/modules/inspection.ts @@ -0,0 +1,18 @@ +import http from "@/api"; + +/** + * @name 全局模块(在公司下面的数据) + */ + +//质检单列表 +export const getQualityInspectListApi = (params: any) => { + return http.get(`quality_inspect`, params); +}; +//刷新 /admapi/quality_inspect/reload +export const getQualityInspectReloadApi = (params: any) => { + return http.get(`quality_inspect/reload`, params); +}; +//导出 +export const getQualityInspectExportApi = (params: any) => { + return http.get(`quality_inspect/export`, params); +}; diff --git a/src/api/modules/login.ts b/src/api/modules/login.ts new file mode 100644 index 0000000..6d7e346 --- /dev/null +++ b/src/api/modules/login.ts @@ -0,0 +1,32 @@ +import { ResultData, Login } from "@/api/interface/index"; +// import authMenuList from "@/assets/json/authMenuList.json"; +import http from "@/api"; + +/** + * @name 登录模块 + */ +// 用户登录 +export const loginApi = (params: Login.ReqLoginCode) => { + return http.get>(`/user/signin/${params}`); + // 正常 post json 请求 ==> application/json + // return http.post(PORT1 + `/login`, params, { noLoading: true }); // 控制当前请求不显示 loading + // return http.post(PORT1 + `/login`, {}, { params }); // post 请求携带 query 参数 ==> ?username=admin&password=123456 + // return http.post(PORT1 + `/login`, qs.stringify(params)); // post 请求携带表单参数 ==> application/x-www-form-urlencoded + // return http.get(PORT1 + `/login?${qs.stringify(params, { arrayFormat: "repeat" })}`); // get 请求可以携带数组等复杂参数 +}; + +// 获取菜单列表 +export const getAuthMenuListApi = () => { + console.log("触发了吗"); + return http.get(`/user/permissions`, {}, { noLoading: true }); + // return authMenuList; +}; + +// 用户退出登录 +export const logoutApi = () => { + return http.get(`/user/signout`); +}; + +// export const LoginOutSingleApi = () => { +// return http.get(`/Login/LoginOutSingle`); +// }; diff --git a/src/api/modules/operationButtons.ts b/src/api/modules/operationButtons.ts new file mode 100644 index 0000000..664cfb1 --- /dev/null +++ b/src/api/modules/operationButtons.ts @@ -0,0 +1,5 @@ +import http from "@/api"; +//按钮提交,通过请求接口来区分就可以了 +export const operationButtonsApi = (url: string, params: any) => { + return http.post(url, params); +}; diff --git a/src/api/modules/subscribe.ts b/src/api/modules/subscribe.ts new file mode 100644 index 0000000..189326c --- /dev/null +++ b/src/api/modules/subscribe.ts @@ -0,0 +1,23 @@ +import http from "@/api"; + +//订阅信息单列表 /admapi/subscribe +export const getSubscribeListApi = (params: any) => { + return http.get(`subscribe`, params); +}; +//新增 +export const getSubscribeAddApi = (params: any) => { + return http.post(`subscribe`, params); +}; +//详情 +export const getSubscribeDetailsApi = (params: any) => { + return http.get(`subscribe/${params}`); +}; +//更新 +export const getSubscribeUpdateApi = (id: any, params: any) => { + console.log(params, "=params="); + return http.post(`subscribe/${id}`, params); +}; +//删除 +export const getSubscribeDelApi = (params: any) => { + return http.delete(`subscribe/${params}`); +}; diff --git a/src/api/modules/subscription.ts b/src/api/modules/subscription.ts new file mode 100644 index 0000000..4e21aff --- /dev/null +++ b/src/api/modules/subscription.ts @@ -0,0 +1,6 @@ +import http from "@/api"; + +//获取客户下拉列表(纯客户信息 不包含组织信息) +export const getCustomersNoOrgApi = (id: any) => { + return http.get(`SysConfig/GetCustomersNoOrg/${id}`); +}; diff --git a/src/api/modules/test.ts b/src/api/modules/test.ts new file mode 100644 index 0000000..b81b534 --- /dev/null +++ b/src/api/modules/test.ts @@ -0,0 +1,48 @@ +//测试 +// import http from "@/api"; +// import { ResPage } from "@/api/interface/index"; + +//列表 +export const getBoxMarkListApi = () => { + return { + totalCount: 1, + isSuccess: true, + message: "Success", + status: 200, + data: [ + { + id: 11573, + detailsId: 30059, + billNo: "RKRW00011573", + status: "部分入库", + sourceBillNo: "SCHB00054706", + type: "生产入库", + supplier: "", + org: "深圳市元创时代科技有限公司", + specifications: "", + materialNumber: "G01-11-579493", + materialName: "", + factoryPrice: 0, + stock: "wms仓库02", + accruedQty: 50, + receiveQty: 20, + realityQty: 20, + receiver: "尹芳丽wms", + receiveTime: "2025-08-13 17:45:39", + shelfer: "尹芳丽wms", + shelfTime: "2025-08-13 17:46:23", + remark: null, + createTime: "2025-08-13 15:12:30", + isRepeal: "否", + saleBillNo: " " + } + ] + }; + //http.post>(`BoxMark/GetList`, params); +}; +// //生成箱唛 +// export const getMaterialListApi = (speci: any) => { +// console.log(speci); +// // return http.get(`SysConfig/GetMaterialList?speci=${encodeURIComponent(speci)}`); +// return []; +// }; diff --git a/src/api/modules/upload.ts b/src/api/modules/upload.ts new file mode 100644 index 0000000..d79f0ed --- /dev/null +++ b/src/api/modules/upload.ts @@ -0,0 +1,18 @@ +import { Upload } from "@/api/interface/index"; +import { PORT1 } from "@/api/config/servicePort"; +import http from "@/api"; + +/** + * @name 文件上传模块 + */ +// 图片上传 +export const uploadImg = (formData: any) => { + //params: FormData + let url = import.meta.env.VITE_APP_API_BASEURL + import.meta.env.VITE_APP_API_VERSION + "/Upload?type=material&name="; + return http.post(url, formData); +}; + +// 视频上传 +export const uploadVideo = (params: FormData) => { + return http.post(PORT1 + `/file/upload/video`, params); +}; diff --git a/src/assets/fonto/demo.css b/src/assets/fonto/demo.css new file mode 100644 index 0000000..4b16b84 --- /dev/null +++ b/src/assets/fonto/demo.css @@ -0,0 +1,466 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666666; +} +#tabs { + border-bottom: 1px solid #eeeeee; +} +#tabs li { + position: relative; + z-index: 1; + width: 100px; + height: 40px; + margin-bottom: -1px; + font-size: 16px; + line-height: 40px; + color: #666666; + text-align: center; + cursor: pointer; + border-bottom: 2px solid transparent; +} +#tabs .active { + color: #222222; + border-bottom-color: #ff0000; +} +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + width: 960px; + padding: 30px 100px; + margin: 0 auto; +} +.main .logo { + height: 110px; + margin-top: -50px; + margin-bottom: 30px; + overflow: hidden; + line-height: 1; + color: #333333; + text-align: left; + *zoom: 1; +} +.main .logo a { + font-size: 160px; + color: #333333; +} +.helps { + margin-top: 40px; +} +.helps pre { + padding: 20px; + margin: 10px 0; + overflow: auto; + background-color: #fffdef; + border: solid 1px #e7e1cd; +} +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} +.icon_lists li { + width: 100px; + margin-right: 20px; + margin-bottom: 10px; + text-align: center; + list-style: none !important; + cursor: default; +} +.icon_lists li .code-name { + line-height: 1.2; +} +.icon_lists .icon { + display: block; + height: 100px; + margin: 10px auto; + font-size: 42px; + line-height: 100px; + color: #333333; + transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} +.icon_lists .icon:hover { + font-size: 100px; +} +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; + + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; +} +.icon_lists li .name, +.icon_lists li .code-name { + color: #666666; +} + +/* markdown 样式 */ +.markdown { + font-size: 14px; + line-height: 1.8; + color: #666666; +} +.highlight { + line-height: 1.5; +} +.markdown img { + max-width: 100%; + vertical-align: middle; +} +.markdown h1 { + margin-bottom: 24px; + font-weight: 500; + line-height: 40px; + color: #404040; +} +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + margin: 1.6em 0 0.6em; + clear: both; + font-weight: 500; + color: #404040; +} +.markdown h1 { + font-size: 28px; +} +.markdown h2 { + font-size: 22px; +} +.markdown h3 { + font-size: 16px; +} +.markdown h4 { + font-size: 14px; +} +.markdown h5 { + font-size: 12px; +} +.markdown h6 { + font-size: 12px; +} +.markdown hr { + height: 1px; + margin: 16px 0; + clear: both; + background: #e9e9e9; + border: 0; +} +.markdown p { + margin: 1em 0; +} +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} +.markdown ul>li { + list-style: circle; +} +.markdown>ul li, +.markdown blockquote ul>li { + padding-left: 4px; + margin-left: 20px; +} +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} +.markdown ol>li { + list-style: decimal; +} +.markdown>ol li, +.markdown blockquote ol>li { + padding-left: 4px; + margin-left: 20px; +} +.markdown code { + padding: 0 5px; + margin: 0 3px; + background: #eeeeee; + border-radius: 3px; +} +.markdown strong, +.markdown b { + font-weight: 600; +} +.markdown>table { + width: 95%; + margin-bottom: 24px; + empty-cells: show; + border-spacing: 0; + border-collapse: collapse; + border: 1px solid #e9e9e9; +} +.markdown>table th { + font-weight: 600; + color: #333333; + white-space: nowrap; +} +.markdown>table th, +.markdown>table td { + padding: 8px 16px; + text-align: left; + border: 1px solid #e9e9e9; +} +.markdown>table th { + background: #F7F7F7; +} +.markdown blockquote { + padding-left: 0.8em; + margin: 1em 0; + font-size: 90%; + color: #999999; + border-left: 4px solid #e9e9e9; +} +.markdown blockquote p { + margin: 0; +} +.markdown .anchor { + margin-left: 8px; + opacity: 0; + transition: opacity 0.3s ease; +} +.markdown .waiting { + color: #cccccc; +} +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + display: inline-block; + opacity: 1; +} +.markdown>br, +.markdown>p>br { + clear: both; +} +.hljs { + display: block; + padding: 0.5em; + overflow-x: auto; + color: #333333; + background: white; +} +.hljs-comment, +.hljs-meta { + color: #969896; +} +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} +.hljs-section, +.hljs-name { + color: #63a35c; +} +.hljs-tag { + color: #333333; +} +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ + +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ + +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + hyphens: none; + hyphens: none; + hyphens: none; + hyphens: none; + line-height: 1.5; + color: black; + text-align: left; + text-shadow: 0 1px white; + word-break: normal; + word-wrap: normal; + tab-size: 4; + tab-size: 4; + tab-size: 4; + white-space: pre; + background: none; + word-spacing: normal; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + white-space: normal; + border-radius: .3em; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999999; +} +.namespace { + opacity: .7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #990055; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #669900; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsl(0deg 0% 100% / 50%); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #0077aa; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #ee9900; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} diff --git a/src/assets/fonto/demo_index.html b/src/assets/fonto/demo_index.html new file mode 100644 index 0000000..c118b0d --- /dev/null +++ b/src/assets/fonto/demo_index.html @@ -0,0 +1,1612 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    发货出库
    +
    &#xe670;
    +
  • + +
  • + +
    收货入库
    +
    &#xe671;
    +
  • + +
  • + +
    其他库内操作
    +
    &#xe672;
    +
  • + +
  • + +
    盘点
    +
    &#xe673;
    +
  • + +
  • + +
    报表
    +
    &#xe674;
    +
  • + +
  • + +
    收起icon
    +
    &#xe66e;
    +
  • + +
  • + +
    展开icon
    +
    &#xe66a;
    +
  • + +
  • + +
    克隆
    +
    &#xe66b;
    +
  • + +
  • + +
    保存
    +
    &#xe66c;
    +
  • + +
  • + +
    日历icon
    +
    &#xe66d;
    +
  • + +
  • + +
    添加
    +
    &#xe65e;
    +
  • + +
  • + +
    复制
    +
    &#xe65d;
    +
  • + +
  • + +
    关闭
    +
    &#xe65b;
    +
  • + +
  • + +
    编辑
    +
    &#xe65a;
    +
  • + +
  • + +
    税务管理
    +
    &#xe649;
    +
  • + +
  • + +
    成本管理
    +
    &#xe645;
    +
  • + +
  • + +
    应收款管理
    +
    &#xe642;
    +
  • + +
  • + +
    资金管理
    +
    &#xe643;
    +
  • + +
  • + +
    费用管理
    +
    &#xe644;
    +
  • + +
  • + +
    出纳管理
    +
    &#xe646;
    +
  • + +
  • + +
    资产管理
    +
    &#xe647;
    +
  • + +
  • + +
    总账
    +
    &#xe648;
    +
  • + +
  • + +
    应付款管理
    +
    &#xe64a;
    +
  • + +
  • + +
    财务
    +
    &#xe641;
    +
  • + +
  • + +
    导出
    +
    &#xe63f;
    +
  • + +
  • + +
    人民币
    +
    &#xe63b;
    +
  • + +
  • + +
    下载为空
    +
    &#xe63a;
    +
  • + +
  • + +
    删除
    +
    &#xe639;
    +
  • + +
  • + +
    导出
    +
    &#xe636;
    +
  • + +
  • + +
    下单
    +
    &#xe637;
    +
  • + +
  • + +
    批量
    +
    &#xe638;
    +
  • + +
  • + +
    折线图
    +
    &#xe635;
    +
  • + +
  • + +
    更多
    +
    &#xe631;
    +
  • + +
  • + +
    成功
    +
    &#xe630;
    +
  • + +
  • + +
    示警
    +
    &#xe62f;
    +
  • + +
  • + +
    信息
    +
    &#xe62e;
    +
  • + +
  • + +
    任务为空
    +
    &#xe62d;
    +
  • + +
  • + +
    浏览记录为空
    +
    &#xe62c;
    +
  • + +
  • + +
    清除
    +
    &#xe62b;
    +
  • + +
  • + +
    左边
    +
    &#xe629;
    +
  • + +
  • + +
    右边
    +
    &#xe62a;
    +
  • + +
  • + +
    选中
    +
    &#xe628;
    +
  • + +
  • + +
    双箭头收起-上
    +
    &#xe626;
    +
  • + +
  • + +
    双箭头展开-下
    +
    &#xe627;
    +
  • + +
  • + +
    刷新
    +
    &#xe625;
    +
  • + +
  • + +
    添加
    +
    &#xe624;
    +
  • + +
  • + +
    保存
    +
    &#xe623;
    +
  • + +
  • + +
    右-展开更多
    +
    &#xe61d;
    +
  • + +
  • + +
    左-展开更多
    +
    &#xe61e;
    +
  • + +
  • + +
    下-展开
    +
    &#xe61f;
    +
  • + +
  • + +
    关闭
    +
    &#xe620;
    +
  • + +
  • + +
    报表
    +
    &#xe612;
    +
  • + +
  • + +
    采购
    +
    &#xe613;
    +
  • + +
  • + +
    仓库
    +
    &#xe614;
    +
  • + +
  • + +
    生产
    +
    &#xe615;
    +
  • + +
  • + +
    销售
    +
    &#xe616;
    +
  • + +
  • + +
    条码
    +
    &#xe617;
    +
  • + +
  • + +
    物料
    +
    &#xe618;
    +
  • + +
  • + +
    委外
    +
    &#xe619;
    +
  • + +
  • + +
    供应商
    +
    &#xe61a;
    +
  • + +
  • + +
    设置
    +
    &#xe61b;
    +
  • + +
  • + +
    211
    +
    &#xe61c;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1700032659797') format('woff2'),
+       url('iconfont.woff?t=1700032659797') format('woff'),
+       url('iconfont.ttf?t=1700032659797') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + 发货出库 +
    +
    .icon-fahuochuku +
    +
  • + +
  • + +
    + 收货入库 +
    +
    .icon-shouhuoruku +
    +
  • + +
  • + +
    + 其他库内操作 +
    +
    .icon-qitakuneicaozuo +
    +
  • + +
  • + +
    + 盘点 +
    +
    .icon-pandian +
    +
  • + +
  • + +
    + 报表 +
    +
    .icon-baobiao1 +
    +
  • + +
  • + +
    + 收起icon +
    +
    .icon-shouqiicon +
    +
  • + +
  • + +
    + 展开icon +
    +
    .icon-zhankaiicon +
    +
  • + +
  • + +
    + 克隆 +
    +
    .icon-kelong +
    +
  • + +
  • + +
    + 保存 +
    +
    .icon-baocun1 +
    +
  • + +
  • + +
    + 日历icon +
    +
    .icon-riliicon +
    +
  • + +
  • + +
    + 添加 +
    +
    .icon-tianjia1 +
    +
  • + +
  • + +
    + 复制 +
    +
    .icon-fuzhi +
    +
  • + +
  • + +
    + 关闭 +
    +
    .icon-guanbi1 +
    +
  • + +
  • + +
    + 编辑 +
    +
    .icon-bianji1 +
    +
  • + +
  • + +
    + 税务管理 +
    +
    .icon-shuiwuguanli +
    +
  • + +
  • + +
    + 成本管理 +
    +
    .icon-chengbenguanli +
    +
  • + +
  • + +
    + 应收款管理 +
    +
    .icon-yingshoukuanguanli +
    +
  • + +
  • + +
    + 资金管理 +
    +
    .icon-zijinguanli +
    +
  • + +
  • + +
    + 费用管理 +
    +
    .icon-feiyongguanli +
    +
  • + +
  • + +
    + 出纳管理 +
    +
    .icon-chunaguanli +
    +
  • + +
  • + +
    + 资产管理 +
    +
    .icon-zichanguanli +
    +
  • + +
  • + +
    + 总账 +
    +
    .icon-zongzhang +
    +
  • + +
  • + +
    + 应付款管理 +
    +
    .icon-yingfukuanguanli +
    +
  • + +
  • + +
    + 财务 +
    +
    .icon-caiwu +
    +
  • + +
  • + +
    + 导出 +
    +
    .icon-daochu1 +
    +
  • + +
  • + +
    + 人民币 +
    +
    .icon-renminbi +
    +
  • + +
  • + +
    + 下载为空 +
    +
    .icon-xiazaiweikong +
    +
  • + +
  • + +
    + 删除 +
    +
    .icon-shanchu +
    +
  • + +
  • + +
    + 导出 +
    +
    .icon-daochu +
    +
  • + +
  • + +
    + 下单 +
    +
    .icon-xiadan +
    +
  • + +
  • + +
    + 批量 +
    +
    .icon-piliang +
    +
  • + +
  • + +
    + 折线图 +
    +
    .icon-zhexiantu +
    +
  • + +
  • + +
    + 更多 +
    +
    .icon-gengduo +
    +
  • + +
  • + +
    + 成功 +
    +
    .icon-chenggong +
    +
  • + +
  • + +
    + 示警 +
    +
    .icon-shijing +
    +
  • + +
  • + +
    + 信息 +
    +
    .icon-xinxi +
    +
  • + +
  • + +
    + 任务为空 +
    +
    .icon-renwuweikong +
    +
  • + +
  • + +
    + 浏览记录为空 +
    +
    .icon-liulanjiluweikong +
    +
  • + +
  • + +
    + 清除 +
    +
    .icon-qingchu +
    +
  • + +
  • + +
    + 左边 +
    +
    .icon-zuobian +
    +
  • + +
  • + +
    + 右边 +
    +
    .icon-youbian +
    +
  • + +
  • + +
    + 选中 +
    +
    .icon-xuanzhong +
    +
  • + +
  • + +
    + 双箭头收起-上 +
    +
    .icon-shuangjiantoushouqi-shang +
    +
  • + +
  • + +
    + 双箭头展开-下 +
    +
    .icon-shuangjiantouzhankai-xia +
    +
  • + +
  • + +
    + 刷新 +
    +
    .icon-shuaxin +
    +
  • + +
  • + +
    + 添加 +
    +
    .icon-tianjia +
    +
  • + +
  • + +
    + 保存 +
    +
    .icon-baocun +
    +
  • + +
  • + +
    + 右-展开更多 +
    +
    .icon-you-zhankaigengduo +
    +
  • + +
  • + +
    + 左-展开更多 +
    +
    .icon-zuo-zhankaigengduo +
    +
  • + +
  • + +
    + 下-展开 +
    +
    .icon-xia-zhankai +
    +
  • + +
  • + +
    + 关闭 +
    +
    .icon-guanbi +
    +
  • + +
  • + +
    + 报表 +
    +
    .icon-baobiao +
    +
  • + +
  • + +
    + 采购 +
    +
    .icon-caigou +
    +
  • + +
  • + +
    + 仓库 +
    +
    .icon-cangku +
    +
  • + +
  • + +
    + 生产 +
    +
    .icon-shengchan +
    +
  • + +
  • + +
    + 销售 +
    +
    .icon-xiaoshou +
    +
  • + +
  • + +
    + 条码 +
    +
    .icon-tiaoma +
    +
  • + +
  • + +
    + 物料 +
    +
    .icon-wuliao +
    +
  • + +
  • + +
    + 委外 +
    +
    .icon-weiwai +
    +
  • + +
  • + +
    + 供应商 +
    +
    .icon-gongyingshang +
    +
  • + +
  • + +
    + 设置 +
    +
    .icon-shezhi +
    +
  • + +
  • + +
    + 211 +
    +
    .icon-a-211 +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    发货出库
    +
    #icon-fahuochuku
    +
  • + +
  • + +
    收货入库
    +
    #icon-shouhuoruku
    +
  • + +
  • + +
    其他库内操作
    +
    #icon-qitakuneicaozuo
    +
  • + +
  • + +
    盘点
    +
    #icon-pandian
    +
  • + +
  • + +
    报表
    +
    #icon-baobiao1
    +
  • + +
  • + +
    收起icon
    +
    #icon-shouqiicon
    +
  • + +
  • + +
    展开icon
    +
    #icon-zhankaiicon
    +
  • + +
  • + +
    克隆
    +
    #icon-kelong
    +
  • + +
  • + +
    保存
    +
    #icon-baocun1
    +
  • + +
  • + +
    日历icon
    +
    #icon-riliicon
    +
  • + +
  • + +
    添加
    +
    #icon-tianjia1
    +
  • + +
  • + +
    复制
    +
    #icon-fuzhi
    +
  • + +
  • + +
    关闭
    +
    #icon-guanbi1
    +
  • + +
  • + +
    编辑
    +
    #icon-bianji1
    +
  • + +
  • + +
    税务管理
    +
    #icon-shuiwuguanli
    +
  • + +
  • + +
    成本管理
    +
    #icon-chengbenguanli
    +
  • + +
  • + +
    应收款管理
    +
    #icon-yingshoukuanguanli
    +
  • + +
  • + +
    资金管理
    +
    #icon-zijinguanli
    +
  • + +
  • + +
    费用管理
    +
    #icon-feiyongguanli
    +
  • + +
  • + +
    出纳管理
    +
    #icon-chunaguanli
    +
  • + +
  • + +
    资产管理
    +
    #icon-zichanguanli
    +
  • + +
  • + +
    总账
    +
    #icon-zongzhang
    +
  • + +
  • + +
    应付款管理
    +
    #icon-yingfukuanguanli
    +
  • + +
  • + +
    财务
    +
    #icon-caiwu
    +
  • + +
  • + +
    导出
    +
    #icon-daochu1
    +
  • + +
  • + +
    人民币
    +
    #icon-renminbi
    +
  • + +
  • + +
    下载为空
    +
    #icon-xiazaiweikong
    +
  • + +
  • + +
    删除
    +
    #icon-shanchu
    +
  • + +
  • + +
    导出
    +
    #icon-daochu
    +
  • + +
  • + +
    下单
    +
    #icon-xiadan
    +
  • + +
  • + +
    批量
    +
    #icon-piliang
    +
  • + +
  • + +
    折线图
    +
    #icon-zhexiantu
    +
  • + +
  • + +
    更多
    +
    #icon-gengduo
    +
  • + +
  • + +
    成功
    +
    #icon-chenggong
    +
  • + +
  • + +
    示警
    +
    #icon-shijing
    +
  • + +
  • + +
    信息
    +
    #icon-xinxi
    +
  • + +
  • + +
    任务为空
    +
    #icon-renwuweikong
    +
  • + +
  • + +
    浏览记录为空
    +
    #icon-liulanjiluweikong
    +
  • + +
  • + +
    清除
    +
    #icon-qingchu
    +
  • + +
  • + +
    左边
    +
    #icon-zuobian
    +
  • + +
  • + +
    右边
    +
    #icon-youbian
    +
  • + +
  • + +
    选中
    +
    #icon-xuanzhong
    +
  • + +
  • + +
    双箭头收起-上
    +
    #icon-shuangjiantoushouqi-shang
    +
  • + +
  • + +
    双箭头展开-下
    +
    #icon-shuangjiantouzhankai-xia
    +
  • + +
  • + +
    刷新
    +
    #icon-shuaxin
    +
  • + +
  • + +
    添加
    +
    #icon-tianjia
    +
  • + +
  • + +
    保存
    +
    #icon-baocun
    +
  • + +
  • + +
    右-展开更多
    +
    #icon-you-zhankaigengduo
    +
  • + +
  • + +
    左-展开更多
    +
    #icon-zuo-zhankaigengduo
    +
  • + +
  • + +
    下-展开
    +
    #icon-xia-zhankai
    +
  • + +
  • + +
    关闭
    +
    #icon-guanbi
    +
  • + +
  • + +
    报表
    +
    #icon-baobiao
    +
  • + +
  • + +
    采购
    +
    #icon-caigou
    +
  • + +
  • + +
    仓库
    +
    #icon-cangku
    +
  • + +
  • + +
    生产
    +
    #icon-shengchan
    +
  • + +
  • + +
    销售
    +
    #icon-xiaoshou
    +
  • + +
  • + +
    条码
    +
    #icon-tiaoma
    +
  • + +
  • + +
    物料
    +
    #icon-wuliao
    +
  • + +
  • + +
    委外
    +
    #icon-weiwai
    +
  • + +
  • + +
    供应商
    +
    #icon-gongyingshang
    +
  • + +
  • + +
    设置
    +
    #icon-shezhi
    +
  • + +
  • + +
    211
    +
    #icon-a-211
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/src/assets/fonto/iconfont.css b/src/assets/fonto/iconfont.css new file mode 100644 index 0000000..185a98d --- /dev/null +++ b/src/assets/fonto/iconfont.css @@ -0,0 +1,263 @@ +@font-face { + font-family: "iconfont"; /* Project id 2863944 */ + src: url('iconfont.woff2?t=1700032659797') format('woff2'), + url('iconfont.woff?t=1700032659797') format('woff'), + url('iconfont.ttf?t=1700032659797') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-fahuochuku:before { + content: "\e670"; +} + +.icon-shouhuoruku:before { + content: "\e671"; +} + +.icon-qitakuneicaozuo:before { + content: "\e672"; +} + +.icon-pandian:before { + content: "\e673"; +} + +.icon-baobiao1:before { + content: "\e674"; +} + +.icon-shouqiicon:before { + content: "\e66e"; +} + +.icon-zhankaiicon:before { + content: "\e66a"; +} + +.icon-kelong:before { + content: "\e66b"; +} + +.icon-baocun1:before { + content: "\e66c"; +} + +.icon-riliicon:before { + content: "\e66d"; +} + +.icon-tianjia1:before { + content: "\e65e"; +} + +.icon-fuzhi:before { + content: "\e65d"; +} + +.icon-guanbi1:before { + content: "\e65b"; +} + +.icon-bianji1:before { + content: "\e65a"; +} + +.icon-shuiwuguanli:before { + content: "\e649"; +} + +.icon-chengbenguanli:before { + content: "\e645"; +} + +.icon-yingshoukuanguanli:before { + content: "\e642"; +} + +.icon-zijinguanli:before { + content: "\e643"; +} + +.icon-feiyongguanli:before { + content: "\e644"; +} + +.icon-chunaguanli:before { + content: "\e646"; +} + +.icon-zichanguanli:before { + content: "\e647"; +} + +.icon-zongzhang:before { + content: "\e648"; +} + +.icon-yingfukuanguanli:before { + content: "\e64a"; +} + +.icon-caiwu:before { + content: "\e641"; +} + +.icon-daochu1:before { + content: "\e63f"; +} + +.icon-renminbi:before { + content: "\e63b"; +} + +.icon-xiazaiweikong:before { + content: "\e63a"; +} + +.icon-shanchu:before { + content: "\e639"; +} + +.icon-daochu:before { + content: "\e636"; +} + +.icon-xiadan:before { + content: "\e637"; +} + +.icon-piliang:before { + content: "\e638"; +} + +.icon-zhexiantu:before { + content: "\e635"; +} + +.icon-gengduo:before { + content: "\e631"; +} + +.icon-chenggong:before { + content: "\e630"; +} + +.icon-shijing:before { + content: "\e62f"; +} + +.icon-xinxi:before { + content: "\e62e"; +} + +.icon-renwuweikong:before { + content: "\e62d"; +} + +.icon-liulanjiluweikong:before { + content: "\e62c"; +} + +.icon-qingchu:before { + content: "\e62b"; +} + +.icon-zuobian:before { + content: "\e629"; +} + +.icon-youbian:before { + content: "\e62a"; +} + +.icon-xuanzhong:before { + content: "\e628"; +} + +.icon-shuangjiantoushouqi-shang:before { + content: "\e626"; +} + +.icon-shuangjiantouzhankai-xia:before { + content: "\e627"; +} + +.icon-shuaxin:before { + content: "\e625"; +} + +.icon-tianjia:before { + content: "\e624"; +} + +.icon-baocun:before { + content: "\e623"; +} + +.icon-you-zhankaigengduo:before { + content: "\e61d"; +} + +.icon-zuo-zhankaigengduo:before { + content: "\e61e"; +} + +.icon-xia-zhankai:before { + content: "\e61f"; +} + +.icon-guanbi:before { + content: "\e620"; +} + +.icon-baobiao:before { + content: "\e612"; +} + +.icon-caigou:before { + content: "\e613"; +} + +.icon-cangku:before { + content: "\e614"; +} + +.icon-shengchan:before { + content: "\e615"; +} + +.icon-xiaoshou:before { + content: "\e616"; +} + +.icon-tiaoma:before { + content: "\e617"; +} + +.icon-wuliao:before { + content: "\e618"; +} + +.icon-weiwai:before { + content: "\e619"; +} + +.icon-gongyingshang:before { + content: "\e61a"; +} + +.icon-shezhi:before { + content: "\e61b"; +} + +.icon-a-211:before { + content: "\e61c"; +} + diff --git a/src/assets/fonto/iconfont.js b/src/assets/fonto/iconfont.js new file mode 100644 index 0000000..cb3a0ce --- /dev/null +++ b/src/assets/fonto/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_2863944='',function(c){var h=(h=document.getElementsByTagName("script"))[h.length-1],a=h.getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var l,t,i,v,p,o=function(h,a){a.parentNode.insertBefore(h,a)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}l=function(){var h,a=document.createElement("div");a.innerHTML=c._iconfont_svg_string_2863944,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(h=document.body).firstChild?o(a,h.firstChild):h.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),l()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=l,v=c.document,p=!1,d(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,z())})}function z(){p||(p=!0,i())}function d(){try{v.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}z()}}(window); \ No newline at end of file diff --git a/src/assets/fonto/iconfont.json b/src/assets/fonto/iconfont.json new file mode 100644 index 0000000..1f7674c --- /dev/null +++ b/src/assets/fonto/iconfont.json @@ -0,0 +1,443 @@ +{ + "id": "2863944", + "name": "OPS", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "38127193", + "name": "发货出库", + "font_class": "fahuochuku", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "38127192", + "name": "收货入库", + "font_class": "shouhuoruku", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "38127191", + "name": "其他库内操作", + "font_class": "qitakuneicaozuo", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "38127190", + "name": "盘点", + "font_class": "pandian", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "38127189", + "name": "报表", + "font_class": "baobiao1", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "36084927", + "name": "收起icon", + "font_class": "shouqiicon", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "36084853", + "name": "展开icon", + "font_class": "zhankaiicon", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "36084854", + "name": "克隆", + "font_class": "kelong", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "36084855", + "name": "保存", + "font_class": "baocun1", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "36084856", + "name": "日历icon", + "font_class": "riliicon", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "32937331", + "name": "添加", + "font_class": "tianjia1", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "32936674", + "name": "复制", + "font_class": "fuzhi", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "31372064", + "name": "关闭", + "font_class": "guanbi1", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "31254227", + "name": "编辑", + "font_class": "bianji1", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "28767114", + "name": "税务管理", + "font_class": "shuiwuguanli", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "28758569", + "name": "成本管理", + "font_class": "chengbenguanli", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "28756346", + "name": "应收款管理", + "font_class": "yingshoukuanguanli", + "unicode": "e642", + "unicode_decimal": 58946 + }, + { + "icon_id": "28756347", + "name": "资金管理", + "font_class": "zijinguanli", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "28756349", + "name": "费用管理", + "font_class": "feiyongguanli", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "28756351", + "name": "出纳管理", + "font_class": "chunaguanli", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "28756352", + "name": "资产管理", + "font_class": "zichanguanli", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "28756353", + "name": "总账", + "font_class": "zongzhang", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "28756355", + "name": "应付款管理", + "font_class": "yingfukuanguanli", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "28442176", + "name": "财务", + "font_class": "caiwu", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "28373960", + "name": "导出", + "font_class": "daochu1", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "28043356", + "name": "人民币", + "font_class": "renminbi", + "unicode": "e63b", + "unicode_decimal": 58939 + }, + { + "icon_id": "27909200", + "name": "下载为空", + "font_class": "xiazaiweikong", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "26973680", + "name": "删除", + "font_class": "shanchu", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "26955368", + "name": "导出", + "font_class": "daochu", + "unicode": "e636", + "unicode_decimal": 58934 + }, + { + "icon_id": "26955369", + "name": "下单", + "font_class": "xiadan", + "unicode": "e637", + "unicode_decimal": 58935 + }, + { + "icon_id": "26955370", + "name": "批量", + "font_class": "piliang", + "unicode": "e638", + "unicode_decimal": 58936 + }, + { + "icon_id": "26954331", + "name": "折线图", + "font_class": "zhexiantu", + "unicode": "e635", + "unicode_decimal": 58933 + }, + { + "icon_id": "25254824", + "name": "更多", + "font_class": "gengduo", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "25181240", + "name": "成功", + "font_class": "chenggong", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "25181198", + "name": "示警", + "font_class": "shijing", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "25181181", + "name": "信息", + "font_class": "xinxi", + "unicode": "e62e", + "unicode_decimal": 58926 + }, + { + "icon_id": "25176785", + "name": "任务为空", + "font_class": "renwuweikong", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "25176783", + "name": "浏览记录为空", + "font_class": "liulanjiluweikong", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "25162308", + "name": "清除", + "font_class": "qingchu", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "25148507", + "name": "左边", + "font_class": "zuobian", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "25148508", + "name": "右边", + "font_class": "youbian", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "25100884", + "name": "选中", + "font_class": "xuanzhong", + "unicode": "e628", + "unicode_decimal": 58920 + }, + { + "icon_id": "25097364", + "name": "双箭头收起-上", + "font_class": "shuangjiantoushouqi-shang", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "25097365", + "name": "双箭头展开-下", + "font_class": "shuangjiantouzhankai-xia", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "25097087", + "name": "刷新", + "font_class": "shuaxin", + "unicode": "e625", + "unicode_decimal": 58917 + }, + { + "icon_id": "25097062", + "name": "添加", + "font_class": "tianjia", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "25097053", + "name": "保存", + "font_class": "baocun", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "24910721", + "name": "右-展开更多", + "font_class": "you-zhankaigengduo", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "24910731", + "name": "左-展开更多", + "font_class": "zuo-zhankaigengduo", + "unicode": "e61e", + "unicode_decimal": 58910 + }, + { + "icon_id": "24910740", + "name": "下-展开", + "font_class": "xia-zhankai", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "24910742", + "name": "关闭", + "font_class": "guanbi", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "24903722", + "name": "报表", + "font_class": "baobiao", + "unicode": "e612", + "unicode_decimal": 58898 + }, + { + "icon_id": "24903723", + "name": "采购", + "font_class": "caigou", + "unicode": "e613", + "unicode_decimal": 58899 + }, + { + "icon_id": "24903733", + "name": "仓库", + "font_class": "cangku", + "unicode": "e614", + "unicode_decimal": 58900 + }, + { + "icon_id": "24903735", + "name": "生产", + "font_class": "shengchan", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "24903736", + "name": "销售", + "font_class": "xiaoshou", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "24903737", + "name": "条码", + "font_class": "tiaoma", + "unicode": "e617", + "unicode_decimal": 58903 + }, + { + "icon_id": "24903738", + "name": "物料", + "font_class": "wuliao", + "unicode": "e618", + "unicode_decimal": 58904 + }, + { + "icon_id": "24903739", + "name": "委外", + "font_class": "weiwai", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "24903740", + "name": "供应商", + "font_class": "gongyingshang", + "unicode": "e61a", + "unicode_decimal": 58906 + }, + { + "icon_id": "24903741", + "name": "设置", + "font_class": "shezhi", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "24903806", + "name": "211", + "font_class": "a-211", + "unicode": "e61c", + "unicode_decimal": 58908 + } + ] +} diff --git a/src/assets/fonto/iconfont.ttf b/src/assets/fonto/iconfont.ttf new file mode 100644 index 0000000..2a711c3 Binary files /dev/null and b/src/assets/fonto/iconfont.ttf differ diff --git a/src/assets/fonto/iconfont.woff b/src/assets/fonto/iconfont.woff new file mode 100644 index 0000000..36d3026 Binary files /dev/null and b/src/assets/fonto/iconfont.woff differ diff --git a/src/assets/fonto/iconfont.woff2 b/src/assets/fonto/iconfont.woff2 new file mode 100644 index 0000000..16e60b8 Binary files /dev/null and b/src/assets/fonto/iconfont.woff2 differ 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..24d0aaa --- /dev/null +++ b/src/assets/iconfont/iconfont.scss @@ -0,0 +1,38 @@ +@font-face { + font-family: iconfont; /* Project id 2667653 */ + src: url("iconfont.ttf?t=1663324025864") format("truetype"); +} +.iconfont { + font-family: iconfont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + cursor: pointer; +} +.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..75c0c87 Binary files /dev/null and b/src/assets/iconfont/iconfont.ttf differ 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/cs.png b/src/assets/images/cs.png new file mode 100644 index 0000000..0d746a7 Binary files /dev/null and b/src/assets/images/cs.png differ diff --git a/src/assets/images/excel.png b/src/assets/images/excel.png new file mode 100644 index 0000000..633cea1 Binary files /dev/null and b/src/assets/images/excel.png 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..9b62435 Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/images/logo.svg @@ -0,0 +1 @@ + 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/reviewed_ico.png b/src/assets/images/reviewed_ico.png new file mode 100644 index 0000000..facdf1f Binary files /dev/null and b/src/assets/images/reviewed_ico.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..846ca27 --- /dev/null +++ b/src/assets/json/authMenuList.json @@ -0,0 +1,280 @@ +{ + "code": 200, + "data": [ + { + "id": 1, + "path": "/index", + "name": "home", + "component": "/home/index", + "hidden": true, + "type":1, + "children":[ + ], + "meta": { + "icon": "", + "title": "首页", + "isKeepAlive": true + } + }, + { + "id": 77123114, + "name": "foundation", + "type":1, + "path": "/foundation", + "component": "/foundation", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "基础", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7711667, + "name": "foundationSet", + "type":1, + "pid":77123114, + "path": "/foundation/set", + "component": "/foundation/set", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "基础设置", + "icon": "icon-shouhuoruku" + }, + "children":[ + + { + "id": 443323235133, + "name": "foundationSetMaterial", + "type":1, + "pid":77123114, + "path": "/foundation/set/material/index", + "component": "/foundation/set/material/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 4433321212532, + "pid":443323235133, + "module": 25, + "title": "导出", + "name": "foundationSetMaterialBtnExport", + "path": "", + "component": "foundationSetMaterialBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 4433321212533, + "pid":443323235133, + "module": 25, + "title": "刷新", + "name": "foundationSetMaterialBtnRefresh", + "path": "", + "component": "foundationSetMaterialBtnRefresh", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "刷新", + "icon": "" + } + } + ], + "meta": { + "title": "物料列表", + "icon": "icon-shouhuoruku" + } + } + ] + },{ + "id": 7711669, + "name": "foundationSubscribe", + "type":1, + "pid":77123114, + "path": "/foundation/subscribe", + "component": "/foundation/subscribe", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "订阅设置", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 77116691, + "name": "foundationSubscribeList", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/index", + "component": "/foundation/subscribe/list/index", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "订阅列表", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 4433522223, + "pid":77116691, + "module": 254, + "title": "新增", + "name": "foundationSubscribeListBtnAdd", + "path": "", + "component": "foundationSubscribeListBtnAdd", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "新增", + "icon": "" + } + }, + { + "id": 443352222, + "pid":77116691, + "module": 25, + "title": "删除", + "name": "foundationSubscribeListBtnDel", + "path": "", + "component": "foundationSubscribeListBtnDel", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "删除", + "icon": "" + } + } + ] + }, + { + "id": 771166911, + "name": "foundationSubscribeListAdd", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/add", + "component": "/foundation/subscribe/list/add", + "icon": "", + "redirect": "", + "hidden": true, + "meta": { + "title": "新增订阅", + "icon": "icon-shouhuoruku" + }, + "children":[] + }, + { + "id": 7711669111, + "name": "foundationSubscribeListDetails", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/details", + "component": "/foundation/subscribe/list/details", + "icon": "", + "redirect": "", + "hidden": true, + "meta": { + "title": "订阅详情", + "icon": "icon-shouhuoruku" + }, + "children":[] + }, + { + "id": 77116691111, + "name": "foundationSubscribeWarehousing", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/warehousing/index", + "component": "/foundation/subscribe/warehousing/index", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "入库单列表", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 44333212125323, + "pid":77116691111, + "module": 25, + "title": "导出", + "name": "foundationSubscribeWarehousingBtnExport", + "path": "", + "component": "foundationSubscribeWarehousingBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 443332121253355, + "pid":77116691111, + "module": 25, + "title": "刷新", + "name": "foundationSubscribeWarehousingBtnRefresh", + "path": "", + "component": "foundationSubscribeWarehousingBtnRefresh", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "刷新", + "icon": "" + } + } + ] + } + ] + } + ] + } + ], + "msg": "成功" +} diff --git a/src/assets/json/authMenuList3.json b/src/assets/json/authMenuList3.json new file mode 100644 index 0000000..20fa5af --- /dev/null +++ b/src/assets/json/authMenuList3.json @@ -0,0 +1,1782 @@ +{ + "code": 200, + "data": [ + { + "id": 1, + "path": "/index", + "name": "home", + "component": "/home/index", + "hidden": true, + "type":1, + "children":[ + ], + "meta": { + "icon": "", + "title": "首页", + "isKeepAlive": true + } + }, + { + "id": 2, + "name": "inspection", + "type":1, + "path": "/inspection", + "component": "/inspection", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "质检", + "icon": "icon-shouhuoruku" + }, + "children":[{ + "id": 3, + "pid":2, + "type":1, + "name": "inspectionManagement", + "path": "/inspection/management", + "component": "/inspection/management", + "meta": { + "title": "质检管理", + "icon": "" + }, + "icon": "", + "redirect": "", + "hidden": false, + "children": [ + { + "id": 4, + "pid":3, + "name": "inspectionManagementReport", + "path": "/inspection/management/report/index", + "component": "/inspection/management/report/index", + "hidden": false, + "type":1, + "children":[ + { + "id": 997, + "pid":4, + "module": 25, + "title": "导出", + "name": "inspectionManagementReportBtnExport", + "path": "", + "component": "inspectionManagementReportBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 997, + "pid":4, + "module": 25, + "title": "刷新", + "name": "inspectionManagementReportBtnRefresh", + "path": "", + "component": "inspectionManagementReportBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "刷新", + "icon": "" + } + } + ], + "meta": { + "title": "质检单", + "icon": "", + "isKeepAlive": true + } + } + ] + }] + }, + { + "id": 22, + "name": "receipt", + "type":1, + "path": "/receipt", + "component": "/receipt", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "收货", + "icon": "icon-shouhuoruku" + }, + "children":[{ + "id": 33, + "pid":22, + "type":1, + "name": "receiptWarehousing", + "path": "/receipt/warehousing", + "component": "/receipt/warehousing", + "meta": { + "title": "收货入库", + "icon": "" + }, + "icon": "", + "redirect": "", + "hidden": false, + "children": [ + { + "id": 441, + "pid":33, + "name": "receiptWarehousingReceiptOrderAdd", + "path": "/receipt/warehousing/receiptOrder/add", + "component": "/receipt/warehousing/receiptOrder/add", + "hidden": true, + "type":1, + "meta": { + "title": "新增收货单", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 997133, + "pid":441, + "module": 25, + "title": "提交", + "name": "receiptWarehousingReceiptOrderAddBtnCommit", + "path": "", + "component": "receiptWarehousingReceiptOrderAddBtnCommit", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "提交", + "icon": "" + } + } + ] + }, + { + "id": 44, + "pid":33, + "name": "receiptWarehousingReceiptOrderDetails", + "path": "/receipt/warehousing/receiptOrder/details", + "component": "/receipt/warehousing/receiptOrder/details", + "hidden": true, + "type":1, + "meta": { + "title": "收货单详情", + "icon": "", + "isKeepAlive": true + }, + "children":[] + }, + { + "id": 44, + "pid":33, + "name": "receiptWarehousingReceiptOrder", + "path": "/receipt/warehousing/receiptOrder/index", + "component": "/receipt/warehousing/receiptOrder/index", + "hidden": false, + "type":1, + "children":[ + { + "id": 9971, + "pid":44, + "module": 25, + "title": "新增", + "name": "receiptWarehousingReceiptOrderBtnAdd", + "path": "", + "component": "receiptWarehousingReceiptOrderBtnAdd", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "新增", + "icon": "" + } + }, + { + "id": 99711, + "pid":44, + "module": 25, + "title": "作废", + "name": "receiptWarehousingReceiptOrderBtnVoid", + "path": "", + "component": "receiptWarehousingReceiptOrderBtnVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "作废", + "icon": "" + } + }, + { + "id": 997111, + "pid":44, + "module": 25, + "title": "反作废", + "name": "receiptWarehousingReceiptOrderBtnNoVoid", + "path": "", + "component": "receiptWarehousingReceiptOrderBtnNoVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "反作废", + "icon": "" + } + }, + { + "id": 9971114, + "pid":44, + "module": 25, + "title": "反作废", + "name": "receiptWarehousingReceiptOrderBtnExport", + "path": "", + "component": "receiptWarehousingReceiptOrderBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 99711141, + "pid":44, + "module": 25, + "title": "反作废", + "name": "receiptWarehousingReceiptOrderBtnRefresh", + "path": "", + "component": "receiptWarehousingReceiptOrderBtnRefresh", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "收货单", + "icon": "", + "isKeepAlive": true + } + }, + { + "id": 45, + "pid":33, + "name": "receiptWarehousingWarehousingOrder", + "path": "/receipt/warehousing/warehousingOrder/index", + "component": "/receipt/warehousing/warehousingOrder/index", + "hidden": false, + "type":1, + "children":[ + { + "id": 997133, + "pid":45, + "module": 25, + "title": "重传", + "name": "receiptWarehousingWarehousingOrderBtnRetransmission", + "path": "", + "component": "receiptWarehousingWarehousingOrderBtnRetransmission", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "重传", + "icon": "" + } + }, + { + "id": 99733, + "pid":45, + "module": 25, + "title": "导出", + "name": "receiptWarehousingWarehousingOrderBtnExport", + "path": "", + "component": "receiptWarehousingWarehousingOrderBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 9974341, + "pid":45, + "module": 25, + "title": "同步成功", + "name": "receiptWarehousingWarehousingOrderBtnSynchronize", + "path": "", + "component": "receiptWarehousingWarehousingOrderBtnSynchronize", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "入库单", + "icon": "", + "isKeepAlive": true + } + } + ] + }] + }, + { + "id": 55, + "name": "return", + "type":1, + "path": "/return", + "component": "/return", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "退货", + "icon": "icon-shouhuoruku" + }, + "children":[{ + "id": 998, + "pid":55, + "type":1, + "name": "returnManagement", + "path": "/return/management", + "component": "/return/management", + "meta": { + "title": "退货管理", + "icon": "" + }, + "icon": "", + "redirect": "", + "hidden": false, + "children": [ + { + "id": 4412, + "pid":998, + "name": "returnManagementInstruction", + "path": "/return/management/instruction/index", + "component": "/return/management/instruction/index", + "hidden": false, + "type":1, + "meta": { + "title": "退货指令单", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 4413, + "pid":4412, + "module": 25, + "title": "新增", + "name": "returnManagementInstructionBtnAdd", + "path": "", + "component": "returnManagementInstructionBtnAdd", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "新增", + "icon": "" + } + }, + { + "id": 4414, + "pid":4412, + "module": 25, + "title": "作废", + "name": "returnManagementInstructionBtnVoid", + "path": "", + "component": "returnManagementInstructionBtnVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "作废", + "icon": "" + } + }, + { + "id": 4415, + "pid":4412, + "module": 25, + "title": "反作废", + "name": "returnManagementInstructionBtnNoVoid", + "path": "", + "component": "returnManagementInstructionBtnNoVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "反作废", + "icon": "" + } + }, + { + "id": 4415, + "pid":4412, + "module": 25, + "title": "导出", + "name": "returnManagementInstructionBtnExport", + "path": "", + "component": "returnManagementInstructionBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "反作废", + "icon": "" + } + }, + { + "id": 4415, + "pid":4412, + "module": 25, + "title": "刷新", + "name": "returnManagementInstructionBtnRefresh", + "path": "", + "component": "returnManagementInstructionBtnRefresh", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "刷新", + "icon": "" + } + } + ] + }, + { + "id": 4416, + "pid":33, + "name": "returnManagementInstructionAdd", + "path": "/return/management/instruction/add", + "component": "/return/management/instruction/add", + "hidden": true, + "type":1, + "meta": { + "title": "新增退货指令单", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 199733, + "pid":4416, + "module": 25, + "title": "提交", + "name": "returnManagementInstructionAddBtnCommit", + "path": "", + "component": "returnManagementInstructionAddBtnCommit", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "提交", + "icon": "" + } + } + ] + }, + { + "id": 44151, + "pid":998, + "name": "returnManagementReturnOrder", + "path": "/return/management/returnOrder/index", + "component": "/return/management/returnOrder/index", + "hidden": false, + "type":1, + "children":[], + "meta": { + "title": "退货单", + "icon": "", + "isKeepAlive": true + } + } + ] + }] + }, + { + "id": 66, + "name": "other", + "type":1, + "path": "/other", + "component": "/other", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "其他", + "icon": "icon-shouhuoruku" + }, + "children":[{ + "id": 9986, + "pid":66, + "type":1, + "name": "otherOperation", + "path": "/other/operation", + "component": "/other/operation", + "meta": { + "title": "其他库内操作", + "icon": "" + }, + "icon": "", + "redirect": "", + "hidden": false, + "children": [ + { + "id": 44123, + "pid":9986, + "name": "otherOperationTransfer", + "path": "/other/operation/transfer/index", + "component": "/other/operation/transfer/index", + "hidden": false, + "type":1, + "meta": { + "title": "库位转移单", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 44131, + "pid":44123, + "module": 25, + "title": "导出", + "name": "otherOperationTransferBtnExport", + "path": "", + "component": "otherOperationTransferBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ] + }, + { + "id": 44166, + "pid":9986, + "name": "otherOperationTransferChangeBox", + "path": "/other/operation/changeBox/index", + "component": "/other/operation/changeBox/index", + "hidden": false, + "type":1, + "meta": { + "title": "改箱/装箱单", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 441314, + "pid":44163, + "module": 25, + "title": "导出", + "name": "otherOperationTransferChangeBoxBtnExport", + "path": "", + "component": "otherOperationTransferChangeBoxBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ] + }, + { + "id": 44167, + "pid":9986, + "name": "otherOperationTransferPicking", + "path": "/other/operation/picking/index", + "component": "/other/operation/picking/index", + "hidden": false, + "type":1, + "meta": { + "title": "拣货回退单列表", + "icon": "", + "isKeepAlive": true + }, + "children":[ + { + "id": 441313, + "pid":44167, + "module": 25, + "title": "导出", + "name": "otherOperationTransferPickingBtnExport", + "path": "", + "component": "otherOperationTransferPickingBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ] + }, + { + "id": 44168, + "pid":9986, + "name": "otherOperationTransferPickingDetails", + "path": "/other/operation/picking/details", + "component": "/other/operation/picking/details", + "hidden": true, + "type":1, + "meta": { + "title": "拣货回退单详情", + "icon": "", + "isKeepAlive": true + }, + "children":[] + } + ] + }] + }, + { + "id": 771, + "name": "shipment", + "type":1, + "path": "/shipment", + "component": "/shipment", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "发货", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7711, + "name": "shipmentOutbound", + "type":1, + "pid":771, + "path": "/shipment/outbound", + "component": "/shipment/outbound", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "发货出库", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7712, + "name": "shipmentOutboundShipmentOrder", + "type":1, + "pid":7711, + "path": "/shipment/outbound/shipmentOrder/index", + "component": "/shipment/outbound/shipmentOrder/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44331, + "pid":7712, + "module": 25, + "title": "新增", + "name": "shipmentOutboundShipmentOrderBtnAdd", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnAdd", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "新增", + "icon": "" + } + }, + { + "id": 44332, + "pid":7712, + "module": 25, + "title": "合并", + "name": "shipmentOutboundShipmentOrderBtnMerge", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnMerge", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "合并", + "icon": "" + } + }, + { + "id": 44333, + "pid":7712, + "module": 25, + "title": "作废", + "name": "shipmentOutboundShipmentOrderBtnVoid", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "作废", + "icon": "" + } + }, + { + "id": 44334, + "pid":7712, + "module": 25, + "title": "反作废", + "name": "shipmentOutboundShipmentOrderBtnNoVoid", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnNoVoid", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "反作废", + "icon": "" + } + }, + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "刷新", + "name": "shipmentOutboundShipmentOrderBtnRefresh", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnRefresh", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "刷新", + "icon": "" + } + }, + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "导出", + "name": "shipmentOutboundShipmentOrderBtnExport", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "完成", + "name": "shipmentOutboundShipmentOrderBtnComplete", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnComplete", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "完成", + "icon": "" + } + } + ], + "meta": { + "title": "发货单", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 7712, + "name": "shipmentOutboundShipmentOrderAdd", + "type":1, + "pid":7711, + "path": "/shipment/outbound/shipmentOrder/add", + "component": "/shipment/outbound/shipmentOrder/add", + "icon": "", + "redirect": "", + "hidden": true, + "children":[ + { + "id": 44131, + "pid":44123, + "module": 25, + "title": "保存", + "name": "shipmentOutboundShipmentOrderAddBtnSave", + "path": "", + "component": "shipmentOutboundShipmentOrderAddBtnSave", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "保存", + "icon": "" + } + }, + { + "id": 44131, + "pid":44123, + "module": 25, + "title": "提交", + "name": "shipmentOutboundShipmentOrderAddBtnCommit", + "path": "", + "component": "shipmentOutboundShipmentOrderAddBtnCommit", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "保存", + "icon": "" + } + } + ], + "meta": { + "title": "新增发货单", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 7712, + "name": "shipmentOutboundShipmentOrderDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/shipmentOrder/details", + "component": "/shipment/outbound/shipmentOrder/details", + "icon": "", + "redirect": "", + "hidden": true, + "children":[ + { + "id": 44131, + "pid":44123, + "module": 25, + "title": "更新物流", + "name": "shipmentOutboundShipmentOrderAddBtnUpData", + "path": "", + "component": "shipmentOutboundShipmentOrderAddBtnUpData", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "保存", + "icon": "" + } + } + ], + "meta": { + "title": "发货单详情", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77122, + "name": "shipmentOutboundPicking", + "type":1, + "pid":7711, + "path": "/shipment/outbound/picking/index", + "component": "/shipment/outbound/picking/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "导出", + "name": "shipmentOutboundPickingBtnExport", + "path": "", + "component": "shipmentOutboundPickingBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + + ], + "meta": { + "title": "拣货单", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77123, + "name": "shipmentOutboundPickingBatchDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/picking/batchDetails", + "component": "/shipment/outbound/picking/batchDetails", + "icon": "", + "redirect": "", + "hidden": true, + "children":[], + "meta": { + "title": "拣货单详情(按批次)", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77124, + "name": "shipmentOutboundPickingOrderDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/picking/orderDetails", + "component": "/shipment/outbound/picking/orderDetails", + "icon": "", + "redirect": "", + "hidden": true, + "children":[ + { + "id": 444335, + "pid":77124, + "module": 25, + "title": "保存", + "name": "shipmentOutboundPickingOrderDetailsBtnSave", + "path": "", + "component": "shipmentOutboundPickingOrderDetailsBtnSave", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "保存", + "icon": "" + } + } + ], + "meta": { + "title": "拣货单详情(按订单)", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77125, + "name": "shipmentOutboundShipping", + "type":1, + "pid":7711, + "path": "/shipment/outbound/shipping/index", + "component": "/shipment/outbound/shipping/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44336, + "pid":7711, + "module": 25, + "title": "导出", + "name": "shipmentOutboundShippingBtnExport", + "path": "", + "component": "shipmentOutboundShippingBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + + ], + "meta": { + "title": "装箱单", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77126, + "name": "shipmentOutboundShippingDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/shipping/details", + "component": "/shipment/outbound/shipping/details", + "icon": "", + "redirect": "", + "hidden": true, + "children":[ + ], + "meta": { + "title": "装箱单详情", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77125, + "name": "shipmentOutboundDelivery", + "type":1, + "pid":7711, + "path": "/shipment/outbound/delivery/index", + "component": "/shipment/outbound/delivery/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 4437, + "pid":7711, + "module": 25, + "title": "重传", + "name": "shipmentOutboundDeliveryBtnRetransmission", + "path": "", + "component": "shipmentOutboundDeliveryBtnRetransmission", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "重传", + "icon": "" + } + }, + { + "id": 44336, + "pid":7711, + "module": 25, + "title": "导出", + "name": "shipmentOutboundDeliveryBtnExport", + "path": "", + "component": "shipmentOutboundDeliveryBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + + ], + "meta": { + "title": "出库单", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 771233, + "name": "shipmentOutboundDeliveryBatchDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/delivery/batchDetails", + "component": "/shipment/outbound/delivery/batchDetails", + "icon": "", + "redirect": "", + "hidden": true, + "children":[], + "meta": { + "title": "出库单详情(按批次)", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 7712432, + "name": "shipmentOutboundDeliveryOrderDetails", + "type":1, + "pid":7711, + "path": "/shipment/outbound/delivery/orderDetails", + "component": "/shipment/outbound/delivery/orderDetails", + "icon": "", + "redirect": "", + "hidden": true, + "children":[], + "meta": { + "title": "出库单详情(按订单)", + "icon": "icon-shouhuoruku" + } + } + ] + } + ] + }, + { + "id": 771231, + "name": "inventory", + "type":1, + "path": "/inventory", + "component": "/inventory", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "盘点", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 771166, + "name": "shipmentManagement", + "type":1, + "pid":771231, + "path": "/inventory/management", + "component": "/inventory/management", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "盘点管理", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7712555, + "name": "shipmentManagementList", + "type":1, + "pid":771166, + "path": "/inventory/management/list/index", + "component": "/inventory/management/list/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "导出", + "name": "shipmentManagementListBtnExport", + "path": "", + "component": "shipmentManagementListBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + }, + { + "id": 44335, + "pid":7712, + "module": 25, + "title": "完成", + "name": "shipmentOutboundShipmentOrderBtnComplete", + "path": "", + "component": "shipmentOutboundShipmentOrderBtnComplete", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "完成", + "icon": "" + } + } + ], + "meta": { + "title": "盘点列表", + "icon": "icon-shouhuoruku" + } + } + ] + } + ] + }, + { + "id": 77123113, + "name": "report", + "type":1, + "path": "/report", + "component": "/report", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "报表", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7711666, + "name": "reportManagement", + "type":1, + "pid":77123113, + "path": "/report/management", + "component": "/report/management", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "报表管理", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 77125555, + "name": "reportManagementInstant", + "type":1, + "pid":7711666, + "path": "/report/management/instant/index", + "component": "/report/management/instant/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44335222, + "pid":77125555, + "module": 25, + "title": "导出", + "name": "reportManagementInstantBtnExport", + "path": "", + "component": "reportManagementInstantBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "即时库存明细", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77125556, + "name": "reportManagementMaterial", + "type":1, + "pid":7711666, + "path": "/report/management/material/index", + "component": "/report/management/material/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 443323235, + "pid":77125556, + "module": 25, + "title": "导出", + "name": "reportManagementMaterialBtnExport", + "path": "", + "component": "reportManagementMaterialBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "物料收发明细", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 77125557, + "name": "reportManagementBoxInventory", + "type":1, + "pid":7711666, + "path": "/report/management/boxInventory/index", + "component": "/report/management/boxInventory/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 44333212125, + "pid":77125557, + "module": 25, + "title": "导出", + "name": "reportManagementBoxInventoryBtnExport", + "path": "", + "component": "reportManagementBoxInventoryBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "箱库存查询", + "icon": "icon-shouhuoruku" + } + } + ] + } + ] + }, + { + "id": 77123114, + "name": "foundation", + "type":1, + "path": "/foundation", + "component": "/foundation", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "基础", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 7711667, + "name": "foundationSet", + "type":1, + "pid":77123114, + "path": "/foundation/set", + "component": "/foundation/set", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "基础设置", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 771255535, + "name": "foundationSetPriority", + "type":1, + "pid":77123114, + "path": "/foundation/set/priority/index", + "component": "/foundation/set/priority/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 443335222, + "pid":771255535, + "module": 25, + "title": "导出", + "name": "foundationSetPriorityBtnExport", + "path": "", + "component": "foundationSetPriorityBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "仓位找货优先级", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 7712555351, + "name": "foundationSetRelationship", + "type":1, + "pid":771255535, + "path": "/foundation/set/relationship/index", + "component": "/foundation/set/relationship/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 443323235, + "pid":7712555351, + "module": 25, + "title": "导出", + "name": "foundationSetRelationshipBtnExport", + "path": "", + "component": "foundationSetRelationshipBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "仓库关系", + "icon": "icon-shouhuoruku" + } + }, + { + "id": 44332323513, + "name": "foundationSetData", + "type":1, + "pid":771255535, + "path": "/foundation/set/data/index", + "component": "/foundation/set/data/index", + "icon": "", + "redirect": "", + "hidden": false, + "children":[ + { + "id": 4433321212532, + "pid":44332323513, + "module": 25, + "title": "导出", + "name": "foundationSetDataBtnExport", + "path": "", + "component": "foundationSetDataBtnExport", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "导出", + "icon": "" + } + } + ], + "meta": { + "title": "店铺资料", + "icon": "icon-shouhuoruku" + } + } + ] + },{ + "id": 7711669, + "name": "foundationSubscribe", + "type":1, + "pid":77123114, + "path": "/foundation/subscribe", + "component": "/foundation/subscribe", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "订阅设置", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 77116691, + "name": "foundationSubscribeList", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/index", + "component": "/foundation/subscribe/list/index", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "订阅列表", + "icon": "icon-shouhuoruku" + }, + "children":[ + { + "id": 4433522223, + "pid":77116691, + "module": 254, + "title": "新增", + "name": "foundationSubscribeListBtnAdd", + "path": "", + "component": "foundationSubscribeListBtnAdd", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "新增", + "icon": "" + } + }, + { + "id": 443352222, + "pid":77116691, + "module": 25, + "title": "删除", + "name": "foundationSubscribeListBtnDel", + "path": "", + "component": "foundationSubscribeListBtnDel", + "icon": "", + "redirect": "", + "sort": 1, + "type": 0, + "hidden": true, + "closed": false, + "disable": false, + "children": [], + "meta": { + "title": "删除", + "icon": "" + } + } + ] + }, + { + "id": 771166911, + "name": "foundationSubscribeListAdd", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/add", + "component": "/foundation/subscribe/list/add", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "新增订阅", + "icon": "icon-shouhuoruku" + }, + "children":[] + }, + { + "id": 7711669111, + "name": "foundationSubscribeListDetails", + "type":1, + "pid":7711669, + "path": "/foundation/subscribe/list/details", + "component": "/foundation/subscribe/list/details", + "icon": "", + "redirect": "", + "hidden": false, + "meta": { + "title": "订阅详情", + "icon": "icon-shouhuoruku" + }, + "children":[] + } + ] + } + ] + } + ], + "msg": "成功" +} diff --git a/src/auto-import.d.ts b/src/auto-import.d.ts new file mode 100644 index 0000000..e25e687 --- /dev/null +++ b/src/auto-import.d.ts @@ -0,0 +1,70 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import("vue")["EffectScope"]; + const ElMessageBox: typeof import("element-plus/es")["ElMessageBox"]; + const computed: typeof import("vue")["computed"]; + const createApp: typeof import("vue")["createApp"]; + const customRef: typeof import("vue")["customRef"]; + const defineAsyncComponent: typeof import("vue")["defineAsyncComponent"]; + const defineComponent: typeof import("vue")["defineComponent"]; + const effectScope: typeof import("vue")["effectScope"]; + const getCurrentInstance: typeof import("vue")["getCurrentInstance"]; + const getCurrentScope: typeof import("vue")["getCurrentScope"]; + const h: typeof import("vue")["h"]; + const inject: typeof import("vue")["inject"]; + const isProxy: typeof import("vue")["isProxy"]; + const isReactive: typeof import("vue")["isReactive"]; + const isReadonly: typeof import("vue")["isReadonly"]; + const isRef: typeof import("vue")["isRef"]; + const markRaw: typeof import("vue")["markRaw"]; + const nextTick: typeof import("vue")["nextTick"]; + const onActivated: typeof import("vue")["onActivated"]; + const onBeforeMount: typeof import("vue")["onBeforeMount"]; + const onBeforeRouteLeave: typeof import("vue-router")["onBeforeRouteLeave"]; + const onBeforeRouteUpdate: typeof import("vue-router")["onBeforeRouteUpdate"]; + const onBeforeUnmount: typeof import("vue")["onBeforeUnmount"]; + const onBeforeUpdate: typeof import("vue")["onBeforeUpdate"]; + const onDeactivated: typeof import("vue")["onDeactivated"]; + const onErrorCaptured: typeof import("vue")["onErrorCaptured"]; + const onMounted: typeof import("vue")["onMounted"]; + const onRenderTracked: typeof import("vue")["onRenderTracked"]; + const onRenderTriggered: typeof import("vue")["onRenderTriggered"]; + const onScopeDispose: typeof import("vue")["onScopeDispose"]; + const onServerPrefetch: typeof import("vue")["onServerPrefetch"]; + const onUnmounted: typeof import("vue")["onUnmounted"]; + const onUpdated: typeof import("vue")["onUpdated"]; + const provide: typeof import("vue")["provide"]; + const reactive: typeof import("vue")["reactive"]; + const readonly: typeof import("vue")["readonly"]; + const ref: typeof import("vue")["ref"]; + const resolveComponent: typeof import("vue")["resolveComponent"]; + const shallowReactive: typeof import("vue")["shallowReactive"]; + const shallowReadonly: typeof import("vue")["shallowReadonly"]; + const shallowRef: typeof import("vue")["shallowRef"]; + const toRaw: typeof import("vue")["toRaw"]; + const toRef: typeof import("vue")["toRef"]; + const toRefs: typeof import("vue")["toRefs"]; + const toValue: typeof import("vue")["toValue"]; + const triggerRef: typeof import("vue")["triggerRef"]; + const unref: typeof import("vue")["unref"]; + const useAttrs: typeof import("vue")["useAttrs"]; + const useCssModule: typeof import("vue")["useCssModule"]; + const useCssVars: typeof import("vue")["useCssVars"]; + const useLink: typeof import("vue-router")["useLink"]; + const useRoute: typeof import("vue-router")["useRoute"]; + const useRouter: typeof import("vue-router")["useRouter"]; + const useSlots: typeof import("vue")["useSlots"]; + const watch: typeof import("vue")["watch"]; + const watchEffect: typeof import("vue")["watchEffect"]; + const watchPostEffect: typeof import("vue")["watchPostEffect"]; + const watchSyncEffect: typeof import("vue")["watchSyncEffect"]; +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from "vue"; +} diff --git a/src/components.d.ts b/src/components.d.ts new file mode 100644 index 0000000..e8cbfce --- /dev/null +++ b/src/components.d.ts @@ -0,0 +1,55 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module "vue" { + export interface GlobalComponents { + ElAside: typeof import("element-plus/es")["ElAside"]; + ElAutocomplete: typeof import("element-plus/es")["ElAutocomplete"]; + ElBreadcrumb: typeof import("element-plus/es")["ElBreadcrumb"]; + ElBreadcrumbItem: typeof import("element-plus/es")["ElBreadcrumbItem"]; + ElButton: typeof import("element-plus/es")["ElButton"]; + ElCheckbox: typeof import("element-plus/es")["ElCheckbox"]; + ElContainer: typeof import("element-plus/es")["ElContainer"]; + ElDatePicker: typeof import("element-plus/es")["ElDatePicker"]; + ElDialog: typeof import("element-plus/es")["ElDialog"]; + ElDrawer: typeof import("element-plus/es")["ElDrawer"]; + ElDropdown: typeof import("element-plus/es")["ElDropdown"]; + ElDropdownItem: typeof import("element-plus/es")["ElDropdownItem"]; + ElDropdownMenu: typeof import("element-plus/es")["ElDropdownMenu"]; + ElForm: typeof import("element-plus/es")["ElForm"]; + ElFormItem: typeof import("element-plus/es")["ElFormItem"]; + ElHeader: typeof import("element-plus/es")["ElHeader"]; + ElIcon: typeof import("element-plus/es")["ElIcon"]; + ElInput: typeof import("element-plus/es")["ElInput"]; + ElInputNumber: typeof import("element-plus/es")["ElInputNumber"]; + ElMain: typeof import("element-plus/es")["ElMain"]; + ElMenu: typeof import("element-plus/es")["ElMenu"]; + ElMenuItem: typeof import("element-plus/es")["ElMenuItem"]; + ElOption: typeof import("element-plus/es")["ElOption"]; + ElPagination: typeof import("element-plus/es")["ElPagination"]; + ElScrollbar: typeof import("element-plus/es")["ElScrollbar"]; + ElSelect: typeof import("element-plus/es")["ElSelect"]; + ElSubMenu: typeof import("element-plus/es")["ElSubMenu"]; + ElSwitch: typeof import("element-plus/es")["ElSwitch"]; + ElTable: typeof import("element-plus/es")["ElTable"]; + ElTableColumn: typeof import("element-plus/es")["ElTableColumn"]; + ElTabPane: typeof import("element-plus/es")["ElTabPane"]; + ElTabs: typeof import("element-plus/es")["ElTabs"]; + ElTag: typeof import("element-plus/es")["ElTag"]; + ElTooltip: typeof import("element-plus/es")["ElTooltip"]; + IEpArrowDown: typeof import("~icons/ep/arrow-down")["default"]; + IEpCircleClose: typeof import("~icons/ep/circle-close")["default"]; + IEpFolderDelete: typeof import("~icons/ep/folder-delete")["default"]; + IEpFullScreen: typeof import("~icons/ep/full-screen")["default"]; + IEpRefresh: typeof import("~icons/ep/refresh")["default"]; + IEpRemove: typeof import("~icons/ep/remove")["default"]; + IEpSearch: typeof import("~icons/ep/search")["default"]; + IEpSwitchButton: typeof import("~icons/ep/switch-button")["default"]; + RouterLink: typeof import("vue-router")["RouterLink"]; + RouterView: typeof import("vue-router")["RouterView"]; + } +} diff --git a/src/components/DetailsSearch/index.vue b/src/components/DetailsSearch/index.vue new file mode 100644 index 0000000..f42d108 --- /dev/null +++ b/src/components/DetailsSearch/index.vue @@ -0,0 +1,373 @@ + + + + diff --git a/src/components/DetailsSearch/interface/index.ts b/src/components/DetailsSearch/interface/index.ts new file mode 100644 index 0000000..359a9a7 --- /dev/null +++ b/src/components/DetailsSearch/interface/index.ts @@ -0,0 +1,58 @@ +export interface formDataIProps { + reg?: any; + prop?: string; + label?: string; + isShow?: boolean; + maxLength?: any; + value?: any; //默认值 + bomList?: any; + placeholder?: string; + labelWidth?: string; + class?: string; + urlType?: string; + rules?: any; + error?: string; + showMessage?: boolean; + inlineMessage?: boolean; + size?: string; + style?: string; + autosize?: any; + inputWidth?: string; + brIndex?: number; + endDisabled?: any; + endProp?: any; + optionProps?: any; + startDisabled?: any; + startProp?: any; + rgx?: any; + isTxt?: any; + type: + | "input" + | "textarea" + | "select" + | "datetimepicker" + | "date" + | "daterange" + | "radio" + | "checked" + | "cascader" + | "selectRemote" + | "selectRemote1" + | "selectRemote2" + | "selectRemote3" + | "inputs" + | "selectMultiple" + | "customCondition"; + options?: any; + startPlaceholder?: string; + endPlaceholder?: string; + defaultTime?: any; + radios?: any; + checkeds?: any; + isCopy?: boolean; + required?: boolean; + disabled?: boolean; + formClass?: string; + isNumber?: boolean; + ruleForm?: any; +} diff --git a/src/components/ErrorMessage/403.vue b/src/components/ErrorMessage/403.vue new file mode 100644 index 0000000..4bb1874 --- /dev/null +++ b/src/components/ErrorMessage/403.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/components/ErrorMessage/404.vue b/src/components/ErrorMessage/404.vue new file mode 100644 index 0000000..cd1fa93 --- /dev/null +++ b/src/components/ErrorMessage/404.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/components/ErrorMessage/500.vue b/src/components/ErrorMessage/500.vue new file mode 100644 index 0000000..5899d26 --- /dev/null +++ b/src/components/ErrorMessage/500.vue @@ -0,0 +1,20 @@ + + + + + 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/Form/components/FormItem.vue b/src/components/Form/components/FormItem.vue new file mode 100644 index 0000000..f7f014a --- /dev/null +++ b/src/components/Form/components/FormItem.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/components/Form/index.vue b/src/components/Form/index.vue new file mode 100644 index 0000000..4c8cecd --- /dev/null +++ b/src/components/Form/index.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/components/FormTable/index.vue b/src/components/FormTable/index.vue new file mode 100644 index 0000000..2c619f6 --- /dev/null +++ b/src/components/FormTable/index.vue @@ -0,0 +1,189 @@ + + + + + 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..8793ee5 --- /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.scss b/src/components/ImportExcel/index.scss new file mode 100644 index 0000000..33de5c5 --- /dev/null +++ b/src/components/ImportExcel/index.scss @@ -0,0 +1,3 @@ +.upload { + width: 80%; +} diff --git a/src/components/ImportExcel/index.vue b/src/components/ImportExcel/index.vue new file mode 100644 index 0000000..1c7e38d --- /dev/null +++ b/src/components/ImportExcel/index.vue @@ -0,0 +1,151 @@ + + + + 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/PermissionButton/index.vue b/src/components/PermissionButton/index.vue new file mode 100644 index 0000000..f052ef6 --- /dev/null +++ b/src/components/PermissionButton/index.vue @@ -0,0 +1,66 @@ + + + + + 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/Empty.vue b/src/components/ProTable/components/Empty.vue new file mode 100644 index 0000000..e2b1baf --- /dev/null +++ b/src/components/ProTable/components/Empty.vue @@ -0,0 +1,12 @@ + + + + + diff --git a/src/components/ProTable/components/Pagination.vue b/src/components/ProTable/components/Pagination.vue new file mode 100644 index 0000000..c45a5bf --- /dev/null +++ b/src/components/ProTable/components/Pagination.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/ProTable/components/TableColumn.vue b/src/components/ProTable/components/TableColumn.vue new file mode 100644 index 0000000..6de1fab --- /dev/null +++ b/src/components/ProTable/components/TableColumn.vue @@ -0,0 +1,90 @@ + + + + diff --git a/src/components/ProTable/index.vue b/src/components/ProTable/index.vue new file mode 100644 index 0000000..d4b808c --- /dev/null +++ b/src/components/ProTable/index.vue @@ -0,0 +1,217 @@ + + + diff --git a/src/components/ProTable/interface/index.ts b/src/components/ProTable/interface/index.ts new file mode 100644 index 0000000..0001d6e --- /dev/null +++ b/src/components/ProTable/interface/index.ts @@ -0,0 +1,81 @@ +import { VNode, ComponentPublicInstance } 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" | "expand"; + +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; // 当前项搜索框的类型 + props?: any; // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件 + key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定 + order?: number; // 搜索项排序(从大到小) + span?: number; // 搜索项所占用的列数,默认为1列 + offset?: number; // 搜索字段左侧偏移列数 + defaultValue?: string | number | boolean | any[]; // 搜索项默认值 + 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, "children" | "renderCell" | "renderHeader">> { + tag?: boolean; // 是否是标签展示 + isShow?: boolean; // 是否显示在表格当中 + search?: SearchProps | undefined; // 搜索项配置 + enum?: EnumProps[] | ((params?: any) => Promise); // 枚举类型(字典) + isFilterEnum?: boolean; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据) + fieldNames?: FieldNamesProps; // 指定 label && value && children 的 key 值 + headerRender?: (scope: HeaderRenderScope) => VNode; // 自定义表头内容渲染(tsx语法) + render?: (scope: RenderScope) => VNode | string; // 自定义单元格内容渲染(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..293c639 --- /dev/null +++ b/src/components/SearchForm/components/SearchFormItem.vue @@ -0,0 +1,229 @@ + + + + diff --git a/src/components/SearchForm/components/index.scss b/src/components/SearchForm/components/index.scss new file mode 100644 index 0000000..4cd38d6 --- /dev/null +++ b/src/components/SearchForm/components/index.scss @@ -0,0 +1,26 @@ +.customCondition-container { + display: flex; + align-items: center; + justify-content: center; + .input-number-box { + display: flex; + align-items: center !important; + justify-content: center; + span { + margin: 0 4px; + } + } + .el-select { + // width: 172px!important; + margin-top: 1px !important; + + // margin-right: 10px; + } + .el-autocomplete { + width: 100% !important; + } + .el-input__inner { + height: 30px !important; + line-height: 30px !important; + } +} diff --git a/src/components/SearchForm/components/utils/inputRexArray.ts b/src/components/SearchForm/components/utils/inputRexArray.ts new file mode 100644 index 0000000..07e2a3f --- /dev/null +++ b/src/components/SearchForm/components/utils/inputRexArray.ts @@ -0,0 +1,15 @@ +import { convertSeparators } from "@/utils/regexp/convertSeparators"; +import { removeSpaces } from "@/utils/regexp/removeSpaces"; + +export const inputRexArray = (prop: string, _searchParam: any) => { + _searchParam.value[prop] = removeSpaces(_searchParam.value[prop]); + _searchParam.value[prop] = + _searchParam.value[prop].indexOf(",") > -1 ? convertSeparators(_searchParam.value[prop]) : _searchParam.value[prop]; + if (_searchParam.value[prop].indexOf(",") > -1) { + _searchParam.value[prop] = _searchParam.value[prop].split(","); + } else { + let array = []; + array.push(_searchParam.value[prop]); + _searchParam.value[prop] = array; + } +}; diff --git a/src/components/SearchForm/components/utils/verificationInput.ts b/src/components/SearchForm/components/utils/verificationInput.ts new file mode 100644 index 0000000..de55cf4 --- /dev/null +++ b/src/components/SearchForm/components/utils/verificationInput.ts @@ -0,0 +1,9 @@ +import { inputRexArray } from "./inputRexArray"; + +export const verificationInput = (item: any, _searchParam: any) => { + const { prop } = item; + //轉換成數組傳給後端 + if (item.isArray && _searchParam.value[prop]) { + inputRexArray(prop, _searchParam); + } +}; diff --git a/src/components/SearchForm/index.scss b/src/components/SearchForm/index.scss new file mode 100644 index 0000000..af0812f --- /dev/null +++ b/src/components/SearchForm/index.scss @@ -0,0 +1,46 @@ +.el-form-item--default { + margin-bottom: 8px; +} +.form-item { + width: 344px !important; + + // height: 32px; + margin-right: 12px !important; + .form-item-select { + width: 224px !important; + } +} +.form-box1 { + min-width: calc(100% - 217px); + max-width: calc(100% - 217px); // 184 + .form-item { + .form-item-select { + width: 224px !important; + } + } +} +.btn-box { + display: flex; + flex: 1; + justify-content: flex-end; +} +.copyBtn { + display: flex; + align-items: center; + justify-content: center; +} +.down-box { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + margin-right: 15px; + cursor: pointer; + border: 1px solid #cccccc; + border-radius: 4px; + &:hover { + color: #4178d5 !important; + border: 1px solid rgb(65 120 213 / 50%); + } +} diff --git a/src/components/SearchForm/index.vue b/src/components/SearchForm/index.vue new file mode 100644 index 0000000..63c9610 --- /dev/null +++ b/src/components/SearchForm/index.vue @@ -0,0 +1,313 @@ + + + diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..a371f59 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,13 @@ +// ? 全局默认配置项 + +// 首页地址(默认) +export const HOME_URL: string = "/index"; + +// 登录页地址(默认) +export const LOGIN_URL: string = "/login"; + +// 默认主题颜色 rgba(65, 120, 213, 1) 009688 +export const DEFAULT_PRIMARY: string = "#4178D5"; + +// 路由白名单地址(必须是本地存在的路由 staticRouter.ts 中) +export const ROUTER_WHITE_LIST: string[] = ["/500"]; 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/piniaPersist.ts b/src/config/piniaPersist.ts new file mode 100644 index 0000000..7240392 --- /dev/null +++ b/src/config/piniaPersist.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/config/serviceLoading.ts b/src/config/serviceLoading.ts new file mode 100644 index 0000000..5886957 --- /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 + * */ +export 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/directives/index.ts b/src/directives/index.ts new file mode 100644 index 0000000..fa0ea9d --- /dev/null +++ b/src/directives/index.ts @@ -0,0 +1,28 @@ +import { App, Directive } from "vue"; + +import copy from "./modules/copy"; +import waterMarker from "./modules/waterMarker"; +import draggable from "./modules/draggable"; +import debounce from "./modules/debounce"; +import throttle from "./modules/throttle"; +import longpress from "./modules/longpress"; +import permissionDirective from "./modules/permission"; +const directivesList: { [key: string]: Directive } = { + copy, + waterMarker, + draggable, + debounce, + throttle, + longpress, + permissionDirective +}; + +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/copy.ts b/src/directives/modules/copy.ts new file mode 100644 index 0000000..207d00a --- /dev/null +++ b/src/directives/modules/copy.ts @@ -0,0 +1,38 @@ +/** + * v-copy + * 复制某个值至剪贴板 + * 接收参数:string类型/Ref类型/Reactive类型 + */ +import type { Directive, DirectiveBinding } from "vue"; +import { ElMessage } from "element-plus"; +interface ElType extends HTMLElement { + copyData: string | number; + __handleClick__: any; +} +const copy: Directive = { + mounted(el: ElType, binding: DirectiveBinding) { + el.copyData = binding.value; + el.addEventListener("click", handleClick); + }, + updated(el: ElType, binding: DirectiveBinding) { + el.copyData = binding.value; + }, + beforeUnmount(el: ElType) { + el.removeEventListener("click", el.__handleClick__); + } +}; + +function handleClick(this: any) { + const input = document.createElement("input"); + input.value = this.copyData.toLocaleString(); + document.body.appendChild(input); + input.select(); + document.execCommand("Copy"); + document.body.removeChild(input); + ElMessage({ + type: "success", + message: "复制成功" + }); +} + +export default copy; diff --git a/src/directives/modules/debounce.ts b/src/directives/modules/debounce.ts new file mode 100644 index 0000000..b060aa0 --- /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(); + }, 800); + }; + el.addEventListener("click", el.__handleClick__); + }, + beforeUnmount(el: ElType) { + el.removeEventListener("click", el.__handleClick__); + } +}; + +export default debounce; diff --git a/src/directives/modules/draggable.ts b/src/directives/modules/draggable.ts new file mode 100644 index 0000000..66163e3 --- /dev/null +++ b/src/directives/modules/draggable.ts @@ -0,0 +1,49 @@ +/* + 需求:实现一个拖拽指令,可在父元素区域任意拖拽元素。 + + 思路: + 1、设置需要拖拽的元素为absolute,其父元素为relative。 + 2、鼠标按下(onmousedown)时记录目标元素当前的 left 和 top 值。 + 3、鼠标移动(onmousemove)时计算每次移动的横向距离和纵向距离的变化值,并改变元素的 left 和 top 值 + 4、鼠标松开(onmouseup)时完成一次拖拽 + + 使用:在 Dom 上加上 v-draggable 即可 +
+*/ +import type { Directive } from "vue"; +interface ElType extends HTMLElement { + parentNode: any; +} +const draggable: Directive = { + mounted: function (el: ElType) { + el.style.cursor = "move"; + el.style.position = "absolute"; + el.onmousedown = function (e) { + let disX = e.pageX - el.offsetLeft; + let disY = e.pageY - el.offsetTop; + document.onmousemove = function (e) { + let x = e.pageX - disX; + let y = e.pageY - disY; + let maxX = el.parentNode.offsetWidth - el.offsetWidth; + let maxY = el.parentNode.offsetHeight - el.offsetHeight; + if (x < 0) { + x = 0; + } else if (x > maxX) { + x = maxX; + } + + if (y < 0) { + y = 0; + } else if (y > maxY) { + y = maxY; + } + el.style.left = x + "px"; + el.style.top = y + "px"; + }; + document.onmouseup = function () { + document.onmousemove = document.onmouseup = null; + }; + }; + } +}; +export default draggable; diff --git a/src/directives/modules/longpress.ts b/src/directives/modules/longpress.ts new file mode 100644 index 0000000..f733c57 --- /dev/null +++ b/src/directives/modules/longpress.ts @@ -0,0 +1,49 @@ +/** + * v-longpress + * 长按指令,长按时触发事件 + */ +import type { Directive, DirectiveBinding } from "vue"; + +const directive: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + if (typeof binding.value !== "function") { + throw "callback must be a function"; + } + // 定义变量 + let pressTimer: any = null; + // 创建计时器( 2秒后执行函数 ) + const start = (e: any) => { + if (e.button) { + if (e.type === "click" && e.button !== 0) { + return; + } + } + if (pressTimer === null) { + pressTimer = setTimeout(() => { + handler(e); + }, 1000); + } + }; + // 取消计时器 + const cancel = () => { + if (pressTimer !== null) { + clearTimeout(pressTimer); + pressTimer = null; + } + }; + // 运行函数 + const handler = (e: MouseEvent | TouchEvent) => { + binding.value(e); + }; + // 添加事件监听器 + el.addEventListener("mousedown", start); + el.addEventListener("touchstart", start); + // 取消计时器 + el.addEventListener("click", cancel); + el.addEventListener("mouseout", cancel); + el.addEventListener("touchend", cancel); + el.addEventListener("touchcancel", cancel); + } +}; + +export default directive; diff --git a/src/directives/modules/permission.ts b/src/directives/modules/permission.ts new file mode 100644 index 0000000..9d8cb93 --- /dev/null +++ b/src/directives/modules/permission.ts @@ -0,0 +1,15 @@ +// 权限指令实现 +import { Directive } from "vue"; +import { useAuthStore } from "@/stores/modules/auth"; +const permissionDirective: Directive = { + mounted(el, binding) { + const authStore = useAuthStore(); + + const hasPerm = authStore.hasPermission(binding.value); + + if (!hasPerm) { + el.parentNode?.removeChild(el); + } + } +}; +export default permissionDirective; diff --git a/src/directives/modules/throttle.ts b/src/directives/modules/throttle.ts new file mode 100644 index 0000000..f91bd7a --- /dev/null +++ b/src/directives/modules/throttle.ts @@ -0,0 +1,41 @@ +/* + 需求:防止按钮在短时间内被多次点击,使用节流函数限制规定时间内只能点击一次。 + + 思路: + 1、第一次点击,立即调用方法并禁用按钮,等延迟结束再次激活按钮 + 2、将需要触发的方法绑定在指令上 + + 使用:给 Dom 加上 v-throttle 及回调函数即可 + +*/ +import type { Directive, DirectiveBinding } from "vue"; +interface ElType extends HTMLElement { + __handleClick__: () => any; + disabled: boolean; +} +const throttle: 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) { + clearTimeout(timer); + } + if (!el.disabled) { + el.disabled = true; + binding.value(); + timer = setTimeout(() => { + el.disabled = false; + }, 1000); + } + }; + el.addEventListener("click", el.__handleClick__); + }, + beforeUnmount(el: ElType) { + el.removeEventListener("click", el.__handleClick__); + } +}; + +export default throttle; diff --git a/src/directives/modules/waterMarker.ts b/src/directives/modules/waterMarker.ts new file mode 100644 index 0000000..94165e9 --- /dev/null +++ b/src/directives/modules/waterMarker.ts @@ -0,0 +1,36 @@ +/* + 需求:给整个页面添加背景水印。 + + 思路: + 1、使用 canvas 特性生成 base64 格式的图片文件,设置其字体大小,颜色等。 + 2、将其设置为背景图片,从而实现页面或组件水印效果 + + 使用:设置水印文案,颜色,字体大小即可 +
+*/ + +import type { Directive, DirectiveBinding } from "vue"; +const addWaterMarker: Directive = (str: string, parentNode: any, font: any, textColor: string) => { + // 水印文字,父元素,字体,文字颜色 + let can: HTMLCanvasElement = document.createElement("canvas"); + parentNode.appendChild(can); + can.width = 205; + can.height = 140; + can.style.display = "none"; + let cans = can.getContext("2d") as CanvasRenderingContext2D; + cans.rotate((-20 * Math.PI) / 180); + cans.font = font || "16px Microsoft JhengHei"; + cans.fillStyle = textColor || "rgba(180, 180, 180, 0.3)"; + cans.textAlign = "left"; + cans.textBaseline = "Middle" as CanvasTextBaseline; + cans.fillText(str, can.width / 10, can.height / 2); + parentNode.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")"; +}; + +const waterMarker = { + mounted(el: DirectiveBinding, binding: DirectiveBinding) { + addWaterMarker(binding.value.text, el, binding.value.font, binding.value.textColor); + } +}; + +export default waterMarker; diff --git a/src/enums/httpEnum.ts b/src/enums/httpEnum.ts new file mode 100644 index 0000000..dd782cf --- /dev/null +++ b/src/enums/httpEnum.ts @@ -0,0 +1,35 @@ +/** + * @description:请求配置 + */ +export enum ResultEnum { + SUCCESS = 200, + ERROR = 500, + OVERDUE = 401, + TIMEOUT = 300000, + 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..7cfc64f --- /dev/null +++ b/src/hooks/interface/index.ts @@ -0,0 +1,31 @@ +export namespace Table { + export interface Pageable { + page: number; + size: number; + total_size: number; + } + export interface StateProps { + tableData: any[]; + pageable: Pageable; + searchParam: { + [key: string]: any; + }; + // searchInitParam: { + // [key: string]: any; + // }; + totalParam: { + [key: string]: any; + }; + icon?: { + [key: string]: any; + }; + } +} + +export namespace HandleData { + export type MessageType = "" | "success" | "warning" | "info" | "error"; +} + +export namespace Theme { + export type GreyOrWeakType = "grey" | "weak"; +} diff --git a/src/hooks/useDateSort.ts b/src/hooks/useDateSort.ts new file mode 100644 index 0000000..9c4abb1 --- /dev/null +++ b/src/hooks/useDateSort.ts @@ -0,0 +1,14 @@ +export const useDateSort = (property: any, bol: any) => { + //property是你需要排序传入的key,bol为true时是升序,false为降序 + return function (a: any, b: any) { + let value1 = a[property]; + let value2 = b[property]; + if (bol) { + // 升序 + return Date.parse(value1) - Date.parse(value2); + } else { + // 降序 + return Date.parse(value2) - Date.parse(value1); + } + }; +}; diff --git a/src/hooks/useDecimal.ts b/src/hooks/useDecimal.ts new file mode 100644 index 0000000..dd0f5b3 --- /dev/null +++ b/src/hooks/useDecimal.ts @@ -0,0 +1,12 @@ +/** + * @description 精度处理 + * @param data 数据源 + * @param type Decimal方法 + * @param typeData mul | div| add | sub 方法参数 的数据 + * @return returnData {number} + * */ +import { Decimal } from "decimal.js"; +export const useDecimal = (data: number, type?: "mul" | "div" | "add" | "sub", typeData?: number) => { + let returnData = type && typeData ? new Decimal(data)[type](typeData).toNumber() : new Decimal(data).toNumber(); + return returnData; +}; diff --git a/src/hooks/useDownload.ts b/src/hooks/useDownload.ts new file mode 100644 index 0000000..c8fd01a --- /dev/null +++ b/src/hooks/useDownload.ts @@ -0,0 +1,44 @@ +import { ElNotification } from "element-plus"; + +/** + * @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); + 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/useFilter.ts b/src/hooks/useFilter.ts new file mode 100644 index 0000000..93d318a --- /dev/null +++ b/src/hooks/useFilter.ts @@ -0,0 +1,9 @@ +import { cloneDeep } from "lodash-es"; + +export const useFilter = (datas: any) => { + const target = cloneDeep(datas); + const returnTarget = target.filter((item: any) => { + return !item.disable; + }); + return returnTarget; +}; diff --git a/src/hooks/useHandleData.ts b/src/hooks/useHandleData.ts new file mode 100644 index 0000000..080f732 --- /dev/null +++ b/src/hooks/useHandleData.ts @@ -0,0 +1,34 @@ +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, + confirmType: HandleData.MessageType = "warning" +) => { + return new Promise((resolve, reject) => { + ElMessageBox.confirm(`是否${message}?`, "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: confirmType, + draggable: true + }).then(async () => { + const res = await api(params); + if (!res) return reject(false); + ElMessage({ + type: "success", + message: `${message}成功!` + }); + resolve(true); + }); + }); +}; diff --git a/src/hooks/useMsg.ts b/src/hooks/useMsg.ts new file mode 100644 index 0000000..50d51d8 --- /dev/null +++ b/src/hooks/useMsg.ts @@ -0,0 +1,10 @@ +import { ElMessage } from "element-plus"; + +export const useMsg = (type: any = "success", msg: string, duration?: number, showClose?: boolean) => { + ElMessage({ + showClose: showClose ? showClose : false, + message: msg, + type: type, + duration: duration ? duration : 3000 + }); +}; diff --git a/src/hooks/useOnline.ts b/src/hooks/useOnline.ts new file mode 100644 index 0000000..65554da --- /dev/null +++ b/src/hooks/useOnline.ts @@ -0,0 +1,27 @@ +import { ref, onMounted, onUnmounted } from "vue"; + +/** + * @description 网络是否可用 + * */ +export const useOnline = () => { + const online = ref(true); + const showStatus = (val: any) => { + online.value = typeof val == "boolean" ? val : val.target.online; + }; + // 在页面加载后,设置正确的网络状态 + navigator.onLine ? showStatus(true) : showStatus(false); + + onMounted(() => { + // 开始监听网络状态的变化 + window.addEventListener("online", showStatus); + window.addEventListener("offline", showStatus); + }); + + onUnmounted(() => { + // 移除监听网络状态的变化 + window.removeEventListener("online", showStatus); + window.removeEventListener("offline", showStatus); + }); + + return { online }; +}; diff --git a/src/hooks/usePathUrl.ts b/src/hooks/usePathUrl.ts new file mode 100644 index 0000000..ff3c796 --- /dev/null +++ b/src/hooks/usePathUrl.ts @@ -0,0 +1,6 @@ +export const usePathUrl = () => { + const PATH_URL = `${import.meta.env.VITE_APP_SSO_LOGINURL}?client_id=${ + import.meta.env.VITE_APP_SSO_APPID + }&redirect_uri=${encodeURIComponent(import.meta.env.VITE_REDIRECT_URL)}&response_type=code`; + return PATH_URL; +}; diff --git a/src/hooks/useSearch.ts b/src/hooks/useSearch.ts new file mode 100644 index 0000000..18b1d76 --- /dev/null +++ b/src/hooks/useSearch.ts @@ -0,0 +1,97 @@ +import { cloneDeep } from "lodash-es"; + +export const useSearchInfoArray = (target: any[]): any => { + //深拷贝一份,不影响源数据 + let targetClone: any[] = cloneDeep(target); + let returnTarget: any[] = []; + //如果是数组 + if (Array.isArray(targetClone) && targetClone.length) { + targetClone.forEach(item => { + let obj = { + value: item.id, + label: item.name, + ...item + }; + returnTarget.push(obj); + }); + } + return returnTarget; +}; +export const useSearchCodeInfoArray = (target: any[]): any => { + //深拷贝一份,不影响源数据 + let targetClone: any[] = cloneDeep(target); + let returnTarget: any[] = []; + //如果是数组 + if (Array.isArray(targetClone) && targetClone.length) { + targetClone.forEach(item => { + let obj = { + value: item.code, + label: item.name, + ...item + }; + returnTarget.push(obj); + }); + } + return returnTarget; +}; +export const useSearchInfoObject = (target: Record): any => { + //深拷贝一份,不影响源数据 + let targetClone: Record = cloneDeep(target); + let returnTarget: any[] = []; + if (Array.isArray(targetClone) && targetClone.length) { + targetClone.forEach(item => { + let obj = { + value: item.id, + label: item.name, + ...item + }; + returnTarget.push(obj); + }); + return returnTarget; + } + //如果是对象 + if (Object.prototype.toString.call(target) === "[object Object]") { + for (let key in targetClone) { + let obj: Record = { + value: isNaN(parseInt(key)) ? key : parseInt(key), //是字符串数字就转为数组 + label: targetClone[key] + }; + returnTarget.push(obj); + } + } + + return returnTarget; +}; + +//search配置项添加数据 +export const useSetSearchData = (target: any[], data: Record) => { + let targetClone = cloneDeep(target); + let length = targetClone.length; + //如果是数组 + if (Array.isArray(targetClone) && length) { + for (let i = 0; i < length; i++) { + let item = targetClone[i]; + if (data[item.prop] || data[item.label]) { + item.options = data[item.prop] || data[item.label]; + } + } + } + return targetClone; +}; +export const useSearchStockCodeInfoArray = (target: any[]): any => { + //深拷贝一份,不影响源数据 + let targetClone: any[] = cloneDeep(target); + let returnTarget: any[] = []; + //如果是数组 + if (Array.isArray(targetClone) && targetClone.length) { + targetClone.forEach(item => { + let obj = { + value: item.code, + label: item.name, + ...item + }; + returnTarget.push(obj); + }); + } + return returnTarget; +}; 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..3296b23 --- /dev/null +++ b/src/hooks/useTable.ts @@ -0,0 +1,142 @@ +import { Table } from "./interface"; +import { reactive, computed, toRefs, watch, isRef } from "vue"; + +export const useTable = ( + routeName: any, + api?: (params: any) => Promise, + initParam: object | Ref = {}, + isPageable: boolean = true, + requestError?: (error: any) => void, + clearSelection?: () => void +) => { + const state = reactive({ + tableData: [], + pageable: { + page: 1, + size: 50, + total_size: 0 + }, + searchParam: {}, + totalParam: {} // 保留作为参数快照 + }); + + // 分页参数计算属性 + const pageParam = computed({ + get: () => ({ + page: state.pageable.page, + size: state.pageable.size + }), + set: (newVal: any) => { + console.log("分页参数更新:", newVal); + } + }); + //订阅列表数据处理 + const initSubscribeData = () => { + if (routeName === "foundationSubscribeList") { + if (Array.isArray(state.totalParam?.org_number) && state.totalParam?.org_number?.length) { + state.totalParam.org_number = state.totalParam.org_number.join(","); + } + //品线 + if (Array.isArray(state.totalParam?.product_line_name) && state.totalParam?.product_line_name?.length) { + state.totalParam.org_number = state.totalParam.product_line_name.join(","); + } + //客户名称 + if (Array.isArray(state.totalParam?.customer_number) && state.totalParam?.customer_number?.length) { + state.totalParam.customer_number = state.totalParam.customer_number.join(","); + } + //客户编码 + if (state.totalParam?.customer_number1) { + if (Array.isArray(state.totalParam.customer_number) && !state.totalParam.customer_number.length) { + state.totalParam.customer_number = state.totalParam.customer_number1; + } else { + state.totalParam.customer_number = state.totalParam.customer_number + "," + state.totalParam.customer_number1; + } + } + } + }; + //删除临时参数和空值参数 + const deleteParams = () => { + const KEY = ["Time", "customer_number1"]; + for (let key in state.totalParam) { + if (KEY.includes(key) || !state.totalParam[key]) { + delete state.totalParam[key]; + } + } + }; + /** + * 获取表格数据 + * 每次请求都基于最新的initParam和分页参数重新合并 + */ + const getTableList = async () => { + if (!api) return; + + try { + initSubscribeData(); + deleteParams(); + let params = { + ...state.totalParam, + ...pageParam.value + }; + const { data } = await api(params); + state.tableData = data.data || []; + clearSelection && clearSelection(); + if (isPageable && data.total_size !== undefined) { + updatePageable({ + page: state.pageable.page, + size: state.pageable.size, + total_size: data.total_size + }); + } + } catch (error) { + console.error("表格数据请求失败:", error); + requestError && requestError(error); + } + }; + + /** + * 更新分页信息 + */ + const updatePageable = (pageable: Table.Pageable) => { + Object.assign(state.pageable, pageable); + }; + + /** + * 处理每页条数变化 + */ + const handleSizeChange = (val: number) => { + state.pageable.page = 1; // 重置到第一页 + state.pageable.size = val; + getTableList(); + }; + + /** + * 处理当前页变化 + */ + const handleCurrentChange = (val: number) => { + state.pageable.page = val; + getTableList(); + }; + + /** + * 监听initParam变化,同步到searchParam和totalParam + */ + watch( + () => (isRef(initParam) ? initParam.value : initParam), + (newVal: any) => { + state.totalParam = {}; + // 同步到查询参数 + state.searchParam = { ...newVal }; + // 同步到参数快照 + state.totalParam = { ...newVal, ...pageParam.value }; + }, + { deep: true, immediate: true } + ); + + return { + ...toRefs(state), + getTableList, + handleSizeChange, + handleCurrentChange, + updatePageable + }; +}; diff --git a/src/hooks/useTheme.ts b/src/hooks/useTheme.ts new file mode 100644 index 0000000..e783e6b --- /dev/null +++ b/src/hooks/useTheme.ts @@ -0,0 +1,87 @@ +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 { asideTheme, AsideThemeType } from "@/styles/theme/aside"; + +/** + * @description 全局主题 hooks + * */ +export const useTheme = () => { + const globalStore = useGlobalStore(); + const { primary, isDark, isGrey, isWeak, asideInverted, layout } = 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(); + }; + + // 修改主题颜色 + 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); + }; + + // 设置侧边栏样式 ==> light、inverted、dark + const setAsideTheme = () => { + // 默认所有侧边栏为 light 模式 + let type: AsideThemeType = "light"; + // 侧边栏反转色目前只支持在 vertical、classic 布局模式下生效 || transverse 布局下菜单栏默认为 inverted 模式 + if ((["vertical", "classic"].includes(layout.value) && asideInverted.value) || layout.value == "transverse") { + type = "inverted"; + } + // 侧边栏 dark 模式 + if (isDark.value) type = "dark"; + const theme = asideTheme[type!]; + for (const [key, value] of Object.entries(theme)) { + document.documentElement.style.setProperty(key, value); + } + }; + + // init theme + const initTheme = () => { + switchDark(); + if (isGrey.value) changeGreyOrWeak("grey", true); + if (isWeak.value) changeGreyOrWeak("weak", true); + }; + + return { + initTheme, + switchDark, + changePrimary, + changeGreyOrWeak, + setAsideTheme + }; +}; diff --git a/src/hooks/useTime.ts b/src/hooks/useTime.ts new file mode 100644 index 0000000..9bcbcd6 --- /dev/null +++ b/src/hooks/useTime.ts @@ -0,0 +1,41 @@ +import { ref } from "vue"; + +/** + * @description 获取本地时间 + */ +export const useTime = () => { + const year = ref(0); // 年份 + const month = ref(0); // 月份 + const week = ref(""); // 星期几 + const day = ref(0); // 天数 + const hour = ref(0); // 小时 + const minute = ref(0); // 分钟 + const second = ref(0); // 秒 + const nowTime = ref(""); // 当前时间 + const specificDate = ref(""); // 年月日 + // 更新时间 + const updateTime = () => { + const date = new Date(); + year.value = date.getFullYear(); + month.value = date.getMonth() + 1; + + week.value = "日一二三四五六".charAt(date.getDay()); + day.value = date.getDate(); + hour.value = + (date.getHours() + "")?.padStart(2, "0") || + new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(date.getHours()); + minute.value = + (date.getMinutes() + "")?.padStart(2, "0") || + new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(date.getMinutes()); + second.value = + (date.getSeconds() + "")?.padStart(2, "0") || + new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(date.getSeconds()); + nowTime.value = `${year.value}年${month.value}月${day.value} ${hour.value}:${minute.value}:${second.value}`; + + specificDate.value = year.value + "-" + month.value + "-" + day.value; + }; + + updateTime(); + console.log(year, month, day, hour, minute, second, week, nowTime, specificDate.value); + return { year, month, day, hour, minute, second, week, nowTime, specificDate }; +}; diff --git a/src/layouts/LayoutClassic/index.scss b/src/layouts/LayoutClassic/index.scss new file mode 100644 index 0000000..c2eab54 --- /dev/null +++ b/src/layouts/LayoutClassic/index.scss @@ -0,0 +1,83 @@ +.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: #191a20; + border-bottom: 1px solid #414243; + .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; + margin-right: 6px; + object-fit: contain; + } + .logo-text { + font-size: 18px; + font-weight: bold; + color: #dadada; + white-space: nowrap; + } + } + .tool-bar-lf { + .collapse-icon { + color: #e5eaf3; + } + .el-breadcrumb__inner.is-link { + color: #e5eaf3; + &:hover { + color: var(--el-color-primary); + } + } + .el-breadcrumb__item:last-child .el-breadcrumb__inner, + .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover { + color: #cfd3dc; + } + } + } + .header-ri { + .tool-bar-ri { + .toolBar-icon, + .username { + color: #e5eaf3; + } + } + } + } + .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-border-color-light); + .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..08bad37 --- /dev/null +++ b/src/layouts/LayoutClassic/index.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/layouts/LayoutColumns/index.scss b/src/layouts/LayoutColumns/index.scss new file mode 100644 index 0000000..eecedd9 --- /dev/null +++ b/src/layouts/LayoutColumns/index.scss @@ -0,0 +1,106 @@ +.el-container { + width: 100%; + height: 100%; + .aside-split { + display: flex; + flex-direction: column; + flex-shrink: 0; + width: 70px; + height: 100%; + background-color: #191a20; + border-right: 1px solid var(--el-border-color-light); + .logo { + box-sizing: border-box; + height: 55px; + border-bottom: 1px solid #282a35; + .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; + &:hover { + background-color: #292b35; + } + .el-icon { + font-size: 21px; + } + .title { + margin-top: 6px; + font-size: 12px; + } + .el-icon, + .title { + color: #e5eaf3; + } + } + .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-border-color-light); + 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; + border-bottom: 1px solid var(--el-border-color-light); + .logo-text { + font-size: 18px; + font-weight: bold; + color: var(--el-menu-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: #ffffff; + border-bottom: 1px solid var(--el-border-color-light); + :deep(.tool-bar-ri) { + .toolBar-icon, + .username { + color: var(--el-text-color-primary); + } + } + } +} diff --git a/src/layouts/LayoutColumns/index.vue b/src/layouts/LayoutColumns/index.vue new file mode 100644 index 0000000..043a98d --- /dev/null +++ b/src/layouts/LayoutColumns/index.vue @@ -0,0 +1,100 @@ + + + + + + diff --git a/src/layouts/LayoutTransverse/index.scss b/src/layouts/LayoutTransverse/index.scss new file mode 100644 index 0000000..9c55d68 --- /dev/null +++ b/src/layouts/LayoutTransverse/index.scss @@ -0,0 +1,56 @@ +.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: #191a20; + border-bottom: 1px solid var(--el-border-color-light); + .logo { + width: 210px; + margin-right: 30px; + .logo-img { + width: 28px; + margin-right: 6px; + object-fit: contain; + } + .logo-text { + font-size: 18px; + font-weight: bold; + color: #dadada; + white-space: nowrap; + } + } + .el-menu { + flex: 1; + height: 100%; + overflow: hidden; + border-bottom: none; + .el-sub-menu__hide-arrow { + width: 65px; + height: 55px; + } + .is-active { + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + &::before { + width: 0; + } + .el-sub-menu__title { + background-color: var(--el-color-primary) !important; + border-bottom-color: var(--el-color-primary) !important; + } + } + } + .tool-bar-ri { + .toolBar-icon, + .username { + color: #e5eaf3; + } + } + } +} diff --git a/src/layouts/LayoutTransverse/index.vue b/src/layouts/LayoutTransverse/index.vue new file mode 100644 index 0000000..a22a0e8 --- /dev/null +++ b/src/layouts/LayoutTransverse/index.vue @@ -0,0 +1,64 @@ + + + + + + diff --git a/src/layouts/LayoutVertical/index.scss b/src/layouts/LayoutVertical/index.scss new file mode 100644 index 0000000..a16ffa3 --- /dev/null +++ b/src/layouts/LayoutVertical/index.scss @@ -0,0 +1,54 @@ +.el-container { + width: 100%; + height: 100%; + :deep(.el-aside) { + width: auto; + background-color: var(--el-menu-bg-color); + border-right: 1px solid var(--el-border-color-light); + .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: 14px; + font-weight: bold; + color: var(--el-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 5px 0 30px; + background-color: var(--el-bg-color); + border-bottom: 1px solid var(--el-border-color-light); + :deep(.tool-bar-ri) { + .toolBar-icon, + .username { + color: var(--el-text-color-primary); + } + } + } +} diff --git a/src/layouts/LayoutVertical/index.vue b/src/layouts/LayoutVertical/index.vue new file mode 100644 index 0000000..a966cdd --- /dev/null +++ b/src/layouts/LayoutVertical/index.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/layouts/components/Header/ToolBarLeft.vue b/src/layouts/components/Header/ToolBarLeft.vue new file mode 100644 index 0000000..900558d --- /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..86113ff --- /dev/null +++ b/src/layouts/components/Header/ToolBarRight.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/layouts/components/Header/components/Avatar.vue b/src/layouts/components/Header/components/Avatar.vue new file mode 100644 index 0000000..4bb2924 --- /dev/null +++ b/src/layouts/components/Header/components/Avatar.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/layouts/components/Header/components/Breadcrumb.vue b/src/layouts/components/Header/components/Breadcrumb.vue new file mode 100644 index 0000000..caf1619 --- /dev/null +++ b/src/layouts/components/Header/components/Breadcrumb.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/layouts/components/Header/components/CollapseIcon.vue b/src/layouts/components/Header/components/CollapseIcon.vue new file mode 100644 index 0000000..e9b0c6f --- /dev/null +++ b/src/layouts/components/Header/components/CollapseIcon.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/layouts/components/Header/components/Fullscreen.vue b/src/layouts/components/Header/components/Fullscreen.vue new file mode 100644 index 0000000..b18c036 --- /dev/null +++ b/src/layouts/components/Header/components/Fullscreen.vue @@ -0,0 +1,10 @@ + + + diff --git a/src/layouts/components/Header/components/SearchMenu.vue b/src/layouts/components/Header/components/SearchMenu.vue new file mode 100644 index 0000000..2946fdd --- /dev/null +++ b/src/layouts/components/Header/components/SearchMenu.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/layouts/components/Main/components/Maximize.vue b/src/layouts/components/Main/components/Maximize.vue new file mode 100644 index 0000000..4c6ec27 --- /dev/null +++ b/src/layouts/components/Main/components/Maximize.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/layouts/components/Main/index.scss b/src/layouts/components/Main/index.scss new file mode 100644 index 0000000..a9300b7 --- /dev/null +++ b/src/layouts/components/Main/index.scss @@ -0,0 +1,10 @@ +.el-main { + box-sizing: border-box; + padding: 16px; + 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..b22c48e --- /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..d83f873 --- /dev/null +++ b/src/layouts/components/Menu/SubMenu.vue @@ -0,0 +1,51 @@ + + + + diff --git a/src/layouts/components/Menu/components/lv1.vue b/src/layouts/components/Menu/components/lv1.vue new file mode 100644 index 0000000..e9735a4 --- /dev/null +++ b/src/layouts/components/Menu/components/lv1.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/layouts/components/Menu/components/lv2.vue b/src/layouts/components/Menu/components/lv2.vue new file mode 100644 index 0000000..28b4e54 --- /dev/null +++ b/src/layouts/components/Menu/components/lv2.vue @@ -0,0 +1,102 @@ + + + + diff --git a/src/layouts/components/Tabs/components/MoreButton.vue b/src/layouts/components/Tabs/components/MoreButton.vue new file mode 100644 index 0000000..f54a82b --- /dev/null +++ b/src/layouts/components/Tabs/components/MoreButton.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/layouts/components/Tabs/components/init/init.ts b/src/layouts/components/Tabs/components/init/init.ts new file mode 100644 index 0000000..d96400c --- /dev/null +++ b/src/layouts/components/Tabs/components/init/init.ts @@ -0,0 +1,7 @@ +import { useStatusStore } from "@/stores/modules/status"; +const statusStore = useStatusStore(); +export const initCache = async (data: any) => { + await statusStore.$reset(); + //设置全局状态 + statusStore.setGlobalStatus(data); +}; diff --git a/src/layouts/components/Tabs/index.scss b/src/layouts/components/Tabs/index.scss new file mode 100644 index 0000000..abbb104 --- /dev/null +++ b/src/layouts/components/Tabs/index.scss @@ -0,0 +1,53 @@ +.tabs-box { + background-color: var(--el-bg-color); + .tabs-menu { + position: relative; + width: 100%; + .el-dropdown { + position: absolute; + top: 8px; + right: 13px; + } + :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% - 110px); + .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..b1b7c01 --- /dev/null +++ b/src/layouts/components/Tabs/index.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/layouts/index.vue b/src/layouts/index.vue new file mode 100644 index 0000000..1fd3e5c --- /dev/null +++ b/src/layouts/index.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/layouts/indexAsync.vue b/src/layouts/indexAsync.vue new file mode 100644 index 0000000..bd8b081 --- /dev/null +++ b/src/layouts/indexAsync.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..8b20db6 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,41 @@ +import { createApp } from "vue"; +import App from "./App.vue"; +import "default-passive-events"; +// reset style sheet +import "@/styles/reset.scss"; +// iosn icon +import "@/assets/fonto/iconfont.css"; +// svg icons +import "virtual:svg-icons-register"; +// iconfont css +import "@/assets/iconfont/iconfont.scss"; +// font css +// import "@/assets/fonts/font.scss"; + +//这个必须引入,解决ElMessageBox失效 +import "element-plus/dist/index.css"; +//公共样式 +import "@/styles/common.scss"; +// 重置 element 样式 +import "@/styles/element.scss"; +// svg icons +import "virtual:svg-icons-register"; + +// 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"; +import VXETable from "vxe-table"; +import "vxe-table/lib/style.css"; +localStorage.setItem("baseUrl", import.meta.env.VITE_SINGLE_URL); + +const app = createApp(App); + +app.config.errorHandler = errorHandler; + +app.use(directives).use(router).use(pinia).use(VXETable).mount("#app"); diff --git a/src/routers/index.ts b/src/routers/index.ts new file mode 100644 index 0000000..db7faf8 --- /dev/null +++ b/src/routers/index.ts @@ -0,0 +1,97 @@ +import { createRouter, 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"; + +/** + * @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.hidee ==> 是否在菜单中隐藏 (通常列表详情页需要隐藏) + * @param meta.isFull ==> 菜单是否全屏 (示例:数据大屏页面) + * @param meta.isAffix ==> 菜单是否固定在标签页中 (首页通常是固定项) + * @param meta.isKeepAlive ==> 当前路由是否缓存 + * */ +const router = createRouter({ + history: createWebHistory(), + 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.newUserToken) return next(from.fullPath); + resetRouter(); + return next(); + } + + // 4.判断访问页面是否在路由白名单地址(静态路由)中,如果存在直接放行 + if (ROUTER_WHITE_LIST.includes(to.path)) return next(); + + // 5.判断是否有 Token,没有重定向到 login 页面 + if (!userStore.newUserToken) 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); +}); + +/** + * @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..f72b677 --- /dev/null +++ b/src/routers/modules/dynamicRouter.ts @@ -0,0 +1,52 @@ +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(); + // 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/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/global.ts b/src/stores/interface/global.ts new file mode 100644 index 0000000..6816230 --- /dev/null +++ b/src/stores/interface/global.ts @@ -0,0 +1,23 @@ +/* GlobalState */ +export type LayoutType = "vertical" | "classic" | "transverse" | "columns"; + +export type AssemblySizeType = "large" | "default" | "small"; + +export type LanguageType = "zh" | "en" | null; +export interface GlobalState { + layout: LayoutType; + assemblySize: AssemblySizeType; + language: LanguageType; + maximize: boolean; + primary: string; + isDark: boolean; + isGrey: boolean; + isWeak: boolean; + asideInverted: boolean; + isCollapse: boolean; + breadcrumb: boolean; + breadcrumbIcon: boolean; + tabs: boolean; + tabsIcon: boolean; + footer: boolean; +} diff --git a/src/stores/interface/index.ts b/src/stores/interface/index.ts new file mode 100644 index 0000000..f6a4c41 --- /dev/null +++ b/src/stores/interface/index.ts @@ -0,0 +1,5 @@ +import { GlobalState } from "./global"; +import { TabsState } from "./tabs"; +import { KeepAliveState } from "./keepAlive"; + +export type { GlobalState, KeepAliveState, TabsState }; diff --git a/src/stores/interface/keepAlive.ts b/src/stores/interface/keepAlive.ts new file mode 100644 index 0000000..657a73e --- /dev/null +++ b/src/stores/interface/keepAlive.ts @@ -0,0 +1,4 @@ +/* KeepAliveState */ +export interface KeepAliveState { + keepAliveName: string[]; +} diff --git a/src/stores/interface/tabs.ts b/src/stores/interface/tabs.ts new file mode 100644 index 0000000..aefaf6b --- /dev/null +++ b/src/stores/interface/tabs.ts @@ -0,0 +1,13 @@ +/* tabsMenuProps */ +export interface TabsMenuProps { + icon: string; + title: string; + path: string; + name: string; + close: boolean; +} + +/* TabsState */ +export interface TabsState { + tabsMenuList: TabsMenuProps[]; +} diff --git a/src/stores/modules/auth.ts b/src/stores/modules/auth.ts new file mode 100644 index 0000000..c475b85 --- /dev/null +++ b/src/stores/modules/auth.ts @@ -0,0 +1,155 @@ +import { defineStore } from "pinia"; +import { getAuthMenuListApi } from "@/api/modules/login"; +import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, setKeeAliveRoute, extractButtonPermissions } from "@/utils"; + +// 定义权限相关类型 +interface ButtonPermissionMap { + [key: string]: boolean; +} + +interface PageButtonMap { + [pageName: string]: string[]; +} + +export const useAuthStore = defineStore({ + id: "wms-auth", + state: (): { + authMenuList: any[]; + routeName: string; + buttonPermissions: ButtonPermissionMap; + pageButtonMap: PageButtonMap; + } => ({ + // 菜单权限列表 + authMenuList: [], + // 当前页面的 router name,用来做按钮权限筛选 + routeName: "", + // 按钮权限映射表 {按钮name: 是否有权限} + buttonPermissions: {}, + // 页面与按钮的映射关系 {页面name: [按钮name1, 按钮name2]} + pageButtonMap: {} + }), + getters: { + // 菜单权限列表 ==> 处理缓存路由 + authMenuListGet: state => setKeeAliveRoute(state.authMenuList), + // 菜单权限列表 ==> 左侧菜单栏渲染,需要剔除 hidden == true + showMenuListGet: state => getShowMenuList(state.authMenuList), + // 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由 + flatMenuListGet: state => getFlatMenuList(state.authMenuList), + // 递归处理后的所有面包屑导航列表 + breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList), + // 当前页面的按钮权限列表 + currentPageButtons: state => { + return state.pageButtonMap[state.routeName] || []; + }, + // 检查是否有权限 + hasPermission: state => (permissionName: string | string[]) => { + if (Array.isArray(permissionName)) { + return permissionName.some(name => state.buttonPermissions[name]); + } + return !!state.buttonPermissions[permissionName]; + }, + // 检查当前页面是否有指定按钮权限 + hasCurrentPagePermission: state => (buttonName: string | string[]) => { + // 先检查是否有页面访问权限 + if (!state.pageButtonMap[state.routeName]) return false; + + if (Array.isArray(buttonName)) { + return buttonName.some( + name => state.pageButtonMap[state.routeName].includes(name) && state.buttonPermissions[name] + ); + } + return state.pageButtonMap[state.routeName].includes(buttonName) && state.buttonPermissions[buttonName]; + } + }, + actions: { + // 获取权限菜单列表并处理按钮权限 + async getAuthMenuList() { + const { data } = await getAuthMenuListApi(); + let dataClone = data; + + // 如果没有路由数据,设置默认首页 + this.authMenuList = dataClone || [ + { + path: "/index", + name: "home", + component: "/home/index", + hidden: true, + children: [], + meta: { + icon: "", + title: "首页", + isKeepAlive: true + } + } + ]; + + // 提取按钮权限 + this.buttonPermissions = extractButtonPermissions(this.authMenuList); + // 构建页面与按钮的映射关系 + this.buildPageButtonMap(); + }, + + // 构建页面与按钮的映射关系 + buildPageButtonMap() { + const pageButtonMap: PageButtonMap = {}; + + // 递归处理路由,建立页面与按钮的关联 + const processRoutes = (routes: any[], parentPageName?: string) => { + routes.forEach((route: any) => { + // 页面路由(type:1) + if (route.type === 1 && route.name) { + // 如果页面没有按钮列表,初始化一个空数组 + if (!pageButtonMap[route.name]) { + pageButtonMap[route.name] = []; + } + + // 处理子节点中的按钮权限 + if (route.children && route.children.length > 0) { + route.children.forEach((child: any) => { + // 按钮权限(type:0) + if (child.type === 0 && child.name) { + pageButtonMap[route.name].push(child.name); + } + // 如果有嵌套的子路由,继续递归 + if (child.children && child.children.length > 0) { + processRoutes(child.children, route.name); + } + }); + } + } + // 如果当前路由有子路由,继续递归处理 + else if (route.children && route.children.length > 0) { + processRoutes(route.children, parentPageName); + } + }); + }; + + processRoutes(this.authMenuList); + console.log(pageButtonMap, "=pageButtonMap="); + this.pageButtonMap = pageButtonMap; + }, + + // 设置当前路由名称 + setRouteName(name: string) { + this.routeName = name; + }, + + // 检查页面是否有权限访问 + hasPageAccess(pageName: string): boolean { + // 检查页面是否在权限列表中且未被禁用 + const checkPage = (routes: any[]): boolean => { + return routes.some(route => { + if (route.type === 1 && route.name === pageName && !route.disable) { + return true; + } + if (route.children && route.children.length > 0) { + return checkPage(route.children); + } + return false; + }); + }; + + return checkPage(this.authMenuList); + } + } +}); diff --git a/src/stores/modules/auth1.ts b/src/stores/modules/auth1.ts new file mode 100644 index 0000000..5544e8d --- /dev/null +++ b/src/stores/modules/auth1.ts @@ -0,0 +1,54 @@ +import { defineStore } from "pinia"; +// import router from "@/routers"; +import { getAuthMenuListApi } from "@/api/modules/login"; +import { getFlatMenuList, getShowMenuList, getAllBreadcrumbList, setKeeAliveRoute, extractButtonPermissions } from "@/utils"; +//setKeeAliveRoute +export const useAuthStore: any = defineStore({ + id: "wms-auth", + state: (): Record => ({ + // 菜单权限列表 + authMenuList: [], + // 当前页面的 router name,用来做按钮权限筛选 + routeName: "", + buttonPermissions: {} + }), + getters: { + // 菜单权限列表 ==> 这里的菜单没有经过任何处理(单点没有设置isKeepAlive的地方所有自己动手) + authMenuListGet: state => setKeeAliveRoute(state.authMenuList), + // 菜单权限列表 ==> 左侧菜单栏渲染,需要剔除 isHide == true + showMenuListGet: state => getShowMenuList(state.authMenuList), + // 菜单权限列表 ==> 扁平化之后的一维数组菜单,主要用来添加动态路由 + flatMenuListGet: state => getFlatMenuList(state.authMenuList), + // 递归处理后的所有面包屑导航列表 + breadcrumbListGet: state => getAllBreadcrumbList(state.authMenuList), + //设置按钮权限 + btnsAuthList: state => extractButtonPermissions(state.authMenuList) + }, + actions: { + // Get AuthMenuList + async getAuthMenuList() { + const { data } = await getAuthMenuListApi(); + let dataClone = data; + //如果有路由就使用路由,如果沒有就添加一個首頁,讓用戶條到首頁去 + this.authMenuList = dataClone || [ + { + path: "/index", + name: "home", + component: "/home/index", + hidden: true, + children: [], + meta: { + icon: "", + title: "首页", + isKeepAlive: 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..d48da11 --- /dev/null +++ b/src/stores/modules/global.ts @@ -0,0 +1,49 @@ +import { defineStore } from "pinia"; +import { GlobalState } from "@/stores/interface"; +import { DEFAULT_PRIMARY } from "@/config"; +import piniaPersistConfig from "@/config/piniaPersist"; + +export const useGlobalStore = defineStore({ + id: "wms-global", + // 修改默认值之后,需清除 localStorage 数据 + state: (): GlobalState => ({ + // 布局模式 (纵向:vertical | 经典:classic | 横向:transverse | 分栏:columns) + layout: "vertical", + // element 组件大小 + assemblySize: "default", + // 当前系统语言 + language: null, + // 当前页面是否全屏 + maximize: false, + // 主题颜色 + primary: DEFAULT_PRIMARY, + // 深色模式 + isDark: false, + // 灰色模式 + isGrey: false, + // 色弱模式 + isWeak: false, + // 侧边栏反转 (目前仅支持 'vertical' 模式) + asideInverted: false, + // 折叠菜单 + isCollapse: true, + // 面包屑导航 + breadcrumb: true, + // 面包屑导航图标 + breadcrumbIcon: true, + // 标签页 + tabs: true, + // 标签页图标 + tabsIcon: true, + // 页脚 + footer: true + }), + getters: {}, + actions: { + // Set GlobalState + setGlobalState(...args: ObjToKeyValArray) { + this.$patch({ [args[0]]: args[1] }); + } + }, + persist: piniaPersistConfig("wms-global") +}); diff --git a/src/stores/modules/keepAlive.ts b/src/stores/modules/keepAlive.ts new file mode 100644 index 0000000..f59e3be --- /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: "wms-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/status.ts b/src/stores/modules/status.ts new file mode 100644 index 0000000..04cf1a1 --- /dev/null +++ b/src/stores/modules/status.ts @@ -0,0 +1,20 @@ +import { defineStore } from "pinia"; +import piniaPersistConfig from "@/config/piniaPersist"; + +export const useStatusStore = defineStore({ + id: "wms-status", + // 修改默认值之后,需清除 localStorage 数据 + state: (): any => ({ + status: { + setSupplier: [] //供应商 + } + }), + getters: {}, + actions: { + // Set setSupplier + setSupplier(data: any) { + this.status.setSupplier = data; + } + }, + persist: piniaPersistConfig("wms-status") +}); diff --git a/src/stores/modules/tabs.ts b/src/stores/modules/tabs.ts new file mode 100644 index 0000000..4df4b86 --- /dev/null +++ b/src/stores/modules/tabs.ts @@ -0,0 +1,50 @@ +import router from "@/routers"; +import { defineStore } from "pinia"; +import { TabsState } from "@/stores/interface"; +import piniaPersistConfig from "@/config/piniaPersist"; + +export const useTabsStore = defineStore({ + id: "wms-tabs", + state: (): TabsState => ({ + tabsMenuList: [] + }), + actions: { + // Add Tabs + async addTabs(tabItem: any) { + if (this.tabsMenuList.every(item => item.path !== tabItem.path)) { + this.tabsMenuList.push(tabItem); + } + }, + // Remove Tabs + async removeTabs(tabPath: string, isCurrent: boolean = true) { + const tabsMenuList = this.tabsMenuList; + if (isCurrent) { + tabsMenuList.forEach((item, index) => { + if (item.path !== tabPath) return; + const nextTab = tabsMenuList[index + 1] || tabsMenuList[index - 1]; + if (!nextTab) return; + router.push(nextTab.path); + }); + } + this.tabsMenuList = tabsMenuList.filter(item => item.path !== tabPath); + }, + // Close MultipleTab + async closeMultipleTab(tabsMenuValue?: string) { + this.tabsMenuList = this.tabsMenuList.filter(item => { + return item.path === tabsMenuValue || !item.close; + }); + }, + // Set Tabs + async setTabs(tabsMenuList: any[]) { + this.tabsMenuList = tabsMenuList; + }, + // Set Tabs Title + async setTabsTitle(title: string) { + const nowFullPath = location.hash.substring(1); + this.tabsMenuList.forEach(item => { + if (item.path == nowFullPath) item.title = title; + }); + } + }, + persist: piniaPersistConfig("wms-tabs") +}); diff --git a/src/stores/modules/user.ts b/src/stores/modules/user.ts new file mode 100644 index 0000000..077667c --- /dev/null +++ b/src/stores/modules/user.ts @@ -0,0 +1,63 @@ +import { defineStore } from "pinia"; + +import { useSearchInfoArray, useSearchCodeInfoArray } from "@/hooks/useSearch"; //转换成表单可以用的数据 +import piniaPersistConfig from "@/config/piniaPersist"; + +export const useUserStore: any = defineStore({ + id: "wms-user", + state: () => ({ + newUserToken: "", + refreshToken: "", + phpToken: "", + userInfo: {}, + orgIdArr: [], + orgCode: "", + orgId: 0, + orgName: "", + warehouse: [], + dept: [] + }), + getters: {}, + actions: { + // Set Token + setToken(token: string) { + this.newUserToken = token; + }, + setRefreshToken(refreshToken: string) { + this.refreshToken = refreshToken; + }, + setPhpToken(token: string) { + this.phpToken = token; + }, + // 用户信息 + setUserInfo(userInfo: Record) { + this.userInfo = userInfo; + }, + // 组织 + setOrgIdArr(orgs: any) { + this.orgIdArr = orgs; + console.log(this.orgIdArr); + }, + //组织ID + setOrgId(orgId: any) { + this.orgId = orgId; + }, + //组织code + setOrgCode(orgCode: any) { + this.orgCode = orgCode ? orgCode : ""; + }, + //默认组织名称 + setOrgName(orgName: any) { + this.orgName = orgName; + }, + //组织下的部门 + setDept(dept: any) { + this.dept = useSearchInfoArray(dept); + }, + //组织下的仓库 + setWarehouse(warehouse: any) { + this.warehouse = useSearchCodeInfoArray(warehouse); + } + }, + persist: piniaPersistConfig("wms-user") +}); diff --git a/src/styles/common.scss b/src/styles/common.scss new file mode 100644 index 0000000..d8bb708 --- /dev/null +++ b/src/styles/common.scss @@ -0,0 +1,139 @@ +/* flex */ +.flx-center { + display: flex; + align-items: center; + justify-content: center; +} + +// 垂直居中,平均分布 +.flx-justify-between { + display: flex; + align-items: center; + justify-content: space-between; +} + +// 左右居中 +.flx-justify-center { + display: flex; + justify-content: center; +} + +// 垂直居中 +.flx-align-center { + display: flex; + align-items: center; +} +.flx { + display: flex; +} + +/* clearfix */ +.clearfix::after { + display: block; + height: 0; + overflow: hidden; + clear: both; + content: ""; +} + +/* 文字单行省略号 */ +.sle { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* 文字多行省略号 */ +.mle { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +/* 文字多了自动換行 */ +.break-word { + color: #4178d5; + word-break: break-all; + word-wrap: break-word; + cursor: pointer; +} + +/* 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 40 { + .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; + } +} +.font12 { + font-size: 12px !important; +} diff --git a/src/styles/element.scss b/src/styles/element.scss new file mode 100644 index 0000000..d5e98a7 --- /dev/null +++ b/src/styles/element.scss @@ -0,0 +1,270 @@ +/* 设置 notification、message 层级在 loading 之上 */ +.el-message, +.el-notification { + z-index: 2058 !important; +} + +// .el-message, +// .el-message--info { +// color: red !important; +// } + +/* el-alert */ +.el-alert { + border: 1px solid; +} + +/* 当前页面最大化 css */ +.main-maximize { + .aside-split, + .el-aside, + .el-header, + .el-footer, + .tabs-box { + display: none !important; + } +} + +/* custom card */ +.card { + box-sizing: border-box; + padding: 16px; + 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 { + // 这里减去的是 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 { + margin-bottom: 10px; + .el-form { + .el-form-item__content > * { + width: 100%; + } + + // 去除时间选择器上下 padding + .el-range-editor.el-input__wrapper { + padding: 0 10px; + } + } + .operation { + display: flex; + align-items: center; + justify-content: flex-end; + margin-bottom: 18px; + } + } + + // 表格 header 样式 + .table-header { + .header-button-lf { + float: left; + } + .header-button-ri { + float: right; + } + .el-button { + margin-bottom: 15px; + } + } + + // 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: 12px; + font-weight: bold; + color: var(--el-text-color-primary); + background: var(--el-fill-color-light); + } + .el-table__row { + height: 45px; + font-size: 12px; + .el-table__placeholder { + display: inline; + } + } + + // 设置 el-table 中 header 文字不换行,并省略 + .el-table__header .el-table__cell > .cell { + // color: red; + white-space: nowrap; + + // border-right: 1px solid rgb(206 209 217 / 100%); + } + + // 解决表格数据为空时样式不居中问题(仅在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: 20px; + } +} + +/* 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; + } + } +} +.el { + font-size: 12px !important; +} +.el-form-item--default { + font-size: 12px !important; +} +.el-pagination__total { + font-size: 12px !important; +} +.el-table__cell .cell div { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} 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..f66eb00 --- /dev/null +++ b/src/styles/theme/aside.ts @@ -0,0 +1,34 @@ +export type AsideThemeType = "light" | "inverted" | "dark"; + +export const asideTheme: Record = { + light: { + "--el-logo-text-color": "#303133", + "--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-logo-text-color": "#dadada", + "--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-logo-text-color": "#dadada", + "--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/theme/element-dark.scss b/src/styles/theme/element-dark.scss new file mode 100644 index 0000000..4891297 --- /dev/null +++ b/src/styles/theme/element-dark.scss @@ -0,0 +1,37 @@ +/* 自定义 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-border-color: var(--el-border-color-darker); + + /* 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; + } + } + } + } + + /* layout */ + .el-container { + // columns layout + .aside-split { + background-color: var(--el-bg-color) !important; + .logo { + border-bottom: 1px solid var(--el-border-color-light) !important; + } + } + .el-header { + background-color: var(--el-bg-color) !important; + } + } +} diff --git a/src/styles/var.scss b/src/styles/var.scss new file mode 100644 index 0000000..a066b5d --- /dev/null +++ b/src/styles/var.scss @@ -0,0 +1,12 @@ +/* global css variable */ + +// $primary-color: var(--el-color-primary); + +@forward "element-plus/theme-chalk/src/common/var.scss" with ( + // $colors: ( + // "primary": ( + // "base": green + // ) + // ), + $font-size: ("base": 12px) +); diff --git a/src/types/vueGlobal.d.ts b/src/types/vueGlobal.d.ts new file mode 100644 index 0000000..8e93c65 --- /dev/null +++ b/src/types/vueGlobal.d.ts @@ -0,0 +1,6 @@ +import { Emitter } from "mitt"; +declare module "vue" { + interface ComponentCustomProperties { + $Bus: Emitter; + } +} diff --git a/src/typings/global.d.ts b/src/typings/global.d.ts new file mode 100644 index 0000000..64465d4 --- /dev/null +++ b/src/typings/global.d.ts @@ -0,0 +1,81 @@ +/* Menu */ +declare namespace Menu { + interface MenuOptions { + path: string; + name: string; + component?: string | (() => Promise); + redirect?: string; + meta: MetaProps; + children?: MenuOptions[]; + hidden?: boolean; + } + interface MetaProps { + icon: string; + title: string; + activeMenu?: string; + isLink?: string; + isFull?: boolean; + isAffix?: boolean; + isKeepAlive?: boolean; + children?: MenuOptions[]; + } +} + +/* 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_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_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; +}; + +/* Generic Tools */ +type ObjToKeyValUnion = { + [K in keyof T]: { key: K; value: T[K] }; +}[keyof T]; + +type ObjToKeyValArray = { + [K in keyof T]: [K, T[K]]; +}[keyof T]; 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/eleValidate.ts b/src/utils/eleValidate.ts new file mode 100644 index 0000000..e992615 --- /dev/null +++ b/src/utils/eleValidate.ts @@ -0,0 +1,32 @@ +// ? 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(); + } +} + +export function numberRexgu(value: any) { + if (value) { + if (value.toString().indexOf(".") != -1) { + let value_after = parseInt(value.toString().substring(0, value.indexOf("."))); + let value_before = value.replace(/\d+\.(\d*)/, "$1"); + if (value_after.toString().length > 8) { + let newValue = value_after.toString().substring(0, 8) + "." + value_before; + return (newValue.toString().match(/\d{1,8}(\.\d{0,6})?/) || [""])[0]; + } else { + return (value.toString().match(/\d{1,8}(\.\d{0,6})?/) || [""])[0]; + } + } + return (value.toString().match(/\d{1,8}(\.\d{0,6})?/) || [""])[0]; + } else { + return ""; + } +} diff --git a/src/utils/errorHandler.ts b/src/utils/errorHandler.ts new file mode 100644 index 0000000..3512715 --- /dev/null +++ b/src/utils/errorHandler.ts @@ -0,0 +1,39 @@ +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] || "未知错误"; + + console.log("%c" + "====================================================", "color: red"); + console.error("O(∩_∩)O哈哈~,菜鸡又,又报错啦!!!"); + console.error(errorName + ":", error); + console.log("%c" + "====================================================", "color: red"); + + const NODE_ENV: string = import.meta.env.MODE as string; + console.log(NODE_ENV); + + if (NODE_ENV === "development") { + 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..39070aa --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,338 @@ +import { isArray } from "@/utils/is"; +import { FieldNamesProps } from "@/components/ProTable/interface"; +//import { cloneDeep } from "lodash-es"; + +/** + * @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)); +} + +/** + * @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 使用递归扁平化菜单,方便添加动态路由 + * @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 使用递归过滤出需要渲染在左侧菜单的列表 (需剔除 hidden == false 的菜单) + * @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?.hidden; + }); +} + +/** + * @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 function setKeeAliveRoute(menuList: any[]) { + menuList.forEach(item => { + if (item.title !== "导出") { + item.meta.isKeepAlive = true; + + if (item?.children && item?.children.length) { + setKeeAliveRoute(item?.children); + } + } + }); + return menuList; +} + +/** + * @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; +} + +// 递归提取所有按钮权限 +export const extractButtonPermissions: any = (routes: any[], permissionMap: any = {}): any => { + routes.forEach(route => { + // type: 0 表示是按钮权限 + if (route.type === 0 && route.name) { + permissionMap[route.name] = true; + } + + // 递归处理子路由 + if (route.children && route.children.length > 0) { + extractButtonPermissions(route.children, permissionMap); + } + }); + + return permissionMap; +}; + +// 检查是否有权限 +export const hasPermission = (permissionMap: any, permissionName: string | string[]): boolean => { + if (Array.isArray(permissionName)) { + // 多个权限满足一个即可 + return permissionName.some(name => permissionMap[name]); + } + // 单个权限检查 + return !!permissionMap[permissionName]; +}; + +/** + * @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 ? callValue : "--"; +} + +/** + * @description 处理值无数据情况 + * @param {*} callValue 需要处理的值 + * @returns {String} + * */ +export function formatValue(callValue: any) { + // 如果当前值为数组,使用 / 拼接(根据需求自定义) + if (isArray(callValue)) return callValue.length ? callValue.join(" / ") : "--"; + return callValue ? 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 根据枚举列表查询当需要的数据(如果指定了 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 递归查找 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); +} 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..ce36de5 --- /dev/null +++ b/src/utils/mittBus.ts @@ -0,0 +1,5 @@ +import mitt from "mitt"; + +const $Bus = mitt(); + +export default $Bus; diff --git a/src/utils/regexp/boxCodeCtn.ts b/src/utils/regexp/boxCodeCtn.ts new file mode 100644 index 0000000..fbd348e --- /dev/null +++ b/src/utils/regexp/boxCodeCtn.ts @@ -0,0 +1,9 @@ +//只允许输入CTN开头并且CTN后面只能跟数字 +export const boxCodeCtn = (target: any) => { + console.log(target.length); + return target.replace(/[^C|c|T|t|N|n]/g, ""); + if ((target.length === 1 && target !== "c") || target !== "C") { + console.log("123232323"); + return ""; + } +}; diff --git a/src/utils/regexp/convertSeparators.ts b/src/utils/regexp/convertSeparators.ts new file mode 100644 index 0000000..babb9d0 --- /dev/null +++ b/src/utils/regexp/convertSeparators.ts @@ -0,0 +1,7 @@ +import { cloneDeep } from "lodash-es"; + +//将中文逗号(,)和分号(;)替换为英文逗号(,) +export const convertSeparators = (str: string) => { + let strClone = cloneDeep(str); + return strClone.replace(/,/g, ","); +}; diff --git a/src/utils/regexp/index.ts b/src/utils/regexp/index.ts new file mode 100644 index 0000000..894ae37 --- /dev/null +++ b/src/utils/regexp/index.ts @@ -0,0 +1,8 @@ +import { inputEnterRexg } from "./inputEnterRexg"; +import { numberRexg } from "./numberRexg"; +import { productRexg } from "./productRexg"; +import { integerRexg } from "./integerRexg"; +import { unitMultipleInputRexg } from "./unitMultipleInputRexg"; +import { numberRexg1 } from "./numberRexg1"; +import { numberDecimalSeparatorRexg } from "./numberDecimalSeparatorRexg"; +export { numberRexg, inputEnterRexg, productRexg, integerRexg, unitMultipleInputRexg, numberRexg1, numberDecimalSeparatorRexg }; diff --git a/src/utils/regexp/inputEnterRexg.ts b/src/utils/regexp/inputEnterRexg.ts new file mode 100644 index 0000000..2b0c42e --- /dev/null +++ b/src/utils/regexp/inputEnterRexg.ts @@ -0,0 +1,26 @@ +import { useMsg } from "@/hooks/useMsg"; +//只允许输入数字和6位小数 +export const inputEnterRexg = function (inputValue: any, empty?: any) { + inputValue = inputValue.replace(/[^\d.]/g, ""); // 清除"数字"和"."以外的字符 只能输入数字和小数点 + inputValue = inputValue.replace(/\.{2,}/g, "."); // 不能连续输入两个及以上小数点 + inputValue = inputValue.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); // 只保留第一个".", 清除多余的"." + inputValue = inputValue.replace(/^(-)*(\d+)\.(\d\d\d\d\d\d).*$/, "$1$2.$3"); // 只能输入六位小数 + if (inputValue && inputValue.indexOf(".") < 0 && inputValue != "") { + inputValue = parseFloat(inputValue); + inputValue = inputValue + ""; + inputValue = inputValue.slice(0, 8); + } // 如果没有小数点,首位不能为类似于 01、02的值 + // 输入过程中,只能输入六位小数且六位小数都为零,则清空小数点和后面的六个零(如果输入完成了只输入四个零,则在blur事件中处理) + if (inputValue.indexOf(".") > 0 && inputValue.length - inputValue.indexOf(".") > 6) { + let str = inputValue.slice(inputValue.indexOf("."), inputValue.length); + if (str / 1 <= 0) { + inputValue = inputValue.replace(str, ""); + } + } + if (inputValue.length > 15) { + useMsg("warning", "仅限数字输入,小数点后最多6位,小数点前最多8位,请重新输入"); + return empty ? "" : 0; + } else { + return inputValue; + } +}; diff --git a/src/utils/regexp/integer.ts b/src/utils/regexp/integer.ts new file mode 100644 index 0000000..82bbd4e --- /dev/null +++ b/src/utils/regexp/integer.ts @@ -0,0 +1,3 @@ +export const integer = (target: any) => { + return target.replace(/[^1-9]/g, ""); +}; diff --git a/src/utils/regexp/integerNumber.ts b/src/utils/regexp/integerNumber.ts new file mode 100644 index 0000000..dcea3f1 --- /dev/null +++ b/src/utils/regexp/integerNumber.ts @@ -0,0 +1,6 @@ +export const integerNumber = (target: any) => { + if (!target) { + return target; + } + return target.replace(/[^0-9]/g, ""); +}; diff --git a/src/utils/regexp/integerRexg.ts b/src/utils/regexp/integerRexg.ts new file mode 100644 index 0000000..0f1dc60 --- /dev/null +++ b/src/utils/regexp/integerRexg.ts @@ -0,0 +1,8 @@ +//只允许输入整数 +export const integerRexg = (value: any) => { + if (!value) { + return; + } + let result = value.replace(/^(0+)|[^\d]+/g, ""); + return result; +}; diff --git a/src/utils/regexp/numberDecimalSeparatorRexg.ts b/src/utils/regexp/numberDecimalSeparatorRexg.ts new file mode 100644 index 0000000..3ba3a93 --- /dev/null +++ b/src/utils/regexp/numberDecimalSeparatorRexg.ts @@ -0,0 +1,11 @@ +//只允许输入数字和小数点 +export const numberDecimalSeparatorRexg = (value: any) => { + if (!value) { + return; + } + + value = value.replace(/[^\d.]/g, ""); // 清除"数字"和"."以外的字符 只能输入数字和小数点 + value = value.replace(/\.{2,}/g, "."); // 不能连续输入两个及以上小数点 + value = value.replace(".", "$#$").replace(/\./g, "").replace("$#$", "."); // 只保留第一个".", 清除多余的"." + return value; +}; diff --git a/src/utils/regexp/numberRexg.ts b/src/utils/regexp/numberRexg.ts new file mode 100644 index 0000000..e25a503 --- /dev/null +++ b/src/utils/regexp/numberRexg.ts @@ -0,0 +1,18 @@ +// 数字验证,小数点前8位&小数点后4位 +export const numberRexg = (value: any) => { + if (value) { + if (value.toString().indexOf(".") != -1) { + let value_after = parseInt(value.toString().substring(0, value.indexOf("."))); + let value_before = value.replace(/\d+\.(\d*)/, "$1"); + if (value_after.toString().length > 8) { + let newValue = value_after.toString().substring(0, 8) + "." + value_before; + return (newValue.toString().match(/\d{1,8}(\.\d{0,4})?/) || [""])[0]; + } else { + return (value.toString().match(/\d{1,8}(\.\d{0,4})?/) || [""])[0]; + } + } + return (value.toString().match(/\d{1,8}(\.\d{0,4})?/) || [""])[0]; + } else { + return ""; + } +}; diff --git a/src/utils/regexp/numberRexg1.ts b/src/utils/regexp/numberRexg1.ts new file mode 100644 index 0000000..adb6c31 --- /dev/null +++ b/src/utils/regexp/numberRexg1.ts @@ -0,0 +1,17 @@ +//前3后4 +export const numberRexg1 = (value: any) => { + if (!value) { + return; + } + if (value.toString().indexOf(".") != -1) { + let value_after = parseInt(value.toString().substring(0, value.indexOf("."))); + let value_before = value.replace(/\d+\.(\d*)/, "$1"); + if (value_after.toString().length > 3) { + let newValue = value_after.toString().substring(0, 3) + "." + value_before; + return (newValue.toString().match(/\d{1,3}(\.\d{0,4})?/) || [""])[0]; + } else { + return (value.toString().match(/\d{1,3}(\.\d{0,4})?/) || [""])[0]; + } + } + return (value.toString().match(/\d{1,3}(\.\d{0,4})?/) || [""])[0]; +}; diff --git a/src/utils/regexp/productRexg.ts b/src/utils/regexp/productRexg.ts new file mode 100644 index 0000000..e3021ab --- /dev/null +++ b/src/utils/regexp/productRexg.ts @@ -0,0 +1,17 @@ +//尺寸/质量信息输入验证 +export const productRexg = (value: any) => { + if (!value) { + return; + } + let result = value + .toString() + .replace(/^0/) + .replace(/[^\d.]/g, "") + .replace(/\.{2,}/g, ".") + .replace(/^\./g, "") + .replace(".", "$#$") + .replace(/\./g, "") + .replace("$#$", ".") + .replace(/^(-)*(\d+)\.(\d\d\d\d).*$/, "$1$2.$3"); + return result; +}; diff --git a/src/utils/regexp/removeSpaces.ts b/src/utils/regexp/removeSpaces.ts new file mode 100644 index 0000000..e443045 --- /dev/null +++ b/src/utils/regexp/removeSpaces.ts @@ -0,0 +1,9 @@ +import { cloneDeep } from "lodash-es"; +//去除所有空格 +export const removeSpaces = (str: any) => { + let strClone = cloneDeep(str); + if (Array.isArray(strClone) && strClone.length) { + strClone = strClone.join(""); + } + return strClone.replace(/\s+/g, ""); +}; diff --git a/src/utils/regexp/unitMultipleInputRexg.ts b/src/utils/regexp/unitMultipleInputRexg.ts new file mode 100644 index 0000000..9bea87f --- /dev/null +++ b/src/utils/regexp/unitMultipleInputRexg.ts @@ -0,0 +1,13 @@ +export const unitMultipleInputRexg = (value: any) => { + if (!value) { + return; + } + let result = value + .toString() + .replace(/[^\d^\\.]+/g, "") + .replace(".", "$#$") + .replace(/\./g, "") + .replace("$#$", ".") + .replace(/^(\\-)*(\d+)\.(\d\d\d\d\d\d\d\d).*$/, "$1$2.$3"); + return result; +}; diff --git a/src/utils/serviceDict.ts b/src/utils/serviceDict.ts new file mode 100644 index 0000000..2c65f3c --- /dev/null +++ b/src/utils/serviceDict.ts @@ -0,0 +1,17 @@ +// ? 系统全局字典 + +/** + * @description:用户性别 + */ +export const genderType = [ + { label: "男", value: 1 }, + { label: "女", value: 2 } +]; + +/** + * @description:用户状态 + */ +export const userStatus = [ + { label: "启用", value: 1 }, + { label: "禁用", value: 0 } +]; 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/export/list/constant/list/index.ts b/src/views/export/list/constant/list/index.ts new file mode 100644 index 0000000..7c3f533 --- /dev/null +++ b/src/views/export/list/constant/list/index.ts @@ -0,0 +1,3 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +export { FORM_DATA, RULE_FORM, COLUMNS }; diff --git a/src/views/export/list/constant/list/search.ts b/src/views/export/list/constant/list/search.ts new file mode 100644 index 0000000..5ed66f1 --- /dev/null +++ b/src/views/export/list/constant/list/search.ts @@ -0,0 +1,52 @@ +//搜索表单配置项 +export const FORM_DATA: any[] = [ + { + prop: "export_type", + placeholder: "请选择任务类型", + type: "select", + label: "任务类型:", + options: [] + }, + + { + prop: "Time", + type: "daterange", + options: [], + label: "操作时间:", + startPlaceholder: "操作开始日期", + endPlaceholder: "操作结束日期", + startDate: "operate_time" + // endDate: "endDate" + }, + { + prop: "status", + placeholder: "请选择状态", + type: "select", + options: [ + { + value: -1, + label: "导出失败" + }, + { + value: 0, + label: "正在导出" + }, + { + value: 1, + label: "导出成功" + } + ], + label: "状态:" + }, + { + prop: "creator", + placeholder: "请输入操作人", + type: "input", + label: "操作人:" + } +]; +//搜索表单值 +export const RULE_FORM = { + page: 1, + size: 50 +}; diff --git a/src/views/export/list/constant/list/table.ts b/src/views/export/list/constant/list/table.ts new file mode 100644 index 0000000..1b826ca --- /dev/null +++ b/src/views/export/list/constant/list/table.ts @@ -0,0 +1,28 @@ +// 销售订单 表格配置项 +export const COLUMNS = [ + { + align: "left", + label: "任务类型", + prop: "bill_name" + }, + { + align: "left", + label: "操作日期", + prop: "created_at" + }, + { + align: "left", + label: "状态", + prop: "status_text" + }, + { + align: "left", + label: "附件", + prop: "download_url" + }, + { + align: "left", + label: "操作人", + prop: "creator" + } +]; diff --git a/src/views/export/list/index.vue b/src/views/export/list/index.vue new file mode 100644 index 0000000..fad9b30 --- /dev/null +++ b/src/views/export/list/index.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/views/foundation/set/data/constant/list/button.ts b/src/views/foundation/set/data/constant/list/button.ts new file mode 100644 index 0000000..5169a3e --- /dev/null +++ b/src/views/foundation/set/data/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementInstantBtnExport", + type: "export" + } +]; diff --git a/src/views/foundation/set/data/constant/list/index.ts b/src/views/foundation/set/data/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/set/data/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/set/data/constant/list/search.ts b/src/views/foundation/set/data/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/foundation/set/data/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/foundation/set/data/constant/list/table.ts b/src/views/foundation/set/data/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/foundation/set/data/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/foundation/set/data/index.vue b/src/views/foundation/set/data/index.vue new file mode 100644 index 0000000..b6d555b --- /dev/null +++ b/src/views/foundation/set/data/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/foundation/set/data/init/btnClick.ts b/src/views/foundation/set/data/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/foundation/set/data/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/foundation/set/data/init/index.ts b/src/views/foundation/set/data/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/set/data/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/foundation/set/material/constant/list/button.ts b/src/views/foundation/set/material/constant/list/button.ts new file mode 100644 index 0000000..9b7259c --- /dev/null +++ b/src/views/foundation/set/material/constant/list/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "导出", + permission: "foundationSetMaterialBtnExport", + type: "add", + props: { + type: "primary" + } + }, + { + text: "刷新", + permission: "foundationSetMaterialBtnRefresh", + type: "del" + } +]; diff --git a/src/views/foundation/set/material/constant/list/index.ts b/src/views/foundation/set/material/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/set/material/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/set/material/constant/list/search.ts b/src/views/foundation/set/material/constant/list/search.ts new file mode 100644 index 0000000..416b991 --- /dev/null +++ b/src/views/foundation/set/material/constant/list/search.ts @@ -0,0 +1,44 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "org_number", + placeholder: "请选择组织", + type: "selectMultipleD", + label: "组织: ", + options: [] + }, + { + prop: "material", + placeholder: "请输入物料名称/编码/规格型号", + type: "input", + label: "物料: " + }, + { + prop: "product_line", + placeholder: "请输入品线", + type: "input", + label: "品线: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + org_number: "101" +}; diff --git a/src/views/foundation/set/material/constant/list/table.ts b/src/views/foundation/set/material/constant/list/table.ts new file mode 100644 index 0000000..172a11c --- /dev/null +++ b/src/views/foundation/set/material/constant/list/table.ts @@ -0,0 +1,61 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "物料编码", + prop: "material_number" + }, + { + align: "left", + label: "规格型号(SKU)", + prop: "sku" + }, + { + align: "left", + label: "物料名称", + prop: "material_name" + }, + { + align: "left", + label: "组织", + prop: "org_name" + }, + { + align: "left", + label: "品线", + prop: "product_line" + }, + + { + align: "left", + label: "69码", + prop: "bar_code" + }, + + { + align: "left", + label: "FNSKU", + prop: "fnsku" + }, + { + align: "left", + label: "1级分类", + prop: "category_lv1" + }, + { + align: "left", + label: "2级分类", + prop: "category_lv2" + }, + { + align: "left", + label: "3级分类", + prop: "category_lv3" + }, + { + align: "left", + label: "SPU", + prop: "spu" + } +]; diff --git a/src/views/foundation/set/material/index.vue b/src/views/foundation/set/material/index.vue new file mode 100644 index 0000000..39707da --- /dev/null +++ b/src/views/foundation/set/material/index.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/src/views/foundation/set/material/init/btnClick.ts b/src/views/foundation/set/material/init/btnClick.ts new file mode 100644 index 0000000..f754c55 --- /dev/null +++ b/src/views/foundation/set/material/init/btnClick.ts @@ -0,0 +1,44 @@ +import { useMsg } from "@/hooks/useMsg"; +// 直接导出函数,无需额外包装对象 +export const handleDel = (item: any, selectionList: any[], proTable: any) => { + console.log("导出操作", item); + console.log(selectionList, "=selectionList="); + let length = selectionList.length; + if (!length) { + useMsg("warning", "请选择需要删除的数据!"); + return; + } + ElMessageBox.confirm("您确定进行删除操作吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(async () => { + proTable.value!.getTableList(); + // const result = await commitListApi(); + // if (result.status === 200) { + // useMsg("success", "删除成功 !"); + // } else { + // useMsg("error", result.message); + // } + }) + .catch(() => {}); +}; +// proTable: any +export const handleAdd = (item: any, selectionList: any[]) => { + console.log("刷新操作", item); + let length = selectionList.length; + let ids: any = []; + if (length && length > 100) { + useMsg("warning", "选中刷新数据最大100条!"); + return; + } + selectionList.forEach((item: any) => { + ids.push(item.id); + }); +}; + +export const btnClick: any = { + del: handleDel, + add: handleAdd +}; diff --git a/src/views/foundation/set/material/init/index.ts b/src/views/foundation/set/material/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/set/material/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/foundation/set/priority/constant/list/button.ts b/src/views/foundation/set/priority/constant/list/button.ts new file mode 100644 index 0000000..821ef9d --- /dev/null +++ b/src/views/foundation/set/priority/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementBoxInventoryBtnExport", + type: "export" + } +]; diff --git a/src/views/foundation/set/priority/constant/list/index.ts b/src/views/foundation/set/priority/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/set/priority/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/set/priority/constant/list/search.ts b/src/views/foundation/set/priority/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/foundation/set/priority/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/foundation/set/priority/constant/list/table.ts b/src/views/foundation/set/priority/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/foundation/set/priority/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/foundation/set/priority/index.vue b/src/views/foundation/set/priority/index.vue new file mode 100644 index 0000000..cac1c3a --- /dev/null +++ b/src/views/foundation/set/priority/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/foundation/set/priority/init/btnClick.ts b/src/views/foundation/set/priority/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/foundation/set/priority/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/foundation/set/priority/init/index.ts b/src/views/foundation/set/priority/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/set/priority/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/foundation/set/relationship/constant/list/button.ts b/src/views/foundation/set/relationship/constant/list/button.ts new file mode 100644 index 0000000..bb51430 --- /dev/null +++ b/src/views/foundation/set/relationship/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementMaterialBtnExport", + type: "export" + } +]; diff --git a/src/views/foundation/set/relationship/constant/list/index.ts b/src/views/foundation/set/relationship/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/set/relationship/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/set/relationship/constant/list/search.ts b/src/views/foundation/set/relationship/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/foundation/set/relationship/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/foundation/set/relationship/constant/list/table.ts b/src/views/foundation/set/relationship/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/foundation/set/relationship/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/foundation/set/relationship/index.vue b/src/views/foundation/set/relationship/index.vue new file mode 100644 index 0000000..497df30 --- /dev/null +++ b/src/views/foundation/set/relationship/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/foundation/set/relationship/init/btnClick.ts b/src/views/foundation/set/relationship/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/foundation/set/relationship/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/foundation/set/relationship/init/index.ts b/src/views/foundation/set/relationship/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/set/relationship/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/foundation/subscribe/list/add.vue b/src/views/foundation/subscribe/list/add.vue new file mode 100644 index 0000000..03b7a5e --- /dev/null +++ b/src/views/foundation/subscribe/list/add.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/views/foundation/subscribe/list/constant/add/button.ts b/src/views/foundation/subscribe/list/constant/add/button.ts new file mode 100644 index 0000000..0479576 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/add/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "新增", + permission: "foundationSubscribeListAddBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "提交", + permission: "foundationSubscribeListAddBtnCommit", + type: "commit" + } +]; diff --git a/src/views/foundation/subscribe/list/constant/add/index.ts b/src/views/foundation/subscribe/list/constant/add/index.ts new file mode 100644 index 0000000..c13db66 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/add/index.ts @@ -0,0 +1,3 @@ +import { FORM_DATA, RULE_FORM } from "./serach"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, BUTTON }; diff --git a/src/views/foundation/subscribe/list/constant/add/serach.ts b/src/views/foundation/subscribe/list/constant/add/serach.ts new file mode 100644 index 0000000..e4c1037 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/add/serach.ts @@ -0,0 +1,57 @@ +export const FORM_DATA: any[] = [ + { + prop: "org_number", + placeholder: "", + type: "selectMultiple", + label: "组织:", + disabled: false, + required: true, + class: "form-item1", + options: [] + }, + { + prop: "customer_number", + placeholder: "", + type: "selectMultipleRemoteCustomersNames", + label: "客户名称:", + disabled: false, + required: true, + options: [], + class: "form-item1" + }, + { + prop: "customer_number", + placeholder: "", + type: "input", + label: "客户编码:", + disabled: true, + required: true, + class: "form-item1" + }, + { + prop: "product_lines", + placeholder: "", + type: "selectProductLinesRemote", + label: "品线:", + disabled: false, + required: true, + options: [], + class: "form-item1" + }, + { + prop: "subscriber_dduid", + placeholder: "", + type: "selectRemoteUser", + label: "订阅账号:", + disabled: false, + required: true, + options: [], + class: "form-item1" + } +]; +export const RULE_FORM: any = { + org_number: [], + customers: [], + product_lines: [], + subscriber_dduid: "" +}; diff --git a/src/views/foundation/subscribe/list/constant/details/button.ts b/src/views/foundation/subscribe/list/constant/details/button.ts new file mode 100644 index 0000000..fa8110f --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/details/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "新增", + permission: "foundationSubscribeDetailsBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "提交", + permission: "foundationSubscribeDetailsBtnCommit", + type: "commit" + } +]; diff --git a/src/views/foundation/subscribe/list/constant/details/index.ts b/src/views/foundation/subscribe/list/constant/details/index.ts new file mode 100644 index 0000000..c13db66 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/details/index.ts @@ -0,0 +1,3 @@ +import { FORM_DATA, RULE_FORM } from "./serach"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, BUTTON }; diff --git a/src/views/foundation/subscribe/list/constant/details/serach.ts b/src/views/foundation/subscribe/list/constant/details/serach.ts new file mode 100644 index 0000000..be0d121 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/details/serach.ts @@ -0,0 +1,47 @@ +export const FORM_DATA: any[] = [ + { + prop: "org", + placeholder: "", + type: "selectMultiple", + label: "组织:", + disabled: false, + required: true, + options: [] + }, + { + prop: "name", + placeholder: "", + type: "selectMultiple", + label: "客户名称:", + disabled: false, + required: true, + options: [] + }, + { + prop: "bm", + placeholder: "", + type: "input", + label: "客户编码:", + disabled: true, + required: true + }, + { + prop: "px", + placeholder: "", + type: "selectMultiple", + label: "品线:", + disabled: false, + required: true, + options: [] + }, + { + prop: "dy", + placeholder: "", + type: "select", + label: "订阅账号:", + disabled: false, + required: true, + options: [] + } +]; +export const RULE_FORM: any = {}; diff --git a/src/views/foundation/subscribe/list/constant/list/button.ts b/src/views/foundation/subscribe/list/constant/list/button.ts new file mode 100644 index 0000000..aa8a929 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/list/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "新增", + permission: "foundationSubscribeListBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "删除", + permission: "foundationSubscribeListBtnDel", + type: "del" + } +]; diff --git a/src/views/foundation/subscribe/list/constant/list/index.ts b/src/views/foundation/subscribe/list/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/subscribe/list/constant/list/search.ts b/src/views/foundation/subscribe/list/constant/list/search.ts new file mode 100644 index 0000000..260a14b --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/list/search.ts @@ -0,0 +1,75 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "org_number", + placeholder: "请选择组织", + type: "selectMultiple", + label: "组织: ", + options: [] + }, + { + prop: "customer_number", + placeholder: "请输入客户名称", + type: "selectMultipleRemote", + label: "客户名称: ", + options: [] + }, + { + prop: "customer_number1", + placeholder: "请输入客户编码", + type: "input", + label: "客户编码: " + }, + { + prop: "product_line_name", + placeholder: "请输入品线", + type: "selectProductLinesRemote", + label: "品线: ", + options: [] + }, + { + prop: "subscriber_name", + placeholder: "请输入订阅账号", + type: "input", + label: "订阅账号: " + }, + + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "更新开始日期", + endPlaceholder: "更新结束日期", + startDate: "updated_at", + // endDate: "createEndDate", + label: "更新时间: " + }, + { + prop: "creator_name", + placeholder: "请输入创建人", + type: "input", + label: "创建人: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 1, + org_number: ["101"] +}; diff --git a/src/views/foundation/subscribe/list/constant/list/table.ts b/src/views/foundation/subscribe/list/constant/list/table.ts new file mode 100644 index 0000000..0a957d8 --- /dev/null +++ b/src/views/foundation/subscribe/list/constant/list/table.ts @@ -0,0 +1,41 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + label: "订阅账号", + prop: "subscriber_name" + }, + { + align: "left", + fixed: true, + label: "客户名称", + prop: "customer_name" + }, + { + align: "left", + label: "组织", + prop: "org_name" + }, + { + align: "left", + label: "客户编码", + prop: "customer_number" + }, + { + align: "left", + label: "品线", + prop: "product_line_name" + }, + + { + align: "left", + label: "创建人", + prop: "creator_name" + }, + + { + align: "left", + label: "更新时间", + prop: "updated_at" + } +]; diff --git a/src/views/foundation/subscribe/list/index.vue b/src/views/foundation/subscribe/list/index.vue new file mode 100644 index 0000000..c2b201c --- /dev/null +++ b/src/views/foundation/subscribe/list/index.vue @@ -0,0 +1,120 @@ + + + + + + diff --git a/src/views/foundation/subscribe/list/init/btnClick.ts b/src/views/foundation/subscribe/list/init/btnClick.ts new file mode 100644 index 0000000..5bfce64 --- /dev/null +++ b/src/views/foundation/subscribe/list/init/btnClick.ts @@ -0,0 +1,42 @@ +import { useMsg } from "@/hooks/useMsg"; +import { getSubscribeDelApi } from "@/api/modules/subscribe"; + +// 直接导出函数,无需额外包装对象 +export const handleDel = (params: any) => { + const { selectionList, proTable } = params; + let length = selectionList.length; + if (!length) { + useMsg("warning", "请选择需要删除的数据!"); + return; + } + ElMessageBox.confirm("您确定进行删除操作吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(async () => { + let ids: any = []; + selectionList.forEach((item: any) => { + ids.push(item.id); + }); + const result = await getSubscribeDelApi(ids.join(",")); + if (result?.code === 0) { + proTable.value!.getTableList(); + useMsg("success", "删除成功 !"); + } + }) + .catch(() => {}); +}; + +export const handleAdd = (params: any) => { + const { router } = params; + router.push({ + path: "/foundation/subscribe/list/add", + query: { title: "新增订阅" } + }); +}; + +export const btnClick: any = { + del: handleDel, + add: handleAdd +}; diff --git a/src/views/foundation/subscribe/list/init/index.ts b/src/views/foundation/subscribe/list/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/subscribe/list/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/foundation/subscribe/list/init/setDetailsData.ts b/src/views/foundation/subscribe/list/init/setDetailsData.ts new file mode 100644 index 0000000..a17e8f4 --- /dev/null +++ b/src/views/foundation/subscribe/list/init/setDetailsData.ts @@ -0,0 +1,51 @@ +export const setDetailsData = (dataStore: any, data: any) => { + //组织 + if (data?.orgs?.length) { + data?.orgs?.forEach((item: any) => { + dataStore.ruleForm.org_number.push(item.org_number); + }); + } + //客户 + let customers_names: any = []; + if (data?.customers?.length) { + data?.customers?.forEach((item: any) => { + //客户编码 + dataStore.ruleForm.customers.push(item.customer_number); + //客户名称下拉框数据初始化 + customers_names.push({ + value: item.customer_number, + label: item.customer_name, + org_number: "100" + }); + }); + //客户名称值回填 + dataStore.ruleForm.customer_number = dataStore.ruleForm.customers; + //客户名称下拉框数据 + dataStore.formData[1].options = customers_names; + } + let productLines: any[] = []; + //品线 + if (data?.product_lines?.length) { + data?.product_lines?.forEach((item: any) => { + productLines.push({ + value: item, + label: item + }); + }); + //客户名称值回填 + dataStore.ruleForm.product_lines = data?.product_lines; + //客户名称下拉框数据 + dataStore.formData[3].options = productLines; + } + //订阅账号 + if (data?.subscriber_dduid && data?.subscriber_name) { + //订阅账号下拉框数据 + dataStore.formData[4].options = [ + { + value: data?.subscriber_dduid, + label: data?.subscriber_name + } + ]; + dataStore.ruleForm.subscriber_dduid = data?.subscriber_dduid; + } +}; diff --git a/src/views/foundation/subscribe/warehousing/constant/list/button.ts b/src/views/foundation/subscribe/warehousing/constant/list/button.ts new file mode 100644 index 0000000..fed972a --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/constant/list/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "导出", + permission: "foundationSubscribeWarehousingBtnExport", + type: "add", + props: { + type: "primary" + } + }, + { + text: "刷新", + permission: "foundationSubscribeWarehousingBtnRefresh", + type: "del" + } +]; diff --git a/src/views/foundation/subscribe/warehousing/constant/list/index.ts b/src/views/foundation/subscribe/warehousing/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/foundation/subscribe/warehousing/constant/list/search.ts b/src/views/foundation/subscribe/warehousing/constant/list/search.ts new file mode 100644 index 0000000..aaf8179 --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/constant/list/search.ts @@ -0,0 +1,94 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入单据编号", + type: "input", + label: "单据编号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入订单单号", + type: "input", + label: "订单单号: " + }, + + { + prop: "securityNumbers", + placeholder: "请选择推送结果", + type: "select", + label: "推送结果: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入物料名称/编码/规格型号", + type: "input", + label: "物料编码: " + }, + { + prop: "org_number", + placeholder: "请选择组织", + type: "selectMultiple", + label: "组织: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请选择仓库", + type: "select", + label: "仓库: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入子仓库", + type: "input", + label: "子仓库: " + }, + + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "入库开始日期", + endPlaceholder: "入库结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "入库日期: " + }, + { + prop: "lotNumbers", + placeholder: "请输入订阅人", + type: "input", + label: "订阅人: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + org_number: ["101"] +}; diff --git a/src/views/foundation/subscribe/warehousing/constant/list/table.ts b/src/views/foundation/subscribe/warehousing/constant/list/table.ts new file mode 100644 index 0000000..505b769 --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/constant/list/table.ts @@ -0,0 +1,95 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "单据编码", + prop: "securityNumber" + }, + { + align: "left", + label: "来源单号", + prop: "id" + }, + { + align: "left", + label: "订单单号", + prop: "specifications" + }, + { + align: "left", + label: "客户名称", + prop: "createTime" + }, + { + align: "left", + label: "入库组织", + prop: "downLoadNumber" + }, + + { + align: "left", + label: "单据类型", + prop: "downLoadTime" + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime" + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime" + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime" + }, + { + align: "left", + label: "出厂价", + prop: "downLoadTime" + }, + { + align: "left", + label: "入库仓库", + prop: "downLoadTime" + }, + { + align: "left", + label: "入库子仓库", + prop: "downLoadTime" + }, + { + align: "left", + label: "入库数量", + prop: "downLoadTime" + }, + { + align: "left", + label: "订单明细备注", + prop: "downLoadTime" + }, + { + align: "left", + label: "单位", + prop: "downLoadTime" + }, + { + align: "left", + label: "入库时间", + prop: "downLoadTime" + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime" + }, + { + align: "left", + label: "推送结果", + prop: "downLoadTime" + } +]; diff --git a/src/views/foundation/subscribe/warehousing/index.vue b/src/views/foundation/subscribe/warehousing/index.vue new file mode 100644 index 0000000..5219245 --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/index.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/foundation/subscribe/warehousing/init/btnClick.ts b/src/views/foundation/subscribe/warehousing/init/btnClick.ts new file mode 100644 index 0000000..0d3109a --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/init/btnClick.ts @@ -0,0 +1,40 @@ +import { useMsg } from "@/hooks/useMsg"; +// 直接导出函数,无需额外包装对象 +export const handleDel = (item: any, selectionList: any[], proTable: any) => { + console.log("导出操作", item); + console.log(selectionList, "=selectionList="); + let length = selectionList.length; + if (!length) { + useMsg("warning", "请选择需要删除的数据!"); + return; + } + ElMessageBox.confirm("您确定进行删除操作吗?", "温馨提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(async () => { + proTable.value!.getTableList(); + // const result = await commitListApi(); + // if (result.status === 200) { + // useMsg("success", "删除成功 !"); + // } else { + // useMsg("error", result.message); + // } + }) + .catch(() => {}); +}; +// proTable: any +export const handleAdd = (item: any, selectionList: any[]) => { + console.log("刷新操作", item); + let length = selectionList.length; + if (length && length > 100) { + useMsg("warning", "选中刷新数据最大100条!"); + return; + } +}; + +export const btnClick: any = { + del: handleDel, + add: handleAdd +}; diff --git a/src/views/foundation/subscribe/warehousing/init/index.ts b/src/views/foundation/subscribe/warehousing/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/foundation/subscribe/warehousing/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/home/index.scss b/src/views/home/index.scss new file mode 100644 index 0000000..9f37686 --- /dev/null +++ b/src/views/home/index.scss @@ -0,0 +1,12 @@ +.box { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + .box-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..b97eed7 --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/views/inspection/management/report/constant/list/button.ts b/src/views/inspection/management/report/constant/list/button.ts new file mode 100644 index 0000000..17b67d5 --- /dev/null +++ b/src/views/inspection/management/report/constant/list/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "导出", + permission: "inspectionManagementReportBtnExport", + type: "export", + props: { + type: "primary" + } + }, + { + text: "刷新", + permission: "inspectionManagementReportBtnRefresh", + type: "refresh" + } +]; diff --git a/src/views/inspection/management/report/constant/list/index.ts b/src/views/inspection/management/report/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/inspection/management/report/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/inspection/management/report/constant/list/search.ts b/src/views/inspection/management/report/constant/list/search.ts new file mode 100644 index 0000000..dcec014 --- /dev/null +++ b/src/views/inspection/management/report/constant/list/search.ts @@ -0,0 +1,78 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "src_bill_no", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号: " + }, + { + prop: "supplier_number", + placeholder: "请选择供应商", + type: "selectRemote", + label: "供应商: ", + options: [] + }, + { + prop: "inspector", + placeholder: "请输入质检人", + type: "input", + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "inspection_time", + label: "质检时间: " + }, + { + prop: "org_number", + placeholder: "请选择组织", + type: "selectRemote", + options: [], + label: "组织: " + }, + + { + prop: "material_number", + placeholder: "请输入物料编码", + type: "input", + label: "物料编码: " + }, + { + prop: "status", + placeholder: "请选择质检状态", + type: "select", + options: [ + { label: "已作废", value: -1 }, + { label: "待质检", value: 0 }, + { label: "部分质检", value: 1 }, + { label: "已质检", value: 2 } + ], + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50 +}; diff --git a/src/views/inspection/management/report/constant/list/table.ts b/src/views/inspection/management/report/constant/list/table.ts new file mode 100644 index 0000000..5621f22 --- /dev/null +++ b/src/views/inspection/management/report/constant/list/table.ts @@ -0,0 +1,101 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "bill_no", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "status", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "sales_bill_no", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "src_bill_no", + width: 200 + }, + + { + align: "left", + label: "质检类型", + prop: "inspection_type", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "supplier_name", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "org_name", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "spec", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "material_number", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "material_name", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "qty_to_be_inspected", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "qty_good_product", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "qty_bad_product", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "inspector", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "inspection_time", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "created_at", + width: 200 + } +]; diff --git a/src/views/inspection/management/report/index.vue b/src/views/inspection/management/report/index.vue new file mode 100644 index 0000000..2251541 --- /dev/null +++ b/src/views/inspection/management/report/index.vue @@ -0,0 +1,105 @@ + + + + + + diff --git a/src/views/inspection/management/report/init/btnClick.ts b/src/views/inspection/management/report/init/btnClick.ts new file mode 100644 index 0000000..87d4df7 --- /dev/null +++ b/src/views/inspection/management/report/init/btnClick.ts @@ -0,0 +1,44 @@ +import { useMsg } from "@/hooks/useMsg"; +import { getQualityInspectReloadApi, getQualityInspectExportApi } from "@/api/modules/inspection"; + +//导出 +const getQualityInspectExport = async (proTable: any, dataStore: any) => { + const result = await getQualityInspectExportApi(dataStore.ruleForm); + if (result?.code === 0) { + useMsg("success", result?.msg); + //请求成功后刷新列表 + proTable!.value?.getTableList(); + } +}; +//刷新接口 +const getQualityInspectReload = async (selectionList: any, proTable: any) => { + const result = await getQualityInspectReloadApi({ id: selectionList }); + if (result?.code === 0) { + useMsg("success", result?.msg); + //请求成功后刷新列表 + proTable!.value?.getTableList(); + } +}; +// 导出 +export const handleExport = (params: any, dataStore: any) => { + const { proTable } = params; + getQualityInspectExport(proTable, dataStore); +}; +// 刷新 +export const handleRefresh = (params: any, dataStore: any) => { + const { proTable } = params; + if (!dataStore.selectionList.length) { + useMsg("warning", "请勾选数据刷新 !"); + return; + } + if (dataStore.selectionList.length && dataStore.selectionList.length > 50) { + useMsg("warning", "最多刷新50条 !"); + return; + } + getQualityInspectReload(dataStore.selectionList, proTable); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/inspection/management/report/init/index.ts b/src/views/inspection/management/report/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/inspection/management/report/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/inventory/management/list/constant/list/button.ts b/src/views/inventory/management/list/constant/list/button.ts new file mode 100644 index 0000000..91f3101 --- /dev/null +++ b/src/views/inventory/management/list/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "shipmentManagementListBtnExport", + type: "export" + } +]; diff --git a/src/views/inventory/management/list/constant/list/index.ts b/src/views/inventory/management/list/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/inventory/management/list/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/inventory/management/list/constant/list/search.ts b/src/views/inventory/management/list/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/inventory/management/list/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/inventory/management/list/constant/list/table.ts b/src/views/inventory/management/list/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/inventory/management/list/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/inventory/management/list/index.vue b/src/views/inventory/management/list/index.vue new file mode 100644 index 0000000..2cde688 --- /dev/null +++ b/src/views/inventory/management/list/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/inventory/management/list/init/btnClick.ts b/src/views/inventory/management/list/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/inventory/management/list/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/inventory/management/list/init/index.ts b/src/views/inventory/management/list/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/inventory/management/list/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/login/index.scss b/src/views/login/index.scss new file mode 100644 index 0000000..9d7bdb4 --- /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: 52px; + } + .logo-text { + padding: 0 0 0 25px; + margin: 0; + font-size: 18px; + 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..bd7fdd4 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/views/other/operation/changeBox/constant/list/button.ts b/src/views/other/operation/changeBox/constant/list/button.ts new file mode 100644 index 0000000..dd99bd6 --- /dev/null +++ b/src/views/other/operation/changeBox/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "otherOperationTransferChangeBoxBtnExport", + type: "export" + } +]; diff --git a/src/views/other/operation/changeBox/constant/list/index.ts b/src/views/other/operation/changeBox/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/other/operation/changeBox/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/other/operation/changeBox/constant/list/search.ts b/src/views/other/operation/changeBox/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/other/operation/changeBox/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/other/operation/changeBox/constant/list/table.ts b/src/views/other/operation/changeBox/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/other/operation/changeBox/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/other/operation/changeBox/index.vue b/src/views/other/operation/changeBox/index.vue new file mode 100644 index 0000000..2cde688 --- /dev/null +++ b/src/views/other/operation/changeBox/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/other/operation/changeBox/init/btnClick.ts b/src/views/other/operation/changeBox/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/other/operation/changeBox/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/other/operation/changeBox/init/index.ts b/src/views/other/operation/changeBox/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/other/operation/changeBox/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/other/operation/picking/constant/details/search.ts b/src/views/other/operation/picking/constant/details/search.ts new file mode 100644 index 0000000..2c26f16 --- /dev/null +++ b/src/views/other/operation/picking/constant/details/search.ts @@ -0,0 +1,105 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入拣货回退单", + type: "input", + label: "拣货回退单:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货单", + type: "input", + label: "发货单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + options: [], + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "仓库", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择来源类型:", + type: "select", + options: [], + label: "来源类型:", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请输入起始库区", + type: "input", + label: "起始库区", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请输入目标库区", + type: "input", + label: "目标库区", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退方式", + type: "input", + label: "回退方式", + disabled: false, + required: true + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/other/operation/picking/constant/details/table.ts b/src/views/other/operation/picking/constant/details/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/other/operation/picking/constant/details/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/other/operation/picking/constant/list/button.ts b/src/views/other/operation/picking/constant/list/button.ts new file mode 100644 index 0000000..dd99bd6 --- /dev/null +++ b/src/views/other/operation/picking/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "otherOperationTransferChangeBoxBtnExport", + type: "export" + } +]; diff --git a/src/views/other/operation/picking/constant/list/index.ts b/src/views/other/operation/picking/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/other/operation/picking/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/other/operation/picking/constant/list/search.ts b/src/views/other/operation/picking/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/other/operation/picking/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/other/operation/picking/constant/list/table.ts b/src/views/other/operation/picking/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/other/operation/picking/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/other/operation/picking/details.vue b/src/views/other/operation/picking/details.vue new file mode 100644 index 0000000..4726e82 --- /dev/null +++ b/src/views/other/operation/picking/details.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/other/operation/picking/index.vue b/src/views/other/operation/picking/index.vue new file mode 100644 index 0000000..28b2a52 --- /dev/null +++ b/src/views/other/operation/picking/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/other/operation/picking/init/btnClick.ts b/src/views/other/operation/picking/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/other/operation/picking/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/other/operation/picking/init/index.ts b/src/views/other/operation/picking/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/other/operation/picking/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/other/operation/transfer/constant/list/button.ts b/src/views/other/operation/transfer/constant/list/button.ts new file mode 100644 index 0000000..61f291c --- /dev/null +++ b/src/views/other/operation/transfer/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "otherOperationTransferBtnExport", + type: "export" + } +]; diff --git a/src/views/other/operation/transfer/constant/list/index.ts b/src/views/other/operation/transfer/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/other/operation/transfer/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/other/operation/transfer/constant/list/search.ts b/src/views/other/operation/transfer/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/other/operation/transfer/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/other/operation/transfer/constant/list/table.ts b/src/views/other/operation/transfer/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/other/operation/transfer/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/other/operation/transfer/index.vue b/src/views/other/operation/transfer/index.vue new file mode 100644 index 0000000..c99a8f4 --- /dev/null +++ b/src/views/other/operation/transfer/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/other/operation/transfer/init/btnClick.ts b/src/views/other/operation/transfer/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/other/operation/transfer/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/other/operation/transfer/init/index.ts b/src/views/other/operation/transfer/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/other/operation/transfer/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/receipt/warehousing/receiptOrder/add.vue b/src/views/receipt/warehousing/receiptOrder/add.vue new file mode 100644 index 0000000..a60aac2 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/add.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/views/receipt/warehousing/receiptOrder/constant/add/button.ts b/src/views/receipt/warehousing/receiptOrder/constant/add/button.ts new file mode 100644 index 0000000..a2c4372 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/add/button.ts @@ -0,0 +1,10 @@ +export const BUTTON = [ + { + text: "提交", + permission: "receiptWarehousingReceiptOrderAddBtnCommit", + type: "commit", + props: { + type: "primary" + } + } +]; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/add/index.ts b/src/views/receipt/warehousing/receiptOrder/constant/add/index.ts new file mode 100644 index 0000000..16a0a0c --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/add/index.ts @@ -0,0 +1,186 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入收货单号", + type: "input", + label: "收货单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单号", + type: "input", + label: "销售订单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择收货状态", + type: "select", + options: [], + label: "收货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入供应商", + type: "input", + label: "供应商", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择收货类型", + type: "select", + options: [], + label: "收货类型:", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "收货仓库", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "子仓库", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织", + disabled: false, + required: true + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_TABLE_DATA = [ + { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false + } +]; +//用于增加的时候默认数据 +export const FORM_TABLE_DATA_INIT = { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false +}; +export const FORM_TABLE_COLUMNS = [ + { + label: "操作", + prop: "operation", + disabled: false, + isHeaderIcon: false, + fixed: true, + width: 180 + }, + { + label: "规格型号", + prop: "serialNumber", + disabled: false, + isHeaderIcon: true, + formType: "input", + fixed: true, + required: true, + options: [] + }, + + { + label: "物料编码", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "物料名称", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "应收货数量", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + + { + label: "单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "金额", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + + { + label: "含税单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "价税合计", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "订单明细备注", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + } +]; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/details/index.ts b/src/views/receipt/warehousing/receiptOrder/constant/details/index.ts new file mode 100644 index 0000000..d5b61af --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/details/index.ts @@ -0,0 +1,169 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入收货单号", + type: "input", + label: "收货单号:", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单号", + type: "input", + label: "销售订单号:", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货状态", + type: "select", + options: [], + label: "收货状态:", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请输入供应商", + type: "input", + label: "供应商", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货类型", + type: "select", + options: [], + label: "收货类型:", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "收货仓库", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "子仓库", + disabled: true + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织", + disabled: true + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_TABLE_DATA = [ + { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false + } +]; +//用于增加的时候默认数据 +export const FORM_TABLE_DATA_INIT = { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false +}; +export const FORM_TABLE_COLUMNS = [ + { + label: "规格型号", + prop: "serialNumber", + disabled: false, + isHeaderIcon: true, + formType: "input", + fixed: true, + required: true, + options: [] + }, + + { + label: "物料编码", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "物料名称", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "应收货数量", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + + { + label: "单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "金额", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + + { + label: "含税单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "价税合计", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "订单明细备注", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + } +]; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/list/button.ts b/src/views/receipt/warehousing/receiptOrder/constant/list/button.ts new file mode 100644 index 0000000..28561ac --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/list/button.ts @@ -0,0 +1,30 @@ +export const BUTTON = [ + { + text: "新增", + permission: "receiptWarehousingReceiptOrderBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "作废", + permission: "receiptWarehousingReceiptOrderBtnVoid", + type: "void" + }, + { + text: "反作废", + permission: "receiptWarehousingReceiptOrderBtnNoVoid", + type: "noVoid" + }, + { + text: "导出", + permission: "inspectionManagementReportBtnExport", + type: "export" + }, + { + text: "刷新", + permission: "inspectionManagementReportBtnRefresh", + type: "refresh" + } +]; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/list/index.ts b/src/views/receipt/warehousing/receiptOrder/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/list/search.ts b/src/views/receipt/warehousing/receiptOrder/constant/list/search.ts new file mode 100644 index 0000000..a7de643 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/list/search.ts @@ -0,0 +1,112 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货类型", + type: "select", + isArray: true, + label: "收货类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "收货开始日期", + endPlaceholder: "收货结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "收货时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货状态", + type: "select", + isArray: true, + label: "收货状态: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入收货人", + type: "input", + isArray: true, + label: "收货人: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入箱号", + type: "input", + isArray: true, + label: "箱号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入序列号", + type: "input", + isArray: true, + label: "序列号: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/receipt/warehousing/receiptOrder/constant/list/table.ts b/src/views/receipt/warehousing/receiptOrder/constant/list/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/constant/list/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/receipt/warehousing/receiptOrder/details.vue b/src/views/receipt/warehousing/receiptOrder/details.vue new file mode 100644 index 0000000..427e310 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/details.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/views/receipt/warehousing/receiptOrder/index.vue b/src/views/receipt/warehousing/receiptOrder/index.vue new file mode 100644 index 0000000..838c9cf --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/index.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/src/views/receipt/warehousing/receiptOrder/init/btnClick.ts b/src/views/receipt/warehousing/receiptOrder/init/btnClick.ts new file mode 100644 index 0000000..1ca2e33 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/init/btnClick.ts @@ -0,0 +1,20 @@ +// 直接导出函数,无需额外包装对象 + +export const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/receipt/warehousing/receiptOrder/add" }); +}; + +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh, + add: handleAdd +}; diff --git a/src/views/receipt/warehousing/receiptOrder/init/index.ts b/src/views/receipt/warehousing/receiptOrder/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/receipt/warehousing/receiptOrder/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/receipt/warehousing/warehousingOrder/constant/list/button.ts b/src/views/receipt/warehousing/warehousingOrder/constant/list/button.ts new file mode 100644 index 0000000..985a819 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/constant/list/button.ts @@ -0,0 +1,20 @@ +export const BUTTON = [ + { + text: "重传", + permission: "receiptWarehousingWarehousingOrderBtnRetransmission", + type: "retransmission", + props: { + type: "primary" + } + }, + { + text: "导出", + permission: "receiptWarehousingWarehousingOrderBtnExport", + type: "export" + }, + { + text: "同步成功", + permission: "receiptWarehousingWarehousingOrderBtnSynchronize", + type: "synchronize" + } +]; diff --git a/src/views/receipt/warehousing/warehousingOrder/constant/list/index.ts b/src/views/receipt/warehousing/warehousingOrder/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/receipt/warehousing/warehousingOrder/constant/list/search.ts b/src/views/receipt/warehousing/warehousingOrder/constant/list/search.ts new file mode 100644 index 0000000..6202085 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/constant/list/search.ts @@ -0,0 +1,97 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择入库类型", + type: "select", + isArray: true, + label: "入库类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "创建开始日期", + endPlaceholder: "创建结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "创建时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "securityNumbers", + placeholder: "请输入创建人", + type: "input", + isArray: true, + label: "创建人: " + }, + + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "lotNumbers", + placeholder: "请选择同步状态", + type: "select", + isArray: true, + label: "同步状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/receipt/warehousing/warehousingOrder/constant/list/table.ts b/src/views/receipt/warehousing/warehousingOrder/constant/list/table.ts new file mode 100644 index 0000000..c0b1f30 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/constant/list/table.ts @@ -0,0 +1,89 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "入库单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "入库类型", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "供应商", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "组织", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "规格型号", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "入库仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "同步状态", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/receipt/warehousing/warehousingOrder/index.vue b/src/views/receipt/warehousing/warehousingOrder/index.vue new file mode 100644 index 0000000..d2fab92 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/receipt/warehousing/warehousingOrder/init/btnClick.ts b/src/views/receipt/warehousing/warehousingOrder/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/receipt/warehousing/warehousingOrder/init/index.ts b/src/views/receipt/warehousing/warehousingOrder/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/receipt/warehousing/warehousingOrder/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/report/management/boxInventory/constant/list/button.ts b/src/views/report/management/boxInventory/constant/list/button.ts new file mode 100644 index 0000000..821ef9d --- /dev/null +++ b/src/views/report/management/boxInventory/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementBoxInventoryBtnExport", + type: "export" + } +]; diff --git a/src/views/report/management/boxInventory/constant/list/index.ts b/src/views/report/management/boxInventory/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/report/management/boxInventory/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/report/management/boxInventory/constant/list/search.ts b/src/views/report/management/boxInventory/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/report/management/boxInventory/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/report/management/boxInventory/constant/list/table.ts b/src/views/report/management/boxInventory/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/report/management/boxInventory/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/report/management/boxInventory/index.vue b/src/views/report/management/boxInventory/index.vue new file mode 100644 index 0000000..e2b6ba9 --- /dev/null +++ b/src/views/report/management/boxInventory/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/report/management/boxInventory/init/btnClick.ts b/src/views/report/management/boxInventory/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/report/management/boxInventory/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/report/management/boxInventory/init/index.ts b/src/views/report/management/boxInventory/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/report/management/boxInventory/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/report/management/instant/constant/list/button.ts b/src/views/report/management/instant/constant/list/button.ts new file mode 100644 index 0000000..5169a3e --- /dev/null +++ b/src/views/report/management/instant/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementInstantBtnExport", + type: "export" + } +]; diff --git a/src/views/report/management/instant/constant/list/index.ts b/src/views/report/management/instant/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/report/management/instant/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/report/management/instant/constant/list/search.ts b/src/views/report/management/instant/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/report/management/instant/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/report/management/instant/constant/list/table.ts b/src/views/report/management/instant/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/report/management/instant/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/report/management/instant/index.vue b/src/views/report/management/instant/index.vue new file mode 100644 index 0000000..2939c46 --- /dev/null +++ b/src/views/report/management/instant/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/report/management/instant/init/btnClick.ts b/src/views/report/management/instant/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/report/management/instant/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/report/management/instant/init/index.ts b/src/views/report/management/instant/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/report/management/instant/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/report/management/material/constant/list/button.ts b/src/views/report/management/material/constant/list/button.ts new file mode 100644 index 0000000..bb51430 --- /dev/null +++ b/src/views/report/management/material/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "reportManagementMaterialBtnExport", + type: "export" + } +]; diff --git a/src/views/report/management/material/constant/list/index.ts b/src/views/report/management/material/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/report/management/material/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/report/management/material/constant/list/search.ts b/src/views/report/management/material/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/report/management/material/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/report/management/material/constant/list/table.ts b/src/views/report/management/material/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/report/management/material/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/report/management/material/index.vue b/src/views/report/management/material/index.vue new file mode 100644 index 0000000..0ae1d51 --- /dev/null +++ b/src/views/report/management/material/index.vue @@ -0,0 +1,102 @@ + + + + + + diff --git a/src/views/report/management/material/init/btnClick.ts b/src/views/report/management/material/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/report/management/material/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/report/management/material/init/index.ts b/src/views/report/management/material/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/report/management/material/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/return/management/instruction/add.vue b/src/views/return/management/instruction/add.vue new file mode 100644 index 0000000..74753cd --- /dev/null +++ b/src/views/return/management/instruction/add.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/views/return/management/instruction/constant/add/button.ts b/src/views/return/management/instruction/constant/add/button.ts new file mode 100644 index 0000000..551d80c --- /dev/null +++ b/src/views/return/management/instruction/constant/add/button.ts @@ -0,0 +1,10 @@ +export const BUTTON = [ + { + text: "提交", + permission: "returnManagementInstructionAddBtnCommit", + type: "commit", + props: { + type: "primary" + } + } +]; diff --git a/src/views/return/management/instruction/constant/add/index.ts b/src/views/return/management/instruction/constant/add/index.ts new file mode 100644 index 0000000..16a0a0c --- /dev/null +++ b/src/views/return/management/instruction/constant/add/index.ts @@ -0,0 +1,186 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入收货单号", + type: "input", + label: "收货单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单号", + type: "input", + label: "销售订单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择收货状态", + type: "select", + options: [], + label: "收货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入供应商", + type: "input", + label: "供应商", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择收货类型", + type: "select", + options: [], + label: "收货类型:", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "收货仓库", + disabled: false, + required: true + }, + { + prop: "orderBillNo", + placeholder: "请选择收货", + type: "input", + label: "子仓库", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织", + disabled: false, + required: true + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_TABLE_DATA = [ + { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false + } +]; +//用于增加的时候默认数据 +export const FORM_TABLE_DATA_INIT = { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false +}; +export const FORM_TABLE_COLUMNS = [ + { + label: "操作", + prop: "operation", + disabled: false, + isHeaderIcon: false, + fixed: true, + width: 180 + }, + { + label: "规格型号", + prop: "serialNumber", + disabled: false, + isHeaderIcon: true, + formType: "input", + fixed: true, + required: true, + options: [] + }, + + { + label: "物料编码", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "物料名称", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "应收货数量", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + + { + label: "单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "金额", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + + { + label: "含税单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "价税合计", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "订单明细备注", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + } +]; diff --git a/src/views/return/management/instruction/constant/list/button.ts b/src/views/return/management/instruction/constant/list/button.ts new file mode 100644 index 0000000..66b0588 --- /dev/null +++ b/src/views/return/management/instruction/constant/list/button.ts @@ -0,0 +1,30 @@ +export const BUTTON = [ + { + text: "新增", + permission: "returnManagementInstructionBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "作废", + permission: "returnManagementInstructionBtnVoid", + type: "void" + }, + { + text: "反作废", + permission: "returnManagementInstructionBtnNoVoid", + type: "noVoid" + }, + { + text: "导出", + permission: "returnManagementInstructionBtnExport", + type: "export" + }, + { + text: "刷新", + permission: "returnManagementInstructionBtnRefresh", + type: "refresh" + } +]; diff --git a/src/views/return/management/instruction/constant/list/index.ts b/src/views/return/management/instruction/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/return/management/instruction/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/return/management/instruction/constant/list/search.ts b/src/views/return/management/instruction/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/return/management/instruction/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/return/management/instruction/constant/list/table.ts b/src/views/return/management/instruction/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/return/management/instruction/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/return/management/instruction/index.vue b/src/views/return/management/instruction/index.vue new file mode 100644 index 0000000..33e8f3e --- /dev/null +++ b/src/views/return/management/instruction/index.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/views/return/management/instruction/init/btnClick.ts b/src/views/return/management/instruction/init/btnClick.ts new file mode 100644 index 0000000..9fe473f --- /dev/null +++ b/src/views/return/management/instruction/init/btnClick.ts @@ -0,0 +1,25 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; +export const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/return/management/instruction/add" }); +}; +export const handleVoid = (item: any) => { + console.log("刷新操作", item); +}; +export const handleNoVoid = (item: any) => { + console.log("刷新操作", item); +}; +export const btnClick: any = { + add: handleAdd, + void: handleVoid, + noVoid: handleNoVoid, + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/return/management/instruction/init/index.ts b/src/views/return/management/instruction/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/return/management/instruction/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/return/management/returnOrder/constant/list/button.ts b/src/views/return/management/returnOrder/constant/list/button.ts new file mode 100644 index 0000000..827eac9 --- /dev/null +++ b/src/views/return/management/returnOrder/constant/list/button.ts @@ -0,0 +1,12 @@ +export const BUTTON = [ + { + text: "导出", + permission: "inspectionManagementReportBtnExport", + type: "export" + }, + { + text: "刷新", + permission: "inspectionManagementReportBtnRefresh", + type: "refresh" + } +]; diff --git a/src/views/return/management/returnOrder/constant/list/index.ts b/src/views/return/management/returnOrder/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/return/management/returnOrder/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/return/management/returnOrder/constant/list/search.ts b/src/views/return/management/returnOrder/constant/list/search.ts new file mode 100644 index 0000000..8578cee --- /dev/null +++ b/src/views/return/management/returnOrder/constant/list/search.ts @@ -0,0 +1,80 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "securityNumbers", + placeholder: "请输入质检人", + type: "input", + isArray: true, + label: "质检人: " + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "质检开始日期", + endPlaceholder: "质检结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "质检时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "materialNumber", + placeholder: "请输入規格型号", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择质检状态", + type: "select", + isArray: true, + label: "质检状态: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/return/management/returnOrder/constant/list/table.ts b/src/views/return/management/returnOrder/constant/list/table.ts new file mode 100644 index 0000000..c6c8298 --- /dev/null +++ b/src/views/return/management/returnOrder/constant/list/table.ts @@ -0,0 +1,107 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "质检单", + prop: "securityNumber", + width: 200 + }, + { + align: "left", + label: "质检状态", + prop: "id", + width: 160 + }, + { + align: "left", + label: "销售订单号", + prop: "specifications", + width: 200 + }, + { + align: "left", + label: "来源单号", + prop: "createTime", + width: 200 + }, + { + align: "left", + label: "下载次数", + prop: "downLoadNumber", + width: 80 + }, + + { + align: "left", + label: "质检类型", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "供应商", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "组织", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "规格型号", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料编码", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "物料名称", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "应质检数量", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "良品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "次品数", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检人", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "质检时间", + prop: "downLoadTime", + width: 200 + }, + { + align: "left", + label: "创建时间", + prop: "downLoadTime", + width: 200 + } +]; diff --git a/src/views/return/management/returnOrder/index.vue b/src/views/return/management/returnOrder/index.vue new file mode 100644 index 0000000..3773096 --- /dev/null +++ b/src/views/return/management/returnOrder/index.vue @@ -0,0 +1,101 @@ + + + + + + diff --git a/src/views/return/management/returnOrder/init/btnClick.ts b/src/views/return/management/returnOrder/init/btnClick.ts new file mode 100644 index 0000000..9ac415e --- /dev/null +++ b/src/views/return/management/returnOrder/init/btnClick.ts @@ -0,0 +1,13 @@ +// 直接导出函数,无需额外包装对象 +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh +}; diff --git a/src/views/return/management/returnOrder/init/index.ts b/src/views/return/management/returnOrder/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/return/management/returnOrder/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/shipment/outbound/delivery/batchDetails.vue b/src/views/shipment/outbound/delivery/batchDetails.vue new file mode 100644 index 0000000..2a5cb02 --- /dev/null +++ b/src/views/shipment/outbound/delivery/batchDetails.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/shipment/outbound/delivery/constant/batchDetails/button.ts b/src/views/shipment/outbound/delivery/constant/batchDetails/button.ts new file mode 100644 index 0000000..4eec94b --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/batchDetails/button.ts @@ -0,0 +1 @@ +export const BUTTON = []; diff --git a/src/views/shipment/outbound/delivery/constant/batchDetails/search.ts b/src/views/shipment/outbound/delivery/constant/batchDetails/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/batchDetails/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/delivery/constant/batchDetails/table.ts b/src/views/shipment/outbound/delivery/constant/batchDetails/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/batchDetails/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/delivery/constant/list/button.ts b/src/views/shipment/outbound/delivery/constant/list/button.ts new file mode 100644 index 0000000..a19cf2d --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/list/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "重传", + permission: "shipmentOutboundDeliveryBtnRetransmission", + type: "retransmission", + props: { + type: "primary" + } + }, + { + text: "导出", + permission: "shipmentOutboundDeliveryBtnExport", + type: "export" + } +]; diff --git a/src/views/shipment/outbound/delivery/constant/list/index.ts b/src/views/shipment/outbound/delivery/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/shipment/outbound/delivery/constant/list/search.ts b/src/views/shipment/outbound/delivery/constant/list/search.ts new file mode 100644 index 0000000..a7de643 --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/list/search.ts @@ -0,0 +1,112 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货类型", + type: "select", + isArray: true, + label: "收货类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "收货开始日期", + endPlaceholder: "收货结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "收货时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货状态", + type: "select", + isArray: true, + label: "收货状态: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入收货人", + type: "input", + isArray: true, + label: "收货人: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入箱号", + type: "input", + isArray: true, + label: "箱号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入序列号", + type: "input", + isArray: true, + label: "序列号: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/shipment/outbound/delivery/constant/list/table.ts b/src/views/shipment/outbound/delivery/constant/list/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/list/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/delivery/constant/orderDetails/button.ts b/src/views/shipment/outbound/delivery/constant/orderDetails/button.ts new file mode 100644 index 0000000..4eec94b --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/orderDetails/button.ts @@ -0,0 +1 @@ +export const BUTTON = []; diff --git a/src/views/shipment/outbound/delivery/constant/orderDetails/search.ts b/src/views/shipment/outbound/delivery/constant/orderDetails/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/orderDetails/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/delivery/constant/orderDetails/table.ts b/src/views/shipment/outbound/delivery/constant/orderDetails/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/delivery/constant/orderDetails/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/delivery/index.vue b/src/views/shipment/outbound/delivery/index.vue new file mode 100644 index 0000000..eb71706 --- /dev/null +++ b/src/views/shipment/outbound/delivery/index.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/views/shipment/outbound/delivery/init/btnClick.ts b/src/views/shipment/outbound/delivery/init/btnClick.ts new file mode 100644 index 0000000..1ca2e33 --- /dev/null +++ b/src/views/shipment/outbound/delivery/init/btnClick.ts @@ -0,0 +1,20 @@ +// 直接导出函数,无需额外包装对象 + +export const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/receipt/warehousing/receiptOrder/add" }); +}; + +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh, + add: handleAdd +}; diff --git a/src/views/shipment/outbound/delivery/init/index.ts b/src/views/shipment/outbound/delivery/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/shipment/outbound/delivery/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/shipment/outbound/delivery/orderDetails.vue b/src/views/shipment/outbound/delivery/orderDetails.vue new file mode 100644 index 0000000..d031952 --- /dev/null +++ b/src/views/shipment/outbound/delivery/orderDetails.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/shipment/outbound/picking/batchDetails.vue b/src/views/shipment/outbound/picking/batchDetails.vue new file mode 100644 index 0000000..7784581 --- /dev/null +++ b/src/views/shipment/outbound/picking/batchDetails.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/shipment/outbound/picking/constant/batchDetails/button.ts b/src/views/shipment/outbound/picking/constant/batchDetails/button.ts new file mode 100644 index 0000000..4eec94b --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/batchDetails/button.ts @@ -0,0 +1 @@ +export const BUTTON = []; diff --git a/src/views/shipment/outbound/picking/constant/batchDetails/search.ts b/src/views/shipment/outbound/picking/constant/batchDetails/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/batchDetails/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/picking/constant/batchDetails/table.ts b/src/views/shipment/outbound/picking/constant/batchDetails/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/batchDetails/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/picking/constant/list/button.ts b/src/views/shipment/outbound/picking/constant/list/button.ts new file mode 100644 index 0000000..0810d01 --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "shipmentOutboundPickingBtnExport", + type: "export" + } +]; diff --git a/src/views/shipment/outbound/picking/constant/list/index.ts b/src/views/shipment/outbound/picking/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/shipment/outbound/picking/constant/list/search.ts b/src/views/shipment/outbound/picking/constant/list/search.ts new file mode 100644 index 0000000..a7de643 --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/list/search.ts @@ -0,0 +1,112 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货类型", + type: "select", + isArray: true, + label: "收货类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "收货开始日期", + endPlaceholder: "收货结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "收货时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货状态", + type: "select", + isArray: true, + label: "收货状态: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入收货人", + type: "input", + isArray: true, + label: "收货人: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入箱号", + type: "input", + isArray: true, + label: "箱号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入序列号", + type: "input", + isArray: true, + label: "序列号: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/shipment/outbound/picking/constant/list/table.ts b/src/views/shipment/outbound/picking/constant/list/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/list/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/picking/constant/orderDetails/button.ts b/src/views/shipment/outbound/picking/constant/orderDetails/button.ts new file mode 100644 index 0000000..4368725 --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/orderDetails/button.ts @@ -0,0 +1,10 @@ +export const BUTTON = [ + { + text: "保存", + permission: "shipmentOutboundPickingOrderDetailsBtnSave", + type: "commit", + props: { + type: "primary" + } + } +]; diff --git a/src/views/shipment/outbound/picking/constant/orderDetails/search.ts b/src/views/shipment/outbound/picking/constant/orderDetails/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/orderDetails/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/picking/constant/orderDetails/table.ts b/src/views/shipment/outbound/picking/constant/orderDetails/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/picking/constant/orderDetails/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/picking/index.vue b/src/views/shipment/outbound/picking/index.vue new file mode 100644 index 0000000..eb71706 --- /dev/null +++ b/src/views/shipment/outbound/picking/index.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/views/shipment/outbound/picking/init/btnClick.ts b/src/views/shipment/outbound/picking/init/btnClick.ts new file mode 100644 index 0000000..1ca2e33 --- /dev/null +++ b/src/views/shipment/outbound/picking/init/btnClick.ts @@ -0,0 +1,20 @@ +// 直接导出函数,无需额外包装对象 + +export const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/receipt/warehousing/receiptOrder/add" }); +}; + +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh, + add: handleAdd +}; diff --git a/src/views/shipment/outbound/picking/init/index.ts b/src/views/shipment/outbound/picking/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/shipment/outbound/picking/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/shipment/outbound/picking/orderDetails.vue b/src/views/shipment/outbound/picking/orderDetails.vue new file mode 100644 index 0000000..101ac01 --- /dev/null +++ b/src/views/shipment/outbound/picking/orderDetails.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/views/shipment/outbound/shipmentOrder/add.vue b/src/views/shipment/outbound/shipmentOrder/add.vue new file mode 100644 index 0000000..87ff124 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/add.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/views/shipment/outbound/shipmentOrder/constant/add/button.ts b/src/views/shipment/outbound/shipmentOrder/constant/add/button.ts new file mode 100644 index 0000000..a0cb560 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/add/button.ts @@ -0,0 +1,15 @@ +export const BUTTON = [ + { + text: "保存", + permission: "shipmentOutboundShipmentOrderAddBtnSave", + type: "commit", + props: { + type: "primary" + } + }, + { + text: "提交", + permission: "shipmentOutboundShipmentOrderAddBtnCommit", + type: "commit" + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/add/index.ts b/src/views/shipment/outbound/shipmentOrder/constant/add/index.ts new file mode 100644 index 0000000..29a2b20 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/add/index.ts @@ -0,0 +1,198 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: false, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: false, + required: false + }, + + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: false, + required: false + }, + + { + prop: "orderBillNo", + placeholder: "请选择来源类型", + type: "select", + options: [], + label: "来源类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择拣货类型", + type: "select", + options: [], + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择组织", + type: "select", + options: [], + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请选择发货仓库", + type: "select", + options: [], + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间:", + type: "input", + label: "创建时间:", + disabled: false, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_TABLE_DATA = [ + { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false + } +]; +//用于增加的时候默认数据 +export const FORM_TABLE_DATA_INIT = { + serialNumber: "", + specifications: "", + barCode: "", + materialName: "", + materialNumber: "", + isOldData: false +}; +export const FORM_TABLE_COLUMNS = [ + { + label: "操作", + prop: "operation", + disabled: false, + isHeaderIcon: false, + fixed: true, + width: 180 + }, + { + label: "规格型号", + prop: "serialNumber", + disabled: false, + isHeaderIcon: true, + formType: "input", + fixed: true, + required: true, + options: [] + }, + + { + label: "物料编码", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "物料名称", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + { + label: "应收货数量", + prop: "numberCode", + formType: "input", + isHeaderIcon: true, + required: true, + fixed: true, + disabled: false + }, + + { + label: "单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "金额", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + + { + label: "含税单价", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "价税合计", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + }, + { + label: "订单明细备注", + prop: "numberCode", + formType: "input", + required: false, + disabled: false + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/details/button.ts b/src/views/shipment/outbound/shipmentOrder/constant/details/button.ts new file mode 100644 index 0000000..ee9bed2 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/details/button.ts @@ -0,0 +1,10 @@ +export const BUTTON = [ + { + text: "更新物流", + permission: "shipmentOutboundShipmentOrderAddBtnUpData", + type: "commit", + props: { + type: "primary" + } + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/details/search.ts b/src/views/shipment/outbound/shipmentOrder/constant/details/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/details/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/details/table.ts b/src/views/shipment/outbound/shipmentOrder/constant/details/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/details/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/list/button.ts b/src/views/shipment/outbound/shipmentOrder/constant/list/button.ts new file mode 100644 index 0000000..7edc859 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/list/button.ts @@ -0,0 +1,40 @@ +export const BUTTON = [ + { + text: "新增", + permission: "shipmentOutboundShipmentOrderBtnAdd", + type: "add", + props: { + type: "primary" + } + }, + { + text: "合并", + permission: "shipmentOutboundShipmentOrderBtnMerge", + type: "merge" + }, + { + text: "作废", + permission: "shipmentOutboundShipmentOrderBtnVoid", + type: "void" + }, + { + text: "反作废", + permission: "shipmentOutboundShipmentOrderBtnNoVoid", + type: "noVoid" + }, + { + text: "刷新", + permission: "shipmentOutboundShipmentOrderBtnRefresh", + type: "refresh" + }, + { + text: "导出", + permission: "shipmentOutboundShipmentOrderBtnExport", + type: "export" + }, + { + text: "完成", + permission: "shipmentOutboundShipmentOrderBtnComplete", + type: "complete" + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/list/index.ts b/src/views/shipment/outbound/shipmentOrder/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/list/search.ts b/src/views/shipment/outbound/shipmentOrder/constant/list/search.ts new file mode 100644 index 0000000..a7de643 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/list/search.ts @@ -0,0 +1,112 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货类型", + type: "select", + isArray: true, + label: "收货类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "收货开始日期", + endPlaceholder: "收货结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "收货时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货状态", + type: "select", + isArray: true, + label: "收货状态: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入收货人", + type: "input", + isArray: true, + label: "收货人: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入箱号", + type: "input", + isArray: true, + label: "箱号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入序列号", + type: "input", + isArray: true, + label: "序列号: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/shipment/outbound/shipmentOrder/constant/list/table.ts b/src/views/shipment/outbound/shipmentOrder/constant/list/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/constant/list/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/shipmentOrder/details.vue b/src/views/shipment/outbound/shipmentOrder/details.vue new file mode 100644 index 0000000..1b21a44 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/details.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/views/shipment/outbound/shipmentOrder/index.vue b/src/views/shipment/outbound/shipmentOrder/index.vue new file mode 100644 index 0000000..860cbae --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/index.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/views/shipment/outbound/shipmentOrder/init/btnClick.ts b/src/views/shipment/outbound/shipmentOrder/init/btnClick.ts new file mode 100644 index 0000000..1ca2e33 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/init/btnClick.ts @@ -0,0 +1,20 @@ +// 直接导出函数,无需额外包装对象 + +export const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/receipt/warehousing/receiptOrder/add" }); +}; + +export const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +export const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh, + add: handleAdd +}; diff --git a/src/views/shipment/outbound/shipmentOrder/init/index.ts b/src/views/shipment/outbound/shipmentOrder/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/shipment/outbound/shipmentOrder/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; diff --git a/src/views/shipment/outbound/shipping/constant/details/button.ts b/src/views/shipment/outbound/shipping/constant/details/button.ts new file mode 100644 index 0000000..ee9bed2 --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/details/button.ts @@ -0,0 +1,10 @@ +export const BUTTON = [ + { + text: "更新物流", + permission: "shipmentOutboundShipmentOrderAddBtnUpData", + type: "commit", + props: { + type: "primary" + } + } +]; diff --git a/src/views/shipment/outbound/shipping/constant/details/search.ts b/src/views/shipment/outbound/shipping/constant/details/search.ts new file mode 100644 index 0000000..d5178cd --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/details/search.ts @@ -0,0 +1,111 @@ +export const FORM_DATA: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入发货单号", + type: "input", + label: "发货单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货状态", + type: "input", + label: "发货状态:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入销售订单/线上单号", + type: "input", + label: "销售订单/线上单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入收货客户", + type: "input", + label: "收货客户:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入来源单号", + type: "input", + label: "来源单号:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入仓库", + type: "input", + label: "拣货类型:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入组织", + type: "input", + label: "组织:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入发货仓库", + type: "input", + label: "发货仓库:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入创建时间", + type: "input", + label: "创建时间:", + disabled: true, + required: false + } +]; + +export const RULE_FORM: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; +export const FORM_DATA1: any[] = [ + { + prop: "orderBillNo", + placeholder: "请输入回退人", + type: "input", + label: "回退人:", + disabled: true, + required: false + }, + { + prop: "orderBillNo", + placeholder: "请输入回退时间", + type: "input", + label: "回退时间:", + disabled: true, + required: false + } +]; +export const RULE_FORM1: any = { + productQty: "", + materialNumber: "", + orderBillNo: "" +}; diff --git a/src/views/shipment/outbound/shipping/constant/details/table.ts b/src/views/shipment/outbound/shipping/constant/details/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/details/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/shipping/constant/list/button.ts b/src/views/shipment/outbound/shipping/constant/list/button.ts new file mode 100644 index 0000000..161ed08 --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/list/button.ts @@ -0,0 +1,7 @@ +export const BUTTON = [ + { + text: "导出", + permission: "shipmentOutboundShippingBtnExport", + type: "export" + } +]; diff --git a/src/views/shipment/outbound/shipping/constant/list/index.ts b/src/views/shipment/outbound/shipping/constant/list/index.ts new file mode 100644 index 0000000..ed4bc49 --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/list/index.ts @@ -0,0 +1,4 @@ +import { FORM_DATA, RULE_FORM } from "./search"; +import { COLUMNS } from "./table"; +import { BUTTON } from "./button"; +export { FORM_DATA, RULE_FORM, COLUMNS, BUTTON }; diff --git a/src/views/shipment/outbound/shipping/constant/list/search.ts b/src/views/shipment/outbound/shipping/constant/list/search.ts new file mode 100644 index 0000000..a7de643 --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/list/search.ts @@ -0,0 +1,112 @@ +interface FormItem { + prop: string; + label?: string; + placeholder?: string; + type: string; + isCopy?: boolean; + optionProps?: any; + startPlaceholder?: string; + endPlaceholder?: string; + options?: any; + isArray?: boolean; + startDate?: string; //开始时间(传入后台需要的参数) + endDate?: string; //结束时间(传入后台需要的参数) + startProp?: string; + endProp?: string; + isInteger?: boolean; +} +export const FORM_DATA: FormItem[] = [ + { + prop: "securityNumbers", + placeholder: "请输入来源单号", + type: "input", + isArray: true, + label: "来源单号: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货类型", + type: "select", + isArray: true, + label: "收货类型: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择仓库", + type: "select", + isArray: true, + label: "仓库: ", + options: [] + }, + { + prop: "Time", + type: "daterange", + options: [], + startPlaceholder: "收货开始日期", + endPlaceholder: "收货结束日期", + startDate: "createBeginDate", + endDate: "createEndDate", + label: "收货时间: " + }, + { + prop: "lotNumbers", + placeholder: "请选择供应商", + type: "select", + isArray: true, + label: "供应商: ", + options: [] + }, + { + prop: "materialNumber", + placeholder: "请输入物料编码", + type: "selectRemote1", + isArray: true, + options: [], + label: "物料编码: " + }, + { + prop: "lotNumbers", + placeholder: "请选择收货状态", + type: "select", + isArray: true, + label: "收货状态: ", + options: [] + }, + { + prop: "lotNumbers", + placeholder: "请选择组织", + type: "select", + isArray: true, + label: "组织: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入收货人", + type: "input", + isArray: true, + label: "收货人: " + }, + + { + prop: "securityNumbers", + placeholder: "请输入箱号", + type: "input", + isArray: true, + label: "箱号: " + }, + { + prop: "securityNumbers", + placeholder: "请输入序列号", + type: "input", + isArray: true, + label: "序列号: " + } +]; + +export const RULE_FORM = { + page: 1, + size: 50, + orgCode: 0 +}; diff --git a/src/views/shipment/outbound/shipping/constant/list/table.ts b/src/views/shipment/outbound/shipping/constant/list/table.ts new file mode 100644 index 0000000..dc0790d --- /dev/null +++ b/src/views/shipment/outbound/shipping/constant/list/table.ts @@ -0,0 +1,143 @@ +export const COLUMNS = [ + { type: "selection", fixed: "left", width: 40 }, + { + align: "left", + fixed: true, + label: "收货单号", + prop: "lotNumber", + width: 260 + }, + { + align: "left", + label: "收货状态", + prop: "specifications", + width: 260 + }, + { + align: "left", + label: "销售订单号", + prop: "materialName", + width: 260 + }, + { + align: "left", + label: "来源单号", + prop: "materialNumber", + width: 260 + }, + { + align: "left", + label: "收货类型", + prop: "generateComplete", + width: 160 + }, + + { + align: "left", + label: "供应商", + prop: "downLoadNumber", + width: 120 + }, + { + align: "left", + label: "组织", + prop: "createTime", + width: 160 + }, + { + align: "left", + label: "规格型号", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料编码", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "物料名称", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "子仓库", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "应收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实收货数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "实入库数量", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货人", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "收货时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "订单明细备注", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "是否作废", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "创建时间", + prop: "creator", + width: 160 + }, + { + align: "left", + label: "期望交期", + prop: "creator", + width: 160 + } +]; diff --git a/src/views/shipment/outbound/shipping/details.vue b/src/views/shipment/outbound/shipping/details.vue new file mode 100644 index 0000000..cc4ad42 --- /dev/null +++ b/src/views/shipment/outbound/shipping/details.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/views/shipment/outbound/shipping/index.vue b/src/views/shipment/outbound/shipping/index.vue new file mode 100644 index 0000000..d123ce2 --- /dev/null +++ b/src/views/shipment/outbound/shipping/index.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/views/shipment/outbound/shipping/init/btnClick.ts b/src/views/shipment/outbound/shipping/init/btnClick.ts new file mode 100644 index 0000000..ad4208c --- /dev/null +++ b/src/views/shipment/outbound/shipping/init/btnClick.ts @@ -0,0 +1,20 @@ +// 直接导出函数,无需额外包装对象 + +const handleAdd = (item: any, $router: any) => { + console.log(item); + $router.push({ path: "/receipt/warehousing/receiptOrder/add" }); +}; + +const handleExport = (item: any) => { + console.log("导出操作", item); +}; + +const handleRefresh = (item: any) => { + console.log("刷新操作", item); +}; + +export const btnClick: any = { + export: handleExport, + refresh: handleRefresh, + add: handleAdd +}; diff --git a/src/views/shipment/outbound/shipping/init/index.ts b/src/views/shipment/outbound/shipping/init/index.ts new file mode 100644 index 0000000..76e1dc8 --- /dev/null +++ b/src/views/shipment/outbound/shipping/init/index.ts @@ -0,0 +1,2 @@ +import { btnClick } from "./btnClick"; +export { btnClick }; 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..f756424 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,48 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "types": ["vite/client", "element-plus/global"], + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + "allowJs": true, //添加 编译时允许有js + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "noEmit": true, + "baseUrl": "./", + "paths": { + "@": ["src"], + "@/*": ["src/*"] + } + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue", + "src/**/**/*.vue", + "src/components/**/*.ts", + "build/**/*.ts", + "build/**/*.d.ts", + "vite.config.ts", + "src/hooks/constant/outsourc/order.ts", + "src/utils/print/productionOrOutSourcOthers.js", + "src/utils/print/barCode/sequenceCodePrint1.js", + "src/utils/print/barCode/getPrintListCode.jss" + ], + "exclude": ["node_modules", "dist", "**/*.js"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..3839cd9 --- /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") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 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]" + } + } + } + }; +}); diff --git a/vite.config.ts.timestamp-1697763975859-9fadd96b6a9b5.mjs b/vite.config.ts.timestamp-1697763975859-9fadd96b6a9b5.mjs new file mode 100644 index 0000000..dd43829 --- /dev/null +++ b/vite.config.ts.timestamp-1697763975859-9fadd96b6a9b5.mjs @@ -0,0 +1,360 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-wms-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28td21zLXRzLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gXCIuL2J1aWxkL2dldEVudlwiO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tIFwiLi9idWlsZC9wbHVnaW5zXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5cbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcbn07XG5cbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcbiAgICBjb25zdCByb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICAgIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiB2aXRlRW52LlZJVEVfUFVCTElDX1BBVEgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgaG9zdDogXCIwLjAuMC4wXCIsXG4gICAgICAgICAgICBwb3J0OiB2aXRlRW52LlZJVEVfUE9SVCxcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxuICAgICAgICAgICAgY29yczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIExvYWQgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYuZGV2ZWxvcG1lbnRcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYpLFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxuICAgICAgICAgICAgbWluaWZ5OiBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIC8vIGVzYnVpbGQgXHU2MjUzXHU1MzA1XHU2NkY0XHU1RkVCXHVGRjBDXHU0RjQ2XHU2NjJGXHU0RTBEXHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHVGRjBDdGVyc2VyXHU2MjUzXHU1MzA1XHU2MTYyXHVGRjBDXHU0RjQ2XHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXG4gICAgICAgICAgICAvLyB0ZXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBcdGNvbXByZXNzOiB7XG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxuICAgICAgICAgICAgLy8gXHRcdGRyb3BfZGVidWdnZXI6IHRydWVcbiAgICAgICAgICAgIC8vIFx0fVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFx1Nzk4MVx1NzUyOCBnemlwIFx1NTM4Qlx1N0YyOVx1NTkyN1x1NUMwRlx1NjJBNVx1NTQ0QVx1RkYwQ1x1NTNFRlx1NzU2NVx1NUZBRVx1NTFDRlx1NUMxMVx1NjI1M1x1NTMwNVx1NjVGNlx1OTVGNFxuICAgICAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxuICAgICAgICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLFxuICAgICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGF0aWMgcmVzb3VyY2UgY2xhc3NpZmljYXRpb24gYW5kIHBhY2thZ2luZ1xuICAgICAgICAgICAgICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogXCJhc3NldHMvW2V4dF0vW25hbWVdLVtoYXNoXS5bZXh0XVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi9idWlsZC9nZXRFbnYudHNcIjtpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwicHJvZHVjdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwidGVzdFwiO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcG9ydE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZJVEVfUkVQT1JUID09PSBcInRydWVcIjtcbn1cblxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBwZXJFbnYoZW52Q29uZjogUmVjb3JkYWJsZSk6IFZpdGVFbnYge1xuICAgIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcbiAgICAgICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCBcIlxcblwiKTtcbiAgICAgICAgcmVhbE5hbWUgPSByZWFsTmFtZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogcmVhbE5hbWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogcmVhbE5hbWU7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUE9SVFwiKSByZWFsTmFtZSA9IE51bWJlcihyZWFsTmFtZSk7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUFJPWFlcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAuLi5kaXIpO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28td21zLXRzLWFkbWluL2J1aWxkL3Byb3h5LnRzXCI7aW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tIFwidml0ZVwiO1xuXG50eXBlIFByb3h5SXRlbSA9IFtzdHJpbmcsIHN0cmluZ107XG5cbnR5cGUgUHJveHlMaXN0ID0gUHJveHlJdGVtW107XG5cbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPjtcblxuLyoqXG4gKiBcdTUyMUJcdTVFRkFcdTRFRTNcdTc0MDZcdUZGMENcdTc1MjhcdTRFOEVcdTg5RTNcdTY3OTAgLmVudi5kZXZlbG9wbWVudCBcdTRFRTNcdTc0MDZcdTkxNERcdTdGNkVcbiAqIEBwYXJhbSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eShsaXN0OiBQcm94eUxpc3QgPSBbXSkge1xuICAgIGNvbnN0IHJldDogUHJveHlUYXJnZXRMaXN0ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcbiAgICAgICAgY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvLztcbiAgICAgICAgY29uc3QgaXNIdHRwcyA9IGh0dHBzUkUudGVzdCh0YXJnZXQpO1xuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXG4gICAgICAgIHJldFtwcmVmaXhdID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICAgIHJld3JpdGU6IHBhdGggPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3ByZWZpeH1gKSwgXCJcIiksXG4gICAgICAgICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxuICAgICAgICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby13bXMtdHMtYWRtaW4vYnVpbGQvcGx1Z2lucy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcbmltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiO1xuaW1wb3J0IHZ1ZUpzeCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiO1xuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XG5pbXBvcnQgdml0ZUNvbXByZXNzaW9uIGZyb20gXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiO1xuaW1wb3J0IHZ1ZVNldHVwRXh0ZW5kIGZyb20gXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXMvdml0ZVwiO1xuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCI7XG4vLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV1aS1cdTdFQzRcdTRFRjYgXHU2QkQ0XHU1OTgyXHU4QkY0YW50LWRlc2lnbi12dWUgIGVsZW1lbnQtcGx1c1x1N0I0OVxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcbi8vIGVsZW1lbnRcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzXCI7XG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcbmltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiO1xuaW1wb3J0IEljb25zUmVzb2x2ZXIgZnJvbSBcInVucGx1Z2luLWljb25zL3Jlc29sdmVyXCI7XG5cbi8qKlxuICogXHU1MjFCXHU1RUZBIHZpdGUgXHU2M0QyXHU0RUY2XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVml0ZVBsdWdpbnMgPSAodml0ZUVudjogVml0ZUVudik6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9PiB7XG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdnVlKCksXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcbiAgICAgICAgdnVlSnN4KCksXG4gICAgICAgIC8vIGVzTGludCBcdTYyQTVcdTk1MTlcdTRGRTFcdTYwNkZcdTY2M0VcdTc5M0FcdTU3MjhcdTZENEZcdTg5QzhcdTU2NjhcdTc1NENcdTk3NjJcdTRFMEFcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXG4gICAgICAgIC8vIG5hbWUgXHU1M0VGXHU0RUU1XHU1MTk5XHU1NzI4IHNjcmlwdCBcdTY4MDdcdTdCN0VcdTRFMEFcbiAgICAgICAgdnVlU2V0dXBFeHRlbmQoe30pLFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcbiAgICAgICAgY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiksXG4gICAgICAgIC8vIFx1NkNFOFx1NTE2NVx1NTNEOFx1OTFDRlx1NTIzMCBodG1sIFx1NjU4N1x1NEVGNlxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcbiAgICAgICAgICAgIGluamVjdDoge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gXHU0RjdGXHU3NTI4IHN2ZyBcdTU2RkVcdTY4MDdcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xuICAgICAgICAgICAgaWNvbkRpcnM6IFtyZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwic3JjL2Fzc2V0cy9pY29uc1wiKV0sXG4gICAgICAgICAgICBzeW1ib2xJZDogXCJpY29uLVtkaXJdLVtuYW1lXVwiXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBlbGVtZW50XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XG4gICAgICAgIEF1dG9JbXBvcnQoe1xuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcbiAgICAgICAgICAgIGltcG9ydHM6IFtcInZ1ZVwiLCBcInZ1ZS1yb3V0ZXJcIl0sXG4gICAgICAgICAgICBkdHM6IFwic3JjL2F1dG8taW1wb3J0LmQudHNcIixcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xuICAgICAgICAgICAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogXCJzYXNzXCIgfSksXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJJY29uXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgQ29tcG9uZW50cyh7XG4gICAgICAgICAgICAvLyBlbGVtZW50XG4gICAgICAgICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCJdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyBcdTlFRDhcdThCQTRcdTVCNThcdTY1M0VcdTRGNERcdTdGNkVcbiAgICAgICAgICAgIGR0czogXCJzcmMvY29tcG9uZW50cy5kLnRzXCJcbiAgICAgICAgfSksXG4gICAgICAgIEljb25zKHtcbiAgICAgICAgICAgIGF1dG9JbnN0YWxsOiB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICAvLyB2aXRlUFdBXG4gICAgICAgIFZJVEVfUFdBICYmIGNyZWF0ZVZpdGVQd2Eodml0ZUVudiksXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxuICAgICAgICBWSVRFX1JFUE9SVCAmJiAodmlzdWFsaXplcih7IGZpbGVuYW1lOiBcInN0YXRzLmh0bWxcIiwgZ3ppcFNpemU6IHRydWUsIGJyb3RsaVNpemU6IHRydWUgfSkgYXMgUGx1Z2luT3B0aW9uKVxuICAgIF07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyA9IFwibm9uZVwiLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudjtcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KFwiLFwiKTtcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJnemlwXCIpKSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgZXh0OiBcIi5nelwiLFxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJnemlwXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmJyXCIsXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBcImJyb3RsaUNvbXByZXNzXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVml0ZVB3YVxuICogQHBhcmFtIHZpdGVFbnZcbiAqL1xuY29uc3QgY3JlYXRlVml0ZVB3YSA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcbiAgICByZXR1cm4gVml0ZVBXQSh7XG4gICAgICAgIHJlZ2lzdGVyVHlwZTogXCJhdXRvVXBkYXRlXCIsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICBuYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxuICAgICAgICAgICAgc2hvcnRfbmFtZTogVklURV9HTE9CX0FQUF9USVRMRSxcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcbiAgICAgICAgICAgIGljb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjE5MngxOTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHVycG9zZTogXCJhbnkgbWFza2FibGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsICJ7XG4gICAgXCJuYW1lXCI6IFwib3BzX2FkbWluX3RzXCIsXG4gICAgXCJwcml2YXRlXCI6IHRydWUsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAgICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgICBcInNjcmlwdHNcIjoge1xuICAgICAgICBcImRldlwiOiBcInZpdGVcIixcbiAgICAgICAgXCJzZXJ2ZVwiOiBcInZpdGVcIixcbiAgICAgICAgXCJidWlsZDpkZXZcIjogXCJ2dWUtdHNjICYmIHZpdGUgYnVpbGQgLS1tb2RlIGRldmVsb3BtZW50XCIsXG4gICAgICAgIFwiYnVpbGQ6dGVzdFwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxuICAgICAgICBcImJ1aWxkOnByb1wiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgcHJvZHVjdGlvblwiLFxuICAgICAgICBcInR5cGU6Y2hlY2tcIjogXCJ2dWUtdHNjIC0tbm9FbWl0IC0tc2tpcExpYkNoZWNrXCIsXG4gICAgICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQ6ZGV2ICYmIHZpdGUgcHJldmlld1wiLFxuICAgICAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IC0tZml4IC0tZXh0IC5qcywudHMsLnZ1ZSAuL3NyY1wiLFxuICAgICAgICBcImxpbnQ6cHJldHRpZXJcIjogXCJwcmV0dGllciAtLXdyaXRlIFxcXCJzcmMvKiovKi57anMsdHMsanNvbix0c3gsY3NzLGxlc3Msc2Nzcyx2dWUsaHRtbCxtZH1cXFwiXCIsXG4gICAgICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1jYWNoZSAtLWZpeCBcXFwiKiovKi57dnVlLGxlc3MscG9zdGNzcyxjc3Msc2Nzc31cXFwiIC0tY2FjaGUgLS1jYWNoZS1sb2NhdGlvbiBub2RlX21vZHVsZXMvLmNhY2hlL3N0eWxlbGludC9cIixcbiAgICAgICAgXCJsaW50OmxpbnQtc3RhZ2VkXCI6IFwibGludC1zdGFnZWRcIixcbiAgICAgICAgXCJwcmVwYXJlXCI6IFwiaHVza3kgaW5zdGFsbFwiLFxuICAgICAgICBcInJlbGVhc2VcIjogXCJzdGFuZGFyZC12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29tbWl0XCI6IFwiZ2l0IGFkZCAtQSAmJiBjemcgJiYgZ2l0IHB1c2hcIlxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiXjIuMS4wXCIsXG4gICAgICAgIFwiQHR5cGVzL2RlY2ltYWwuanNcIjogXCJeNy40LjBcIixcbiAgICAgICAgXCJAdnVldXNlL2NvcmVcIjogXCJeMTAuMS4yXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yXCI6IFwiXjUuMS4yM1wiLFxuICAgICAgICBcIkB3YW5nZWRpdG9yL2VkaXRvci1mb3ItdnVlXCI6IFwiXjUuMS4xMlwiLFxuICAgICAgICBcImFzeW5jLXZhbGlkYXRvclwiOiBcIl40LjIuNVwiLFxuICAgICAgICBcImF4aW9zXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRyaXZlci5qc1wiOiBcIl4wLjkuOFwiLFxuICAgICAgICBcImVsZW1lbnQtcGx1c1wiOiBcIl4yLjMuNFwiLFxuICAgICAgICBcImZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJqcy1tZDVcIjogXCJeMC43LjNcIixcbiAgICAgICAgXCJsb2Rhc2gtZXNcIjogXCJeNC4xNy4yMVwiLFxuICAgICAgICBcIm1pdHRcIjogXCJeMy4wLjBcIixcbiAgICAgICAgXCJucHJvZ3Jlc3NcIjogXCJeMC4yLjBcIixcbiAgICAgICAgXCJwaW5pYVwiOiBcIl4yLjEuM1wiLFxuICAgICAgICBcInBpbmlhLXBsdWdpbi1wZXJzaXN0ZWRzdGF0ZVwiOiBcIl4zLjEuMFwiLFxuICAgICAgICBcInByaW50LWpzXCI6IFwiXjEuNi4wXCIsXG4gICAgICAgIFwicXNcIjogXCJeNi4xMS4yXCIsXG4gICAgICAgIFwic29ydGFibGVqc1wiOiBcIl4xLjE1LjBcIixcbiAgICAgICAgXCJ2dWVcIjogXCJeMy4zLjRcIixcbiAgICAgICAgXCJ2dWUtcm91dGVyXCI6IFwiXjQuMi4yXCIsXG4gICAgICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiXjQuMS4wXCIsXG4gICAgICAgIFwidnhlLXRhYmxlXCI6IFwiXjQuNS4wLWJldGEuMTBcIixcbiAgICAgICAgXCJ4ZS11dGlsc1wiOiBcIl4zLjUuMTFcIixcbiAgICAgICAgXCJ4bHN4XCI6IFwiXjAuMTguNVwiXG4gICAgfSxcbiAgICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcIjogXCJeMTcuNi4zXCIsXG4gICAgICAgIFwiQGljb25pZnktanNvbi9lcFwiOiBcIl4xLjEuMTBcIixcbiAgICAgICAgXCJAdHlwZXMvZmlsZS1zYXZlclwiOiBcIl4yLjAuNVwiLFxuICAgICAgICBcIkB0eXBlcy9qcy1tZDVcIjogXCJeMC43LjBcIixcbiAgICAgICAgXCJAdHlwZXMvbnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS43XCIsXG4gICAgICAgIFwiQHR5cGVzL3NvcnRhYmxlanNcIjogXCJeMS4xNS4xXCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5cIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiOiBcIl41LjU5LjdcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCJeNC4yLjNcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI6IFwiXjMuMC4xXCIsXG4gICAgICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMTRcIixcbiAgICAgICAgXCJjei1naXRcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJjemdcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJlc2xpbnRcIjogXCJeOC40MS4wXCIsXG4gICAgICAgIFwiZXNsaW50LWNvbmZpZy1wcmV0dGllclwiOiBcIl44LjguMFwiLFxuICAgICAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCJeNC4yLjFcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIl45LjE0LjBcIixcbiAgICAgICAgXCJodXNreVwiOiBcIl44LjAuM1wiLFxuICAgICAgICBcImxpbnQtc3RhZ2VkXCI6IFwiXjEzLjIuMlwiLFxuICAgICAgICBcInBvc3Rjc3NcIjogXCJeOC40LjIzXCIsXG4gICAgICAgIFwicG9zdGNzcy1odG1sXCI6IFwiXjEuNS4wXCIsXG4gICAgICAgIFwicHJldHRpZXJcIjogXCJeMi44LjhcIixcbiAgICAgICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCJeNS45LjBcIixcbiAgICAgICAgXCJzYXNzXCI6IFwiXjEuNjIuMVwiLFxuICAgICAgICBcInN0YW5kYXJkLXZlcnNpb25cIjogXCJeOS41LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnRcIjogXCJeMTUuNi4yXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1odG1sXCI6IFwiXjEuMS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNlc3Mtb3JkZXJcIjogXCJeNC4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXJlY29tbWVuZGVkLXNjc3NcIjogXCJeMTIuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC12dWVcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiXjMzLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctc3RhbmRhcmQtc2Nzc1wiOiBcIl45LjAuMFwiLFxuICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4wLjJcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1hdXRvLWltcG9ydFwiOiBcIl4wLjE2LjRcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1pY29uc1wiOiBcIl4wLjE2LjNcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50c1wiOiBcIl4wLjI1LjFcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXNcIjogXCJeMS4wLjBcIixcbiAgICAgICAgXCJ2aXRlXCI6IFwiXjQuMy45XCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIjogXCJeMC41LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1lc2xpbnRcIjogXCJeMS44LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiXjMuMi4wXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tcHdhXCI6IFwiXjAuMTUuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIl4yLjAuMVwiLFxuICAgICAgICBcInZ1ZS10c2NcIjogXCJeMS42LjVcIlxuICAgIH0sXG4gICAgXCJlbmdpbmVzXCI6IHtcbiAgICAgICAgXCJub2RlXCI6IFwiPj0xNi4wLjBcIlxuICAgIH0sXG4gICAgXCJicm93c2Vyc2xpc3RcIjoge1xuICAgICAgICBcInByb2R1Y3Rpb25cIjogW1xuICAgICAgICAgICAgXCI+IDElXCIsXG4gICAgICAgICAgICBcIm5vdCBkZWFkXCIsXG4gICAgICAgICAgICBcIm5vdCBvcF9taW5pIGFsbFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwiZGV2ZWxvcG1lbnRcIjogW1xuICAgICAgICAgICAgXCJsYXN0IDEgY2hyb21lIHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIGZpcmVmb3ggdmVyc2lvblwiLFxuICAgICAgICAgICAgXCJsYXN0IDEgc2FmYXJpIHZlcnNpb25cIlxuICAgICAgICBdXG4gICAgfSxcbiAgICBcImNvbmZpZ1wiOiB7XG4gICAgICAgIFwiY29tbWl0aXplblwiOiB7XG4gICAgICAgICAgICBcInBhdGhcIjogXCJub2RlX21vZHVsZXMvY3otZ2l0XCJcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBK1EsU0FBUyxjQUFjLGVBQXNDO0FBQzVVLFNBQVMsV0FBQUEsZ0JBQWU7OztBQ3FCakIsU0FBUyxXQUFXLFNBQThCO0FBQ3JELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3hDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBQ3ZFLFFBQUksWUFBWTtBQUFhLGlCQUFXLE9BQU8sUUFBUTtBQUN2RCxRQUFJLFlBQVksY0FBYztBQUMxQixVQUFJO0FBQ0EsbUJBQVcsS0FBSyxNQUFNLFFBQVE7QUFBQSxNQUNsQyxTQUFTLE9BQVA7QUFBQSxNQUFlO0FBQUEsSUFDckI7QUFDQSxRQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ25CO0FBQ0EsU0FBTztBQUNYOzs7QUN6Qk8sU0FBUyxZQUFZLE9BQWtCLENBQUMsR0FBRztBQUM5QyxRQUFNLE1BQXVCLENBQUM7QUFDOUIsYUFBVyxDQUFDLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDakMsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sVUFBVSxRQUFRLEtBQUssTUFBTTtBQUduQyxRQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLElBQUk7QUFB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 diff --git a/vite.config.ts.timestamp-1699598044242-49609c6b6837c.mjs b/vite.config.ts.timestamp-1699598044242-49609c6b6837c.mjs new file mode 100644 index 0000000..dd43829 --- /dev/null +++ b/vite.config.ts.timestamp-1699598044242-49609c6b6837c.mjs @@ -0,0 +1,360 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-wms-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28td21zLXRzLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gXCIuL2J1aWxkL2dldEVudlwiO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tIFwiLi9idWlsZC9wbHVnaW5zXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5cbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcbn07XG5cbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcbiAgICBjb25zdCByb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICAgIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiB2aXRlRW52LlZJVEVfUFVCTElDX1BBVEgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgaG9zdDogXCIwLjAuMC4wXCIsXG4gICAgICAgICAgICBwb3J0OiB2aXRlRW52LlZJVEVfUE9SVCxcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxuICAgICAgICAgICAgY29yczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIExvYWQgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYuZGV2ZWxvcG1lbnRcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYpLFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxuICAgICAgICAgICAgbWluaWZ5OiBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIC8vIGVzYnVpbGQgXHU2MjUzXHU1MzA1XHU2NkY0XHU1RkVCXHVGRjBDXHU0RjQ2XHU2NjJGXHU0RTBEXHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHVGRjBDdGVyc2VyXHU2MjUzXHU1MzA1XHU2MTYyXHVGRjBDXHU0RjQ2XHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXG4gICAgICAgICAgICAvLyB0ZXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBcdGNvbXByZXNzOiB7XG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxuICAgICAgICAgICAgLy8gXHRcdGRyb3BfZGVidWdnZXI6IHRydWVcbiAgICAgICAgICAgIC8vIFx0fVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFx1Nzk4MVx1NzUyOCBnemlwIFx1NTM4Qlx1N0YyOVx1NTkyN1x1NUMwRlx1NjJBNVx1NTQ0QVx1RkYwQ1x1NTNFRlx1NzU2NVx1NUZBRVx1NTFDRlx1NUMxMVx1NjI1M1x1NTMwNVx1NjVGNlx1OTVGNFxuICAgICAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxuICAgICAgICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLFxuICAgICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGF0aWMgcmVzb3VyY2UgY2xhc3NpZmljYXRpb24gYW5kIHBhY2thZ2luZ1xuICAgICAgICAgICAgICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogXCJhc3NldHMvW2V4dF0vW25hbWVdLVtoYXNoXS5bZXh0XVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi9idWlsZC9nZXRFbnYudHNcIjtpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwicHJvZHVjdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwidGVzdFwiO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcG9ydE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZJVEVfUkVQT1JUID09PSBcInRydWVcIjtcbn1cblxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBwZXJFbnYoZW52Q29uZjogUmVjb3JkYWJsZSk6IFZpdGVFbnYge1xuICAgIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcbiAgICAgICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCBcIlxcblwiKTtcbiAgICAgICAgcmVhbE5hbWUgPSByZWFsTmFtZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogcmVhbE5hbWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogcmVhbE5hbWU7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUE9SVFwiKSByZWFsTmFtZSA9IE51bWJlcihyZWFsTmFtZSk7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUFJPWFlcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAuLi5kaXIpO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28td21zLXRzLWFkbWluL2J1aWxkL3Byb3h5LnRzXCI7aW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tIFwidml0ZVwiO1xuXG50eXBlIFByb3h5SXRlbSA9IFtzdHJpbmcsIHN0cmluZ107XG5cbnR5cGUgUHJveHlMaXN0ID0gUHJveHlJdGVtW107XG5cbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPjtcblxuLyoqXG4gKiBcdTUyMUJcdTVFRkFcdTRFRTNcdTc0MDZcdUZGMENcdTc1MjhcdTRFOEVcdTg5RTNcdTY3OTAgLmVudi5kZXZlbG9wbWVudCBcdTRFRTNcdTc0MDZcdTkxNERcdTdGNkVcbiAqIEBwYXJhbSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eShsaXN0OiBQcm94eUxpc3QgPSBbXSkge1xuICAgIGNvbnN0IHJldDogUHJveHlUYXJnZXRMaXN0ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcbiAgICAgICAgY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvLztcbiAgICAgICAgY29uc3QgaXNIdHRwcyA9IGh0dHBzUkUudGVzdCh0YXJnZXQpO1xuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXG4gICAgICAgIHJldFtwcmVmaXhdID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICAgIHJld3JpdGU6IHBhdGggPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3ByZWZpeH1gKSwgXCJcIiksXG4gICAgICAgICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxuICAgICAgICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby13bXMtdHMtYWRtaW4vYnVpbGQvcGx1Z2lucy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcbmltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiO1xuaW1wb3J0IHZ1ZUpzeCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiO1xuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XG5pbXBvcnQgdml0ZUNvbXByZXNzaW9uIGZyb20gXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiO1xuaW1wb3J0IHZ1ZVNldHVwRXh0ZW5kIGZyb20gXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXMvdml0ZVwiO1xuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCI7XG4vLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV1aS1cdTdFQzRcdTRFRjYgXHU2QkQ0XHU1OTgyXHU4QkY0YW50LWRlc2lnbi12dWUgIGVsZW1lbnQtcGx1c1x1N0I0OVxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcbi8vIGVsZW1lbnRcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzXCI7XG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcbmltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiO1xuaW1wb3J0IEljb25zUmVzb2x2ZXIgZnJvbSBcInVucGx1Z2luLWljb25zL3Jlc29sdmVyXCI7XG5cbi8qKlxuICogXHU1MjFCXHU1RUZBIHZpdGUgXHU2M0QyXHU0RUY2XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVml0ZVBsdWdpbnMgPSAodml0ZUVudjogVml0ZUVudik6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9PiB7XG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdnVlKCksXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcbiAgICAgICAgdnVlSnN4KCksXG4gICAgICAgIC8vIGVzTGludCBcdTYyQTVcdTk1MTlcdTRGRTFcdTYwNkZcdTY2M0VcdTc5M0FcdTU3MjhcdTZENEZcdTg5QzhcdTU2NjhcdTc1NENcdTk3NjJcdTRFMEFcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXG4gICAgICAgIC8vIG5hbWUgXHU1M0VGXHU0RUU1XHU1MTk5XHU1NzI4IHNjcmlwdCBcdTY4MDdcdTdCN0VcdTRFMEFcbiAgICAgICAgdnVlU2V0dXBFeHRlbmQoe30pLFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcbiAgICAgICAgY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiksXG4gICAgICAgIC8vIFx1NkNFOFx1NTE2NVx1NTNEOFx1OTFDRlx1NTIzMCBodG1sIFx1NjU4N1x1NEVGNlxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcbiAgICAgICAgICAgIGluamVjdDoge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gXHU0RjdGXHU3NTI4IHN2ZyBcdTU2RkVcdTY4MDdcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xuICAgICAgICAgICAgaWNvbkRpcnM6IFtyZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwic3JjL2Fzc2V0cy9pY29uc1wiKV0sXG4gICAgICAgICAgICBzeW1ib2xJZDogXCJpY29uLVtkaXJdLVtuYW1lXVwiXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBlbGVtZW50XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XG4gICAgICAgIEF1dG9JbXBvcnQoe1xuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcbiAgICAgICAgICAgIGltcG9ydHM6IFtcInZ1ZVwiLCBcInZ1ZS1yb3V0ZXJcIl0sXG4gICAgICAgICAgICBkdHM6IFwic3JjL2F1dG8taW1wb3J0LmQudHNcIixcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xuICAgICAgICAgICAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogXCJzYXNzXCIgfSksXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJJY29uXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgQ29tcG9uZW50cyh7XG4gICAgICAgICAgICAvLyBlbGVtZW50XG4gICAgICAgICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCJdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyBcdTlFRDhcdThCQTRcdTVCNThcdTY1M0VcdTRGNERcdTdGNkVcbiAgICAgICAgICAgIGR0czogXCJzcmMvY29tcG9uZW50cy5kLnRzXCJcbiAgICAgICAgfSksXG4gICAgICAgIEljb25zKHtcbiAgICAgICAgICAgIGF1dG9JbnN0YWxsOiB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICAvLyB2aXRlUFdBXG4gICAgICAgIFZJVEVfUFdBICYmIGNyZWF0ZVZpdGVQd2Eodml0ZUVudiksXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxuICAgICAgICBWSVRFX1JFUE9SVCAmJiAodmlzdWFsaXplcih7IGZpbGVuYW1lOiBcInN0YXRzLmh0bWxcIiwgZ3ppcFNpemU6IHRydWUsIGJyb3RsaVNpemU6IHRydWUgfSkgYXMgUGx1Z2luT3B0aW9uKVxuICAgIF07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyA9IFwibm9uZVwiLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudjtcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KFwiLFwiKTtcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJnemlwXCIpKSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgZXh0OiBcIi5nelwiLFxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJnemlwXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmJyXCIsXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBcImJyb3RsaUNvbXByZXNzXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVml0ZVB3YVxuICogQHBhcmFtIHZpdGVFbnZcbiAqL1xuY29uc3QgY3JlYXRlVml0ZVB3YSA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcbiAgICByZXR1cm4gVml0ZVBXQSh7XG4gICAgICAgIHJlZ2lzdGVyVHlwZTogXCJhdXRvVXBkYXRlXCIsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICBuYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxuICAgICAgICAgICAgc2hvcnRfbmFtZTogVklURV9HTE9CX0FQUF9USVRMRSxcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcbiAgICAgICAgICAgIGljb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjE5MngxOTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHVycG9zZTogXCJhbnkgbWFza2FibGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsICJ7XG4gICAgXCJuYW1lXCI6IFwib3BzX2FkbWluX3RzXCIsXG4gICAgXCJwcml2YXRlXCI6IHRydWUsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAgICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgICBcInNjcmlwdHNcIjoge1xuICAgICAgICBcImRldlwiOiBcInZpdGVcIixcbiAgICAgICAgXCJzZXJ2ZVwiOiBcInZpdGVcIixcbiAgICAgICAgXCJidWlsZDpkZXZcIjogXCJ2dWUtdHNjICYmIHZpdGUgYnVpbGQgLS1tb2RlIGRldmVsb3BtZW50XCIsXG4gICAgICAgIFwiYnVpbGQ6dGVzdFwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxuICAgICAgICBcImJ1aWxkOnByb1wiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgcHJvZHVjdGlvblwiLFxuICAgICAgICBcInR5cGU6Y2hlY2tcIjogXCJ2dWUtdHNjIC0tbm9FbWl0IC0tc2tpcExpYkNoZWNrXCIsXG4gICAgICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQ6ZGV2ICYmIHZpdGUgcHJldmlld1wiLFxuICAgICAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IC0tZml4IC0tZXh0IC5qcywudHMsLnZ1ZSAuL3NyY1wiLFxuICAgICAgICBcImxpbnQ6cHJldHRpZXJcIjogXCJwcmV0dGllciAtLXdyaXRlIFxcXCJzcmMvKiovKi57anMsdHMsanNvbix0c3gsY3NzLGxlc3Msc2Nzcyx2dWUsaHRtbCxtZH1cXFwiXCIsXG4gICAgICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1jYWNoZSAtLWZpeCBcXFwiKiovKi57dnVlLGxlc3MscG9zdGNzcyxjc3Msc2Nzc31cXFwiIC0tY2FjaGUgLS1jYWNoZS1sb2NhdGlvbiBub2RlX21vZHVsZXMvLmNhY2hlL3N0eWxlbGludC9cIixcbiAgICAgICAgXCJsaW50OmxpbnQtc3RhZ2VkXCI6IFwibGludC1zdGFnZWRcIixcbiAgICAgICAgXCJwcmVwYXJlXCI6IFwiaHVza3kgaW5zdGFsbFwiLFxuICAgICAgICBcInJlbGVhc2VcIjogXCJzdGFuZGFyZC12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29tbWl0XCI6IFwiZ2l0IGFkZCAtQSAmJiBjemcgJiYgZ2l0IHB1c2hcIlxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiXjIuMS4wXCIsXG4gICAgICAgIFwiQHR5cGVzL2RlY2ltYWwuanNcIjogXCJeNy40LjBcIixcbiAgICAgICAgXCJAdnVldXNlL2NvcmVcIjogXCJeMTAuMS4yXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yXCI6IFwiXjUuMS4yM1wiLFxuICAgICAgICBcIkB3YW5nZWRpdG9yL2VkaXRvci1mb3ItdnVlXCI6IFwiXjUuMS4xMlwiLFxuICAgICAgICBcImFzeW5jLXZhbGlkYXRvclwiOiBcIl40LjIuNVwiLFxuICAgICAgICBcImF4aW9zXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRyaXZlci5qc1wiOiBcIl4wLjkuOFwiLFxuICAgICAgICBcImVsZW1lbnQtcGx1c1wiOiBcIl4yLjMuNFwiLFxuICAgICAgICBcImZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJqcy1tZDVcIjogXCJeMC43LjNcIixcbiAgICAgICAgXCJsb2Rhc2gtZXNcIjogXCJeNC4xNy4yMVwiLFxuICAgICAgICBcIm1pdHRcIjogXCJeMy4wLjBcIixcbiAgICAgICAgXCJucHJvZ3Jlc3NcIjogXCJeMC4yLjBcIixcbiAgICAgICAgXCJwaW5pYVwiOiBcIl4yLjEuM1wiLFxuICAgICAgICBcInBpbmlhLXBsdWdpbi1wZXJzaXN0ZWRzdGF0ZVwiOiBcIl4zLjEuMFwiLFxuICAgICAgICBcInByaW50LWpzXCI6IFwiXjEuNi4wXCIsXG4gICAgICAgIFwicXNcIjogXCJeNi4xMS4yXCIsXG4gICAgICAgIFwic29ydGFibGVqc1wiOiBcIl4xLjE1LjBcIixcbiAgICAgICAgXCJ2dWVcIjogXCJeMy4zLjRcIixcbiAgICAgICAgXCJ2dWUtcm91dGVyXCI6IFwiXjQuMi4yXCIsXG4gICAgICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiXjQuMS4wXCIsXG4gICAgICAgIFwidnhlLXRhYmxlXCI6IFwiXjQuNS4wLWJldGEuMTBcIixcbiAgICAgICAgXCJ4ZS11dGlsc1wiOiBcIl4zLjUuMTFcIixcbiAgICAgICAgXCJ4bHN4XCI6IFwiXjAuMTguNVwiXG4gICAgfSxcbiAgICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcIjogXCJeMTcuNi4zXCIsXG4gICAgICAgIFwiQGljb25pZnktanNvbi9lcFwiOiBcIl4xLjEuMTBcIixcbiAgICAgICAgXCJAdHlwZXMvZmlsZS1zYXZlclwiOiBcIl4yLjAuNVwiLFxuICAgICAgICBcIkB0eXBlcy9qcy1tZDVcIjogXCJeMC43LjBcIixcbiAgICAgICAgXCJAdHlwZXMvbnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS43XCIsXG4gICAgICAgIFwiQHR5cGVzL3NvcnRhYmxlanNcIjogXCJeMS4xNS4xXCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5cIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiOiBcIl41LjU5LjdcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCJeNC4yLjNcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI6IFwiXjMuMC4xXCIsXG4gICAgICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMTRcIixcbiAgICAgICAgXCJjei1naXRcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJjemdcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJlc2xpbnRcIjogXCJeOC40MS4wXCIsXG4gICAgICAgIFwiZXNsaW50LWNvbmZpZy1wcmV0dGllclwiOiBcIl44LjguMFwiLFxuICAgICAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCJeNC4yLjFcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIl45LjE0LjBcIixcbiAgICAgICAgXCJodXNreVwiOiBcIl44LjAuM1wiLFxuICAgICAgICBcImxpbnQtc3RhZ2VkXCI6IFwiXjEzLjIuMlwiLFxuICAgICAgICBcInBvc3Rjc3NcIjogXCJeOC40LjIzXCIsXG4gICAgICAgIFwicG9zdGNzcy1odG1sXCI6IFwiXjEuNS4wXCIsXG4gICAgICAgIFwicHJldHRpZXJcIjogXCJeMi44LjhcIixcbiAgICAgICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCJeNS45LjBcIixcbiAgICAgICAgXCJzYXNzXCI6IFwiXjEuNjIuMVwiLFxuICAgICAgICBcInN0YW5kYXJkLXZlcnNpb25cIjogXCJeOS41LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnRcIjogXCJeMTUuNi4yXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1odG1sXCI6IFwiXjEuMS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNlc3Mtb3JkZXJcIjogXCJeNC4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXJlY29tbWVuZGVkLXNjc3NcIjogXCJeMTIuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC12dWVcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiXjMzLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctc3RhbmRhcmQtc2Nzc1wiOiBcIl45LjAuMFwiLFxuICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4wLjJcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1hdXRvLWltcG9ydFwiOiBcIl4wLjE2LjRcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1pY29uc1wiOiBcIl4wLjE2LjNcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50c1wiOiBcIl4wLjI1LjFcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXNcIjogXCJeMS4wLjBcIixcbiAgICAgICAgXCJ2aXRlXCI6IFwiXjQuMy45XCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIjogXCJeMC41LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1lc2xpbnRcIjogXCJeMS44LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiXjMuMi4wXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tcHdhXCI6IFwiXjAuMTUuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIl4yLjAuMVwiLFxuICAgICAgICBcInZ1ZS10c2NcIjogXCJeMS42LjVcIlxuICAgIH0sXG4gICAgXCJlbmdpbmVzXCI6IHtcbiAgICAgICAgXCJub2RlXCI6IFwiPj0xNi4wLjBcIlxuICAgIH0sXG4gICAgXCJicm93c2Vyc2xpc3RcIjoge1xuICAgICAgICBcInByb2R1Y3Rpb25cIjogW1xuICAgICAgICAgICAgXCI+IDElXCIsXG4gICAgICAgICAgICBcIm5vdCBkZWFkXCIsXG4gICAgICAgICAgICBcIm5vdCBvcF9taW5pIGFsbFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwiZGV2ZWxvcG1lbnRcIjogW1xuICAgICAgICAgICAgXCJsYXN0IDEgY2hyb21lIHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIGZpcmVmb3ggdmVyc2lvblwiLFxuICAgICAgICAgICAgXCJsYXN0IDEgc2FmYXJpIHZlcnNpb25cIlxuICAgICAgICBdXG4gICAgfSxcbiAgICBcImNvbmZpZ1wiOiB7XG4gICAgICAgIFwiY29tbWl0aXplblwiOiB7XG4gICAgICAgICAgICBcInBhdGhcIjogXCJub2RlX21vZHVsZXMvY3otZ2l0XCJcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBK1EsU0FBUyxjQUFjLGVBQXNDO0FBQzVVLFNBQVMsV0FBQUEsZ0JBQWU7OztBQ3FCakIsU0FBUyxXQUFXLFNBQThCO0FBQ3JELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3hDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBQ3ZFLFFBQUksWUFBWTtBQUFhLGlCQUFXLE9BQU8sUUFBUTtBQUN2RCxRQUFJLFlBQVksY0FBYztBQUMxQixVQUFJO0FBQ0EsbUJBQVcsS0FBSyxNQUFNLFFBQVE7QUFBQSxNQUNsQyxTQUFTLE9BQVA7QUFBQSxNQUFlO0FBQUEsSUFDckI7QUFDQSxRQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ25CO0FBQ0EsU0FBTztBQUNYOzs7QUN6Qk8sU0FBUyxZQUFZLE9BQWtCLENBQUMsR0FBRztBQUM5QyxRQUFNLE1BQXVCLENBQUM7QUFDOUIsYUFBVyxDQUFDLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDakMsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sVUFBVSxRQUFRLEtBQUssTUFBTTtBQUduQyxRQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLElBQUk7QUFB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 diff --git a/vite.config.ts.timestamp-1700550110268-c844d8fd2f10d.mjs b/vite.config.ts.timestamp-1700550110268-c844d8fd2f10d.mjs new file mode 100644 index 0000000..dd43829 --- /dev/null +++ b/vite.config.ts.timestamp-1700550110268-c844d8fd2f10d.mjs @@ -0,0 +1,360 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-wms-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28td21zLXRzLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gXCIuL2J1aWxkL2dldEVudlwiO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tIFwiLi9idWlsZC9wbHVnaW5zXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5cbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcbn07XG5cbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcbiAgICBjb25zdCByb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICAgIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiB2aXRlRW52LlZJVEVfUFVCTElDX1BBVEgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgaG9zdDogXCIwLjAuMC4wXCIsXG4gICAgICAgICAgICBwb3J0OiB2aXRlRW52LlZJVEVfUE9SVCxcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxuICAgICAgICAgICAgY29yczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIExvYWQgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYuZGV2ZWxvcG1lbnRcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYpLFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxuICAgICAgICAgICAgbWluaWZ5OiBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIC8vIGVzYnVpbGQgXHU2MjUzXHU1MzA1XHU2NkY0XHU1RkVCXHVGRjBDXHU0RjQ2XHU2NjJGXHU0RTBEXHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHVGRjBDdGVyc2VyXHU2MjUzXHU1MzA1XHU2MTYyXHVGRjBDXHU0RjQ2XHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXG4gICAgICAgICAgICAvLyB0ZXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBcdGNvbXByZXNzOiB7XG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxuICAgICAgICAgICAgLy8gXHRcdGRyb3BfZGVidWdnZXI6IHRydWVcbiAgICAgICAgICAgIC8vIFx0fVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFx1Nzk4MVx1NzUyOCBnemlwIFx1NTM4Qlx1N0YyOVx1NTkyN1x1NUMwRlx1NjJBNVx1NTQ0QVx1RkYwQ1x1NTNFRlx1NzU2NVx1NUZBRVx1NTFDRlx1NUMxMVx1NjI1M1x1NTMwNVx1NjVGNlx1OTVGNFxuICAgICAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxuICAgICAgICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLFxuICAgICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGF0aWMgcmVzb3VyY2UgY2xhc3NpZmljYXRpb24gYW5kIHBhY2thZ2luZ1xuICAgICAgICAgICAgICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogXCJhc3NldHMvW2V4dF0vW25hbWVdLVtoYXNoXS5bZXh0XVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi9idWlsZC9nZXRFbnYudHNcIjtpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwicHJvZHVjdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwidGVzdFwiO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcG9ydE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZJVEVfUkVQT1JUID09PSBcInRydWVcIjtcbn1cblxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBwZXJFbnYoZW52Q29uZjogUmVjb3JkYWJsZSk6IFZpdGVFbnYge1xuICAgIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcbiAgICAgICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCBcIlxcblwiKTtcbiAgICAgICAgcmVhbE5hbWUgPSByZWFsTmFtZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogcmVhbE5hbWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogcmVhbE5hbWU7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUE9SVFwiKSByZWFsTmFtZSA9IE51bWJlcihyZWFsTmFtZSk7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUFJPWFlcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAuLi5kaXIpO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28td21zLXRzLWFkbWluL2J1aWxkL3Byb3h5LnRzXCI7aW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tIFwidml0ZVwiO1xuXG50eXBlIFByb3h5SXRlbSA9IFtzdHJpbmcsIHN0cmluZ107XG5cbnR5cGUgUHJveHlMaXN0ID0gUHJveHlJdGVtW107XG5cbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPjtcblxuLyoqXG4gKiBcdTUyMUJcdTVFRkFcdTRFRTNcdTc0MDZcdUZGMENcdTc1MjhcdTRFOEVcdTg5RTNcdTY3OTAgLmVudi5kZXZlbG9wbWVudCBcdTRFRTNcdTc0MDZcdTkxNERcdTdGNkVcbiAqIEBwYXJhbSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eShsaXN0OiBQcm94eUxpc3QgPSBbXSkge1xuICAgIGNvbnN0IHJldDogUHJveHlUYXJnZXRMaXN0ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcbiAgICAgICAgY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvLztcbiAgICAgICAgY29uc3QgaXNIdHRwcyA9IGh0dHBzUkUudGVzdCh0YXJnZXQpO1xuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXG4gICAgICAgIHJldFtwcmVmaXhdID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICAgIHJld3JpdGU6IHBhdGggPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3ByZWZpeH1gKSwgXCJcIiksXG4gICAgICAgICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxuICAgICAgICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby13bXMtdHMtYWRtaW4vYnVpbGQvcGx1Z2lucy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcbmltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiO1xuaW1wb3J0IHZ1ZUpzeCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiO1xuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XG5pbXBvcnQgdml0ZUNvbXByZXNzaW9uIGZyb20gXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiO1xuaW1wb3J0IHZ1ZVNldHVwRXh0ZW5kIGZyb20gXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXMvdml0ZVwiO1xuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCI7XG4vLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV1aS1cdTdFQzRcdTRFRjYgXHU2QkQ0XHU1OTgyXHU4QkY0YW50LWRlc2lnbi12dWUgIGVsZW1lbnQtcGx1c1x1N0I0OVxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcbi8vIGVsZW1lbnRcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzXCI7XG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcbmltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiO1xuaW1wb3J0IEljb25zUmVzb2x2ZXIgZnJvbSBcInVucGx1Z2luLWljb25zL3Jlc29sdmVyXCI7XG5cbi8qKlxuICogXHU1MjFCXHU1RUZBIHZpdGUgXHU2M0QyXHU0RUY2XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVml0ZVBsdWdpbnMgPSAodml0ZUVudjogVml0ZUVudik6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9PiB7XG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdnVlKCksXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcbiAgICAgICAgdnVlSnN4KCksXG4gICAgICAgIC8vIGVzTGludCBcdTYyQTVcdTk1MTlcdTRGRTFcdTYwNkZcdTY2M0VcdTc5M0FcdTU3MjhcdTZENEZcdTg5QzhcdTU2NjhcdTc1NENcdTk3NjJcdTRFMEFcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXG4gICAgICAgIC8vIG5hbWUgXHU1M0VGXHU0RUU1XHU1MTk5XHU1NzI4IHNjcmlwdCBcdTY4MDdcdTdCN0VcdTRFMEFcbiAgICAgICAgdnVlU2V0dXBFeHRlbmQoe30pLFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcbiAgICAgICAgY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiksXG4gICAgICAgIC8vIFx1NkNFOFx1NTE2NVx1NTNEOFx1OTFDRlx1NTIzMCBodG1sIFx1NjU4N1x1NEVGNlxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcbiAgICAgICAgICAgIGluamVjdDoge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gXHU0RjdGXHU3NTI4IHN2ZyBcdTU2RkVcdTY4MDdcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xuICAgICAgICAgICAgaWNvbkRpcnM6IFtyZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwic3JjL2Fzc2V0cy9pY29uc1wiKV0sXG4gICAgICAgICAgICBzeW1ib2xJZDogXCJpY29uLVtkaXJdLVtuYW1lXVwiXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBlbGVtZW50XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XG4gICAgICAgIEF1dG9JbXBvcnQoe1xuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcbiAgICAgICAgICAgIGltcG9ydHM6IFtcInZ1ZVwiLCBcInZ1ZS1yb3V0ZXJcIl0sXG4gICAgICAgICAgICBkdHM6IFwic3JjL2F1dG8taW1wb3J0LmQudHNcIixcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xuICAgICAgICAgICAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogXCJzYXNzXCIgfSksXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJJY29uXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgQ29tcG9uZW50cyh7XG4gICAgICAgICAgICAvLyBlbGVtZW50XG4gICAgICAgICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCJdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyBcdTlFRDhcdThCQTRcdTVCNThcdTY1M0VcdTRGNERcdTdGNkVcbiAgICAgICAgICAgIGR0czogXCJzcmMvY29tcG9uZW50cy5kLnRzXCJcbiAgICAgICAgfSksXG4gICAgICAgIEljb25zKHtcbiAgICAgICAgICAgIGF1dG9JbnN0YWxsOiB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICAvLyB2aXRlUFdBXG4gICAgICAgIFZJVEVfUFdBICYmIGNyZWF0ZVZpdGVQd2Eodml0ZUVudiksXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxuICAgICAgICBWSVRFX1JFUE9SVCAmJiAodmlzdWFsaXplcih7IGZpbGVuYW1lOiBcInN0YXRzLmh0bWxcIiwgZ3ppcFNpemU6IHRydWUsIGJyb3RsaVNpemU6IHRydWUgfSkgYXMgUGx1Z2luT3B0aW9uKVxuICAgIF07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyA9IFwibm9uZVwiLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudjtcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KFwiLFwiKTtcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJnemlwXCIpKSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgZXh0OiBcIi5nelwiLFxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJnemlwXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmJyXCIsXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBcImJyb3RsaUNvbXByZXNzXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVml0ZVB3YVxuICogQHBhcmFtIHZpdGVFbnZcbiAqL1xuY29uc3QgY3JlYXRlVml0ZVB3YSA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcbiAgICByZXR1cm4gVml0ZVBXQSh7XG4gICAgICAgIHJlZ2lzdGVyVHlwZTogXCJhdXRvVXBkYXRlXCIsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICBuYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxuICAgICAgICAgICAgc2hvcnRfbmFtZTogVklURV9HTE9CX0FQUF9USVRMRSxcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcbiAgICAgICAgICAgIGljb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjE5MngxOTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHVycG9zZTogXCJhbnkgbWFza2FibGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsICJ7XG4gICAgXCJuYW1lXCI6IFwib3BzX2FkbWluX3RzXCIsXG4gICAgXCJwcml2YXRlXCI6IHRydWUsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAgICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgICBcInNjcmlwdHNcIjoge1xuICAgICAgICBcImRldlwiOiBcInZpdGVcIixcbiAgICAgICAgXCJzZXJ2ZVwiOiBcInZpdGVcIixcbiAgICAgICAgXCJidWlsZDpkZXZcIjogXCJ2dWUtdHNjICYmIHZpdGUgYnVpbGQgLS1tb2RlIGRldmVsb3BtZW50XCIsXG4gICAgICAgIFwiYnVpbGQ6dGVzdFwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxuICAgICAgICBcImJ1aWxkOnByb1wiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgcHJvZHVjdGlvblwiLFxuICAgICAgICBcInR5cGU6Y2hlY2tcIjogXCJ2dWUtdHNjIC0tbm9FbWl0IC0tc2tpcExpYkNoZWNrXCIsXG4gICAgICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQ6ZGV2ICYmIHZpdGUgcHJldmlld1wiLFxuICAgICAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IC0tZml4IC0tZXh0IC5qcywudHMsLnZ1ZSAuL3NyY1wiLFxuICAgICAgICBcImxpbnQ6cHJldHRpZXJcIjogXCJwcmV0dGllciAtLXdyaXRlIFxcXCJzcmMvKiovKi57anMsdHMsanNvbix0c3gsY3NzLGxlc3Msc2Nzcyx2dWUsaHRtbCxtZH1cXFwiXCIsXG4gICAgICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1jYWNoZSAtLWZpeCBcXFwiKiovKi57dnVlLGxlc3MscG9zdGNzcyxjc3Msc2Nzc31cXFwiIC0tY2FjaGUgLS1jYWNoZS1sb2NhdGlvbiBub2RlX21vZHVsZXMvLmNhY2hlL3N0eWxlbGludC9cIixcbiAgICAgICAgXCJsaW50OmxpbnQtc3RhZ2VkXCI6IFwibGludC1zdGFnZWRcIixcbiAgICAgICAgXCJwcmVwYXJlXCI6IFwiaHVza3kgaW5zdGFsbFwiLFxuICAgICAgICBcInJlbGVhc2VcIjogXCJzdGFuZGFyZC12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29tbWl0XCI6IFwiZ2l0IGFkZCAtQSAmJiBjemcgJiYgZ2l0IHB1c2hcIlxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiXjIuMS4wXCIsXG4gICAgICAgIFwiQHR5cGVzL2RlY2ltYWwuanNcIjogXCJeNy40LjBcIixcbiAgICAgICAgXCJAdnVldXNlL2NvcmVcIjogXCJeMTAuMS4yXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yXCI6IFwiXjUuMS4yM1wiLFxuICAgICAgICBcIkB3YW5nZWRpdG9yL2VkaXRvci1mb3ItdnVlXCI6IFwiXjUuMS4xMlwiLFxuICAgICAgICBcImFzeW5jLXZhbGlkYXRvclwiOiBcIl40LjIuNVwiLFxuICAgICAgICBcImF4aW9zXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRyaXZlci5qc1wiOiBcIl4wLjkuOFwiLFxuICAgICAgICBcImVsZW1lbnQtcGx1c1wiOiBcIl4yLjMuNFwiLFxuICAgICAgICBcImZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJqcy1tZDVcIjogXCJeMC43LjNcIixcbiAgICAgICAgXCJsb2Rhc2gtZXNcIjogXCJeNC4xNy4yMVwiLFxuICAgICAgICBcIm1pdHRcIjogXCJeMy4wLjBcIixcbiAgICAgICAgXCJucHJvZ3Jlc3NcIjogXCJeMC4yLjBcIixcbiAgICAgICAgXCJwaW5pYVwiOiBcIl4yLjEuM1wiLFxuICAgICAgICBcInBpbmlhLXBsdWdpbi1wZXJzaXN0ZWRzdGF0ZVwiOiBcIl4zLjEuMFwiLFxuICAgICAgICBcInByaW50LWpzXCI6IFwiXjEuNi4wXCIsXG4gICAgICAgIFwicXNcIjogXCJeNi4xMS4yXCIsXG4gICAgICAgIFwic29ydGFibGVqc1wiOiBcIl4xLjE1LjBcIixcbiAgICAgICAgXCJ2dWVcIjogXCJeMy4zLjRcIixcbiAgICAgICAgXCJ2dWUtcm91dGVyXCI6IFwiXjQuMi4yXCIsXG4gICAgICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiXjQuMS4wXCIsXG4gICAgICAgIFwidnhlLXRhYmxlXCI6IFwiXjQuNS4wLWJldGEuMTBcIixcbiAgICAgICAgXCJ4ZS11dGlsc1wiOiBcIl4zLjUuMTFcIixcbiAgICAgICAgXCJ4bHN4XCI6IFwiXjAuMTguNVwiXG4gICAgfSxcbiAgICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcIjogXCJeMTcuNi4zXCIsXG4gICAgICAgIFwiQGljb25pZnktanNvbi9lcFwiOiBcIl4xLjEuMTBcIixcbiAgICAgICAgXCJAdHlwZXMvZmlsZS1zYXZlclwiOiBcIl4yLjAuNVwiLFxuICAgICAgICBcIkB0eXBlcy9qcy1tZDVcIjogXCJeMC43LjBcIixcbiAgICAgICAgXCJAdHlwZXMvbnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS43XCIsXG4gICAgICAgIFwiQHR5cGVzL3NvcnRhYmxlanNcIjogXCJeMS4xNS4xXCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW5cIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiOiBcIl41LjU5LjdcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCJeNC4yLjNcIixcbiAgICAgICAgXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI6IFwiXjMuMC4xXCIsXG4gICAgICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMTRcIixcbiAgICAgICAgXCJjei1naXRcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJjemdcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJlc2xpbnRcIjogXCJeOC40MS4wXCIsXG4gICAgICAgIFwiZXNsaW50LWNvbmZpZy1wcmV0dGllclwiOiBcIl44LjguMFwiLFxuICAgICAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCJeNC4yLjFcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIl45LjE0LjBcIixcbiAgICAgICAgXCJodXNreVwiOiBcIl44LjAuM1wiLFxuICAgICAgICBcImxpbnQtc3RhZ2VkXCI6IFwiXjEzLjIuMlwiLFxuICAgICAgICBcInBvc3Rjc3NcIjogXCJeOC40LjIzXCIsXG4gICAgICAgIFwicG9zdGNzcy1odG1sXCI6IFwiXjEuNS4wXCIsXG4gICAgICAgIFwicHJldHRpZXJcIjogXCJeMi44LjhcIixcbiAgICAgICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCJeNS45LjBcIixcbiAgICAgICAgXCJzYXNzXCI6IFwiXjEuNjIuMVwiLFxuICAgICAgICBcInN0YW5kYXJkLXZlcnNpb25cIjogXCJeOS41LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnRcIjogXCJeMTUuNi4yXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1odG1sXCI6IFwiXjEuMS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNlc3Mtb3JkZXJcIjogXCJeNC4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXJlY29tbWVuZGVkLXNjc3NcIjogXCJeMTIuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC12dWVcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiXjMzLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctc3RhbmRhcmQtc2Nzc1wiOiBcIl45LjAuMFwiLFxuICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4wLjJcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1hdXRvLWltcG9ydFwiOiBcIl4wLjE2LjRcIixcbiAgICAgICAgXCJ1bnBsdWdpbi1pY29uc1wiOiBcIl4wLjE2LjNcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50c1wiOiBcIl4wLjI1LjFcIixcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXNcIjogXCJeMS4wLjBcIixcbiAgICAgICAgXCJ2aXRlXCI6IFwiXjQuMy45XCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIjogXCJeMC41LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1lc2xpbnRcIjogXCJeMS44LjFcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiXjMuMi4wXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tcHdhXCI6IFwiXjAuMTUuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIl4yLjAuMVwiLFxuICAgICAgICBcInZ1ZS10c2NcIjogXCJeMS42LjVcIlxuICAgIH0sXG4gICAgXCJlbmdpbmVzXCI6IHtcbiAgICAgICAgXCJub2RlXCI6IFwiPj0xNi4wLjBcIlxuICAgIH0sXG4gICAgXCJicm93c2Vyc2xpc3RcIjoge1xuICAgICAgICBcInByb2R1Y3Rpb25cIjogW1xuICAgICAgICAgICAgXCI+IDElXCIsXG4gICAgICAgICAgICBcIm5vdCBkZWFkXCIsXG4gICAgICAgICAgICBcIm5vdCBvcF9taW5pIGFsbFwiXG4gICAgICAgIF0sXG4gICAgICAgIFwiZGV2ZWxvcG1lbnRcIjogW1xuICAgICAgICAgICAgXCJsYXN0IDEgY2hyb21lIHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIGZpcmVmb3ggdmVyc2lvblwiLFxuICAgICAgICAgICAgXCJsYXN0IDEgc2FmYXJpIHZlcnNpb25cIlxuICAgICAgICBdXG4gICAgfSxcbiAgICBcImNvbmZpZ1wiOiB7XG4gICAgICAgIFwiY29tbWl0aXplblwiOiB7XG4gICAgICAgICAgICBcInBhdGhcIjogXCJub2RlX21vZHVsZXMvY3otZ2l0XCJcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBK1EsU0FBUyxjQUFjLGVBQXNDO0FBQzVVLFNBQVMsV0FBQUEsZ0JBQWU7OztBQ3FCakIsU0FBUyxXQUFXLFNBQThCO0FBQ3JELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3hDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBQ3ZFLFFBQUksWUFBWTtBQUFhLGlCQUFXLE9BQU8sUUFBUTtBQUN2RCxRQUFJLFlBQVksY0FBYztBQUMxQixVQUFJO0FBQ0EsbUJBQVcsS0FBSyxNQUFNLFFBQVE7QUFBQSxNQUNsQyxTQUFTLE9BQVA7QUFBQSxNQUFlO0FBQUEsSUFDckI7QUFDQSxRQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ25CO0FBQ0EsU0FBTztBQUNYOzs7QUN6Qk8sU0FBUyxZQUFZLE9BQWtCLENBQUMsR0FBRztBQUM5QyxRQUFNLE1BQXVCLENBQUM7QUFDOUIsYUFBVyxDQUFDLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDakMsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sVUFBVSxRQUFRLEtBQUssTUFBTTtBQUduQyxRQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLElBQUk7QUFB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 diff --git a/vite.config.ts.timestamp-1708479039986-0af3ae20d1c99.mjs b/vite.config.ts.timestamp-1708479039986-0af3ae20d1c99.mjs new file mode 100644 index 0000000..696aef2 --- /dev/null +++ b/vite.config.ts.timestamp-1708479039986-0af3ae20d1c99.mjs @@ -0,0 +1,363 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-wms-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-wms-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28td21zLXRzLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgd3JhcHBlckVudiB9IGZyb20gXCIuL2J1aWxkL2dldEVudlwiO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xuaW1wb3J0IHsgY3JlYXRlVml0ZVBsdWdpbnMgfSBmcm9tIFwiLi9idWlsZC9wbHVnaW5zXCI7XG5cbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5cbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgICBwa2c6IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSxcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcbn07XG5cbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoKHsgbW9kZSB9OiBDb25maWdFbnYpOiBVc2VyQ29uZmlnID0+IHtcbiAgICBjb25zdCByb290ID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICAgIGNvbnN0IHZpdGVFbnYgPSB3cmFwcGVyRW52KGVudik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiB2aXRlRW52LlZJVEVfUFVCTElDX1BBVEgsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgICAgXCJAXCI6IHJlc29sdmUoX19kaXJuYW1lLCBcIi4vc3JjXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXG4gICAgICAgIH0sXG4gICAgICAgIGNzczoge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHNjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgaG9zdDogXCIwLjAuMC4wXCIsXG4gICAgICAgICAgICBwb3J0OiB2aXRlRW52LlZJVEVfUE9SVCxcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxuICAgICAgICAgICAgY29yczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIExvYWQgcHJveHkgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYuZGV2ZWxvcG1lbnRcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYpLFxuICAgICAgICBlc2J1aWxkOiB7XG4gICAgICAgICAgICAvL1wiY29uc29sZS5sb2dcIixcbiAgICAgICAgICAgIHB1cmU6IHZpdGVFbnYuVklURV9EUk9QX0NPTlNPTEUgPyBbXCJkZWJ1Z2dlclwiXSA6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxuICAgICAgICAgICAgbWluaWZ5OiBcImVzYnVpbGRcIixcbiAgICAgICAgICAgIC8vIGVzYnVpbGQgXHU2MjUzXHU1MzA1XHU2NkY0XHU1RkVCXHVGRjBDXHU0RjQ2XHU2NjJGXHU0RTBEXHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHVGRjBDdGVyc2VyXHU2MjUzXHU1MzA1XHU2MTYyXHVGRjBDXHU0RjQ2XHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXG4gICAgICAgICAgICAvLyB0ZXJzZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBcdGNvbXByZXNzOiB7XG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxuICAgICAgICAgICAgLy8gXHRcdGRyb3BfZGVidWdnZXI6IHRydWVcbiAgICAgICAgICAgIC8vIFx0fVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFx1Nzk4MVx1NzUyOCBnemlwIFx1NTM4Qlx1N0YyOVx1NTkyN1x1NUMwRlx1NjJBNVx1NTQ0QVx1RkYwQ1x1NTNFRlx1NzU2NVx1NUZBRVx1NTFDRlx1NUMxMVx1NjI1M1x1NTMwNVx1NjVGNlx1OTVGNFxuICAgICAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxuICAgICAgICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLFxuICAgICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGF0aWMgcmVzb3VyY2UgY2xhc3NpZmljYXRpb24gYW5kIHBhY2thZ2luZ1xuICAgICAgICAgICAgICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxuICAgICAgICAgICAgICAgICAgICBhc3NldEZpbGVOYW1lczogXCJhc3NldHMvW2V4dF0vW25hbWVdLVtoYXNoXS5bZXh0XVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXdtcy10cy1hZG1pbi9idWlsZC9nZXRFbnYudHNcIjtpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwicHJvZHVjdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vZGUgPT09IFwidGVzdFwiO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcG9ydE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlZJVEVfUkVQT1JUID09PSBcInRydWVcIjtcbn1cblxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBwZXJFbnYoZW52Q29uZjogUmVjb3JkYWJsZSk6IFZpdGVFbnYge1xuICAgIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcbiAgICAgICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCBcIlxcblwiKTtcbiAgICAgICAgcmVhbE5hbWUgPSByZWFsTmFtZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogcmVhbE5hbWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogcmVhbE5hbWU7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUE9SVFwiKSByZWFsTmFtZSA9IE51bWJlcihyZWFsTmFtZSk7XG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUFJPWFlcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAuLi5kaXIpO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28td21zLXRzLWFkbWluL2J1aWxkL3Byb3h5LnRzXCI7aW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tIFwidml0ZVwiO1xuXG50eXBlIFByb3h5SXRlbSA9IFtzdHJpbmcsIHN0cmluZ107XG5cbnR5cGUgUHJveHlMaXN0ID0gUHJveHlJdGVtW107XG5cbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPjtcblxuLyoqXG4gKiBcdTUyMUJcdTVFRkFcdTRFRTNcdTc0MDZcdUZGMENcdTc1MjhcdTRFOEVcdTg5RTNcdTY3OTAgLmVudi5kZXZlbG9wbWVudCBcdTRFRTNcdTc0MDZcdTkxNERcdTdGNkVcbiAqIEBwYXJhbSBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eShsaXN0OiBQcm94eUxpc3QgPSBbXSkge1xuICAgIGNvbnN0IHJldDogUHJveHlUYXJnZXRMaXN0ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcbiAgICAgICAgY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvLztcbiAgICAgICAgY29uc3QgaXNIdHRwcyA9IGh0dHBzUkUudGVzdCh0YXJnZXQpO1xuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXG4gICAgICAgIHJldFtwcmVmaXhdID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICAgIHJld3JpdGU6IHBhdGggPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3ByZWZpeH1gKSwgXCJcIiksXG4gICAgICAgICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxuICAgICAgICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXdtcy10cy1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby13bXMtdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby13bXMtdHMtYWRtaW4vYnVpbGQvcGx1Z2lucy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcbmltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiO1xuaW1wb3J0IHZ1ZUpzeCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiO1xuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XG5pbXBvcnQgdml0ZUNvbXByZXNzaW9uIGZyb20gXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiO1xuaW1wb3J0IHZ1ZVNldHVwRXh0ZW5kIGZyb20gXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXMvdml0ZVwiO1xuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCI7XG4vLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV1aS1cdTdFQzRcdTRFRjYgXHU2QkQ0XHU1OTgyXHU4QkY0YW50LWRlc2lnbi12dWUgIGVsZW1lbnQtcGx1c1x1N0I0OVxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcbi8vIGVsZW1lbnRcbmltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzXCI7XG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcbmltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiO1xuaW1wb3J0IEljb25zUmVzb2x2ZXIgZnJvbSBcInVucGx1Z2luLWljb25zL3Jlc29sdmVyXCI7XG5cbi8qKlxuICogXHU1MjFCXHU1RUZBIHZpdGUgXHU2M0QyXHU0RUY2XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVml0ZVBsdWdpbnMgPSAodml0ZUVudjogVml0ZUVudik6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9PiB7XG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdnVlKCksXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcbiAgICAgICAgdnVlSnN4KCksXG4gICAgICAgIC8vIGVzTGludCBcdTYyQTVcdTk1MTlcdTRGRTFcdTYwNkZcdTY2M0VcdTc5M0FcdTU3MjhcdTZENEZcdTg5QzhcdTU2NjhcdTc1NENcdTk3NjJcdTRFMEFcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXG4gICAgICAgIC8vIG5hbWUgXHU1M0VGXHU0RUU1XHU1MTk5XHU1NzI4IHNjcmlwdCBcdTY4MDdcdTdCN0VcdTRFMEFcbiAgICAgICAgdnVlU2V0dXBFeHRlbmQoe30pLFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcbiAgICAgICAgY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiksXG4gICAgICAgIC8vIFx1NkNFOFx1NTE2NVx1NTNEOFx1OTFDRlx1NTIzMCBodG1sIFx1NjU4N1x1NEVGNlxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcbiAgICAgICAgICAgIGluamVjdDoge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gXHU0RjdGXHU3NTI4IHN2ZyBcdTU2RkVcdTY4MDdcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xuICAgICAgICAgICAgaWNvbkRpcnM6IFtyZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwic3JjL2Fzc2V0cy9pY29uc1wiKV0sXG4gICAgICAgICAgICBzeW1ib2xJZDogXCJpY29uLVtkaXJdLVtuYW1lXVwiXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBlbGVtZW50XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XG4gICAgICAgIEF1dG9JbXBvcnQoe1xuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcbiAgICAgICAgICAgIGltcG9ydHM6IFtcInZ1ZVwiLCBcInZ1ZS1yb3V0ZXJcIl0sXG4gICAgICAgICAgICBkdHM6IFwic3JjL2F1dG8taW1wb3J0LmQudHNcIixcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xuICAgICAgICAgICAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogXCJzYXNzXCIgfSksXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJJY29uXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgQ29tcG9uZW50cyh7XG4gICAgICAgICAgICAvLyBlbGVtZW50XG4gICAgICAgICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCJdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyBcdTlFRDhcdThCQTRcdTVCNThcdTY1M0VcdTRGNERcdTdGNkVcbiAgICAgICAgICAgIGR0czogXCJzcmMvY29tcG9uZW50cy5kLnRzXCJcbiAgICAgICAgfSksXG4gICAgICAgIEljb25zKHtcbiAgICAgICAgICAgIGF1dG9JbnN0YWxsOiB0cnVlXG4gICAgICAgIH0pLFxuICAgICAgICAvLyB2aXRlUFdBXG4gICAgICAgIFZJVEVfUFdBICYmIGNyZWF0ZVZpdGVQd2Eodml0ZUVudiksXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxuICAgICAgICBWSVRFX1JFUE9SVCAmJiAodmlzdWFsaXplcih7IGZpbGVuYW1lOiBcInN0YXRzLmh0bWxcIiwgZ3ppcFNpemU6IHRydWUsIGJyb3RsaVNpemU6IHRydWUgfSkgYXMgUGx1Z2luT3B0aW9uKVxuICAgIF07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XG4gKiBAcGFyYW0gdml0ZUVudlxuICovXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyA9IFwibm9uZVwiLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudjtcbiAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KFwiLFwiKTtcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJnemlwXCIpKSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgZXh0OiBcIi5nelwiLFxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJnemlwXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmJyXCIsXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBcImJyb3RsaUNvbXByZXNzXCIsXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVml0ZVB3YVxuICogQHBhcmFtIHZpdGVFbnZcbiAqL1xuY29uc3QgY3JlYXRlVml0ZVB3YSA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcbiAgICByZXR1cm4gVml0ZVBXQSh7XG4gICAgICAgIHJlZ2lzdGVyVHlwZTogXCJhdXRvVXBkYXRlXCIsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICBuYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxuICAgICAgICAgICAgc2hvcnRfbmFtZTogVklURV9HTE9CX0FQUF9USVRMRSxcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcbiAgICAgICAgICAgIGljb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjE5MngxOTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHVycG9zZTogXCJhbnkgbWFza2FibGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsICJ7XG4gICAgXCJuYW1lXCI6IFwib3BzX2FkbWluX3RzXCIsXG4gICAgXCJwcml2YXRlXCI6IHRydWUsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAgICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgICBcInNjcmlwdHNcIjoge1xuICAgICAgICBcImRldlwiOiBcInZpdGVcIixcbiAgICAgICAgXCJzZXJ2ZVwiOiBcInZpdGVcIixcbiAgICAgICAgXCJidWlsZDpkZXZcIjogXCJ2dWUtdHNjICYmIHZpdGUgYnVpbGQgLS1tb2RlIGRldmVsb3BtZW50XCIsXG4gICAgICAgIFwiYnVpbGQ6dGVzdFwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxuICAgICAgICBcImJ1aWxkOnByb1wiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgcHJvZHVjdGlvblwiLFxuICAgICAgICBcInR5cGU6Y2hlY2tcIjogXCJ2dWUtdHNjIC0tbm9FbWl0IC0tc2tpcExpYkNoZWNrXCIsXG4gICAgICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQ6ZGV2ICYmIHZpdGUgcHJldmlld1wiLFxuICAgICAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IC0tZml4IC0tZXh0IC5qcywudHMsLnZ1ZSAuL3NyY1wiLFxuICAgICAgICBcImxpbnQ6cHJldHRpZXJcIjogXCJwcmV0dGllciAtLXdyaXRlIFxcXCJzcmMvKiovKi57anMsdHMsanNvbix0c3gsY3NzLGxlc3Msc2Nzcyx2dWUsaHRtbCxtZH1cXFwiXCIsXG4gICAgICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1jYWNoZSAtLWZpeCBcXFwiKiovKi57dnVlLGxlc3MscG9zdGNzcyxjc3Msc2Nzc31cXFwiIC0tY2FjaGUgLS1jYWNoZS1sb2NhdGlvbiBub2RlX21vZHVsZXMvLmNhY2hlL3N0eWxlbGludC9cIixcbiAgICAgICAgXCJsaW50OmxpbnQtc3RhZ2VkXCI6IFwibGludC1zdGFnZWRcIixcbiAgICAgICAgXCJwcmVwYXJlXCI6IFwiaHVza3kgaW5zdGFsbFwiLFxuICAgICAgICBcInJlbGVhc2VcIjogXCJzdGFuZGFyZC12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29tbWl0XCI6IFwiZ2l0IGFkZCAtQSAmJiBjemcgJiYgZ2l0IHB1c2hcIlxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiXjIuMS4wXCIsXG4gICAgICAgIFwiQHR5cGVzL2RlY2ltYWwuanNcIjogXCJeNy40LjBcIixcbiAgICAgICAgXCJAdnVldXNlL2NvcmVcIjogXCJeMTAuMS4yXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yXCI6IFwiXjUuMS4yM1wiLFxuICAgICAgICBcIkB3YW5nZWRpdG9yL2VkaXRvci1mb3ItdnVlXCI6IFwiXjUuMS4xMlwiLFxuICAgICAgICBcImFzeW5jLXZhbGlkYXRvclwiOiBcIl40LjIuNVwiLFxuICAgICAgICBcImF4aW9zXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImxvZGFzaC1lc1wiOiBcIl40LjE3LjIxXCIsXG4gICAgICAgIFwibWl0dFwiOiBcIl4zLjAuMFwiLFxuICAgICAgICBcIm5wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcInBpbmlhXCI6IFwiXjIuMS4zXCIsXG4gICAgICAgIFwicGluaWEtcGx1Z2luLXBlcnNpc3RlZHN0YXRlXCI6IFwiXjMuMS4wXCIsXG4gICAgICAgIFwicHJpbnQtanNcIjogXCJeMS42LjBcIixcbiAgICAgICAgXCJxc1wiOiBcIl42LjExLjJcIixcbiAgICAgICAgXCJzb3J0YWJsZWpzXCI6IFwiXjEuMTUuMFwiLFxuICAgICAgICBcInZ1ZVwiOiBcIl4zLjMuNFwiLFxuICAgICAgICBcInZ1ZS1yb3V0ZXJcIjogXCJeNC4yLjJcIixcbiAgICAgICAgXCJ2dWVkcmFnZ2FibGVcIjogXCJeNC4xLjBcIixcbiAgICAgICAgXCJ2eGUtdGFibGVcIjogXCJeNC41LjAtYmV0YS4xMFwiLFxuICAgICAgICBcInhlLXV0aWxzXCI6IFwiXjMuNS4xMVwiLFxuICAgICAgICBcInhsc3hcIjogXCJeMC4xOC41XCJcbiAgICB9LFxuICAgIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJAY29tbWl0bGludC9jbGlcIjogXCJeMTcuNi4zXCIsXG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbFwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAaWNvbmlmeS1qc29uL2VwXCI6IFwiXjEuMS4xMFwiLFxuICAgICAgICBcIkB0eXBlcy9maWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwiQHR5cGVzL2pzLW1kNVwiOiBcIl4wLjcuMFwiLFxuICAgICAgICBcIkB0eXBlcy9ucHJvZ3Jlc3NcIjogXCJeMC4yLjBcIixcbiAgICAgICAgXCJAdHlwZXMvcXNcIjogXCJeNi45LjdcIixcbiAgICAgICAgXCJAdHlwZXMvc29ydGFibGVqc1wiOiBcIl4xLjE1LjFcIixcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiOiBcIl41LjU5LjdcIixcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiOiBcIl40LjIuM1wiLFxuICAgICAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjogXCJeMy4wLjFcIixcbiAgICAgICAgXCJhdXRvcHJlZml4ZXJcIjogXCJeMTAuNC4xNFwiLFxuICAgICAgICBcImN6LWdpdFwiOiBcIl4xLjYuMVwiLFxuICAgICAgICBcImN6Z1wiOiBcIl4xLjYuMVwiLFxuICAgICAgICBcImVzbGludFwiOiBcIl44LjQxLjBcIixcbiAgICAgICAgXCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCI6IFwiXjguOC4wXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi1wcmV0dGllclwiOiBcIl40LjIuMVwiLFxuICAgICAgICBcImVzbGludC1wbHVnaW4tdnVlXCI6IFwiXjkuMTQuMFwiLFxuICAgICAgICBcImh1c2t5XCI6IFwiXjguMC4zXCIsXG4gICAgICAgIFwibGludC1zdGFnZWRcIjogXCJeMTMuMi4yXCIsXG4gICAgICAgIFwicG9zdGNzc1wiOiBcIl44LjQuMjNcIixcbiAgICAgICAgXCJwb3N0Y3NzLWh0bWxcIjogXCJeMS41LjBcIixcbiAgICAgICAgXCJwcmV0dGllclwiOiBcIl4yLjguOFwiLFxuICAgICAgICBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiOiBcIl41LjkuMFwiLFxuICAgICAgICBcInNhc3NcIjogXCJeMS42Mi4xXCIsXG4gICAgICAgIFwic3RhbmRhcmQtdmVyc2lvblwiOiBcIl45LjUuMFwiLFxuICAgICAgICBcInN0eWxlbGludFwiOiBcIl4xNS42LjJcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLWh0bWxcIjogXCJeMS4xLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXJlY2Vzcy1vcmRlclwiOiBcIl40LjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtc2Nzc1wiOiBcIl4xMi4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXJlY29tbWVuZGVkLXZ1ZVwiOiBcIl4xLjQuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctc3RhbmRhcmRcIjogXCJeMzMuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZC1zY3NzXCI6IFwiXjkuMC4wXCIsXG4gICAgICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjAuMlwiLFxuICAgICAgICBcInVucGx1Z2luLWF1dG8taW1wb3J0XCI6IFwiXjAuMTYuNFwiLFxuICAgICAgICBcInVucGx1Z2luLWljb25zXCI6IFwiXjAuMTYuM1wiLFxuICAgICAgICBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzXCI6IFwiXjAuMjUuMVwiLFxuICAgICAgICBcInVucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1c1wiOiBcIl4xLjAuMFwiLFxuICAgICAgICBcInZpdGVcIjogXCJeNC4zLjlcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiOiBcIl4wLjUuMVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWVzbGludFwiOiBcIl4xLjguMVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWh0bWxcIjogXCJeMy4yLjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1wd2FcIjogXCJeMC4xNS4wXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tc3ZnLWljb25zXCI6IFwiXjIuMC4xXCIsXG4gICAgICAgIFwidnVlLXRzY1wiOiBcIl4xLjYuNVwiXG4gICAgfSxcbiAgICBcImVuZ2luZXNcIjoge1xuICAgICAgICBcIm5vZGVcIjogXCI+PTE2LjAuMFwiXG4gICAgfSxcbiAgICBcImJyb3dzZXJzbGlzdFwiOiB7XG4gICAgICAgIFwicHJvZHVjdGlvblwiOiBbXG4gICAgICAgICAgICBcIj4gMSVcIixcbiAgICAgICAgICAgIFwibm90IGRlYWRcIixcbiAgICAgICAgICAgIFwibm90IG9wX21pbmkgYWxsXCJcbiAgICAgICAgXSxcbiAgICAgICAgXCJkZXZlbG9wbWVudFwiOiBbXG4gICAgICAgICAgICBcImxhc3QgMSBjaHJvbWUgdmVyc2lvblwiLFxuICAgICAgICAgICAgXCJsYXN0IDEgZmlyZWZveCB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBzYWZhcmkgdmVyc2lvblwiXG4gICAgICAgIF1cbiAgICB9LFxuICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgXCJjb21taXRpemVuXCI6IHtcbiAgICAgICAgICAgIFwicGF0aFwiOiBcIm5vZGVfbW9kdWxlcy9jei1naXRcIlxuICAgICAgICB9XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUErUSxTQUFTLGNBQWMsZUFBc0M7QUFDNVUsU0FBUyxXQUFBQSxnQkFBZTs7O0FDcUJqQixTQUFTLFdBQVcsU0FBOEI7QUFDckQsUUFBTSxNQUFXLENBQUM7QUFFbEIsYUFBVyxXQUFXLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFDeEMsUUFBSSxXQUFXLFFBQVEsT0FBTyxFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQ3BELGVBQVcsYUFBYSxTQUFTLE9BQU8sYUFBYSxVQUFVLFFBQVE7QUFDdkUsUUFBSSxZQUFZO0FBQWEsaUJBQVcsT0FBTyxRQUFRO0FBQ3ZELFFBQUksWUFBWSxjQUFjO0FBQzFCLFVBQUk7QUFDQSxtQkFBVyxLQUFLLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLFNBQVMsT0FBUDtBQUFBLE1BQWU7QUFBQSxJQUNyQjtBQUNBLFFBQUksT0FBTyxJQUFJO0FBQUEsRUFDbkI7QUFDQSxTQUFPO0FBQ1g7OztBQ3pCTyxTQUFTLFlBQVksT0FBa0IsQ0FBQyxHQUFHO0FBQzlDLFFBQU0sTUFBdUIsQ0FBQztBQUM5QixhQUFXLENBQUMsUUFBUSxNQUFNLEtBQUssTUFBTTtBQUNqQyxVQUFN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 diff --git a/vite.config.ts.timestamp-1717641505276-015d0159ed99f.mjs b/vite.config.ts.timestamp-1717641505276-015d0159ed99f.mjs new file mode 100644 index 0000000..5a8ec11 --- /dev/null +++ b/vite.config.ts.timestamp-1717641505276-015d0159ed99f.mjs @@ -0,0 +1,366 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "yc_ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + "bwip-js": "^4.3.2", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + jsonpack: "^1.1.5", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + qrcode: "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-supplier-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFxyXG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZDoge1xyXG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxyXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxyXG4gICAgICAgICAgICAvLyBlc2J1aWxkIFx1NjI1M1x1NTMwNVx1NjZGNFx1NUZFQlx1RkYwQ1x1NEY0Nlx1NjYyRlx1NEUwRFx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1x1RkYwQ3RlcnNlclx1NjI1M1x1NTMwNVx1NjE2Mlx1RkYwQ1x1NEY0Nlx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1xyXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXHJcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gXHRjb21wcmVzczoge1xyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG4gICAgICAgICAgICAvLyBcdH1cclxuICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XHJcbiAgICAgICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxyXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXHJcbiAgICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwiYXNzZXRzL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluL2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tc3VwcGxpZXItdHMtYWRtaW4vYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcbiAgICAgICAgXCJtaXR0XCI6IFwiXjMuMC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5wbHVnaW4tYXV0by1pbXBvcnRcIjogXCJeMC4xNi40XCIsXG4gICAgICAgIFwidW5wbHVnaW4taWNvbnNcIjogXCJeMC4xNi4zXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzXCI6IFwiXjEuMC4wXCIsXG4gICAgICAgIFwidml0ZVwiOiBcIl40LjMuOVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tZXNsaW50XCI6IFwiXjEuOC4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4taHRtbFwiOiBcIl4zLjIuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuNi41XCJcbiAgICB9LFxuICAgIFwiZW5naW5lc1wiOiB7XG4gICAgICAgIFwibm9kZVwiOiBcIj49MTYuMC4wXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlcnNsaXN0XCI6IHtcbiAgICAgICAgXCJwcm9kdWN0aW9uXCI6IFtcbiAgICAgICAgICAgIFwiPiAxJVwiLFxuICAgICAgICAgICAgXCJub3QgZGVhZFwiLFxuICAgICAgICAgICAgXCJub3Qgb3BfbWluaSBhbGxcIlxuICAgICAgICBdLFxuICAgICAgICBcImRldmVsb3BtZW50XCI6IFtcbiAgICAgICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIHNhZmFyaSB2ZXJzaW9uXCJcbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJjb25maWdcIjoge1xuICAgICAgICBcImNvbW1pdGl6ZW5cIjoge1xuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQThSLFNBQVMsY0FBYyxlQUFzQztBQUMzVixTQUFTLFdBQUFBLGdCQUFlOzs7QUNxQmpCLFNBQVMsV0FBVyxTQUE4QjtBQUNyRCxRQUFNLE1BQVcsQ0FBQztBQUVsQixhQUFXLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN4QyxRQUFJLFdBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLElBQUk7QUFDcEQsZUFBVyxhQUFhLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUTtBQUN2RSxRQUFJLFlBQVk7QUFBYSxpQkFBVyxPQUFPLFFBQVE7QUFDdkQsUUFBSSxZQUFZLGNBQWM7QUFDMUIsVUFBSTtBQUNBLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDbEMsU0FBUyxPQUFQO0FBQUEsTUFBZTtBQUFBLElBQ3JCO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFBQSxFQUNuQjtBQUNBLFNBQU87QUFDWDs7O0FDekJPLFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDOUMsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLFVBQU0sVUFBVTtBQUNoQixVQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFHbkMsUUFBSSxNQUFNLElBQUk7QUFBQSxNQUNWO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxJQUFJO0FBQUEsTUFDSixTQUFTLFVBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLFFBQVEsR0FBRyxFQUFFO0FBQUE7QUFBQSxNQUUxRCxHQUFJLFVBQVUsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNKO0FBQ0EsU0FBTztBQUNYOzs7QUM3QjBTLFNBQVMsZUFBZTtBQUVsVSxTQUFT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 diff --git a/vite.config.ts.timestamp-1729300358055-f4fa93a67cc3f.mjs b/vite.config.ts.timestamp-1729300358055-f4fa93a67cc3f.mjs new file mode 100644 index 0000000..5a8ec11 --- /dev/null +++ b/vite.config.ts.timestamp-1729300358055-f4fa93a67cc3f.mjs @@ -0,0 +1,366 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "yc_ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + "bwip-js": "^4.3.2", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + jsonpack: "^1.1.5", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + qrcode: "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-supplier-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFxyXG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZDoge1xyXG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxyXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxyXG4gICAgICAgICAgICAvLyBlc2J1aWxkIFx1NjI1M1x1NTMwNVx1NjZGNFx1NUZFQlx1RkYwQ1x1NEY0Nlx1NjYyRlx1NEUwRFx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1x1RkYwQ3RlcnNlclx1NjI1M1x1NTMwNVx1NjE2Mlx1RkYwQ1x1NEY0Nlx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1xyXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXHJcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gXHRjb21wcmVzczoge1xyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG4gICAgICAgICAgICAvLyBcdH1cclxuICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XHJcbiAgICAgICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxyXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXHJcbiAgICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwiYXNzZXRzL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluL2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tc3VwcGxpZXItdHMtYWRtaW4vYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcbiAgICAgICAgXCJtaXR0XCI6IFwiXjMuMC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5wbHVnaW4tYXV0by1pbXBvcnRcIjogXCJeMC4xNi40XCIsXG4gICAgICAgIFwidW5wbHVnaW4taWNvbnNcIjogXCJeMC4xNi4zXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzXCI6IFwiXjEuMC4wXCIsXG4gICAgICAgIFwidml0ZVwiOiBcIl40LjMuOVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tZXNsaW50XCI6IFwiXjEuOC4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4taHRtbFwiOiBcIl4zLjIuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuNi41XCJcbiAgICB9LFxuICAgIFwiZW5naW5lc1wiOiB7XG4gICAgICAgIFwibm9kZVwiOiBcIj49MTYuMC4wXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlcnNsaXN0XCI6IHtcbiAgICAgICAgXCJwcm9kdWN0aW9uXCI6IFtcbiAgICAgICAgICAgIFwiPiAxJVwiLFxuICAgICAgICAgICAgXCJub3QgZGVhZFwiLFxuICAgICAgICAgICAgXCJub3Qgb3BfbWluaSBhbGxcIlxuICAgICAgICBdLFxuICAgICAgICBcImRldmVsb3BtZW50XCI6IFtcbiAgICAgICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIHNhZmFyaSB2ZXJzaW9uXCJcbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJjb25maWdcIjoge1xuICAgICAgICBcImNvbW1pdGl6ZW5cIjoge1xuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQThSLFNBQVMsY0FBYyxlQUFzQztBQUMzVixTQUFTLFdBQUFBLGdCQUFlOzs7QUNxQmpCLFNBQVMsV0FBVyxTQUE4QjtBQUNyRCxRQUFNLE1BQVcsQ0FBQztBQUVsQixhQUFXLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN4QyxRQUFJLFdBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLElBQUk7QUFDcEQsZUFBVyxhQUFhLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUTtBQUN2RSxRQUFJLFlBQVk7QUFBYSxpQkFBVyxPQUFPLFFBQVE7QUFDdkQsUUFBSSxZQUFZLGNBQWM7QUFDMUIsVUFBSTtBQUNBLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDbEMsU0FBUyxPQUFQO0FBQUEsTUFBZTtBQUFBLElBQ3JCO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFBQSxFQUNuQjtBQUNBLFNBQU87QUFDWDs7O0FDekJPLFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDOUMsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLFVBQU0sVUFBVTtBQUNoQixVQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFHbkMsUUFBSSxNQUFNLElBQUk7QUFBQSxNQUNWO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxJQUFJO0FBQUEsTUFDSixTQUFTLFVBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLFFBQVEsR0FBRyxFQUFFO0FBQUE7QUFBQSxNQUUxRCxHQUFJLFVBQVUsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNKO0FBQ0EsU0FBTztBQUNYOzs7QUM3QjBTLFNBQVMsZUFBZTtBQUVsVSxTQUFT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 diff --git a/vite.config.ts.timestamp-1729472526957-ce5250d6234a.mjs b/vite.config.ts.timestamp-1729472526957-ce5250d6234a.mjs new file mode 100644 index 0000000..5a8ec11 --- /dev/null +++ b/vite.config.ts.timestamp-1729472526957-ce5250d6234a.mjs @@ -0,0 +1,366 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "yc_ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + "bwip-js": "^4.3.2", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + jsonpack: "^1.1.5", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + qrcode: "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-supplier-ts-admin/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-supplier-ts-admin"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pblxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFxyXG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZDoge1xyXG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxyXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxyXG4gICAgICAgICAgICAvLyBlc2J1aWxkIFx1NjI1M1x1NTMwNVx1NjZGNFx1NUZFQlx1RkYwQ1x1NEY0Nlx1NjYyRlx1NEUwRFx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1x1RkYwQ3RlcnNlclx1NjI1M1x1NTMwNVx1NjE2Mlx1RkYwQ1x1NEY0Nlx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1xyXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXHJcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gXHRjb21wcmVzczoge1xyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG4gICAgICAgICAgICAvLyBcdH1cclxuICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XHJcbiAgICAgICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxyXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXHJcbiAgICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwiYXNzZXRzL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxcZ2V0RW52LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluL2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tc3VwcGxpZXItdHMtYWRtaW4vYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW5cXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcbiAgICAgICAgXCJtaXR0XCI6IFwiXjMuMC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5wbHVnaW4tYXV0by1pbXBvcnRcIjogXCJeMC4xNi40XCIsXG4gICAgICAgIFwidW5wbHVnaW4taWNvbnNcIjogXCJeMC4xNi4zXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzXCI6IFwiXjEuMC4wXCIsXG4gICAgICAgIFwidml0ZVwiOiBcIl40LjMuOVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tZXNsaW50XCI6IFwiXjEuOC4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4taHRtbFwiOiBcIl4zLjIuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuNi41XCJcbiAgICB9LFxuICAgIFwiZW5naW5lc1wiOiB7XG4gICAgICAgIFwibm9kZVwiOiBcIj49MTYuMC4wXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlcnNsaXN0XCI6IHtcbiAgICAgICAgXCJwcm9kdWN0aW9uXCI6IFtcbiAgICAgICAgICAgIFwiPiAxJVwiLFxuICAgICAgICAgICAgXCJub3QgZGVhZFwiLFxuICAgICAgICAgICAgXCJub3Qgb3BfbWluaSBhbGxcIlxuICAgICAgICBdLFxuICAgICAgICBcImRldmVsb3BtZW50XCI6IFtcbiAgICAgICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIHNhZmFyaSB2ZXJzaW9uXCJcbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJjb25maWdcIjoge1xuICAgICAgICBcImNvbW1pdGl6ZW5cIjoge1xuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQThSLFNBQVMsY0FBYyxlQUFzQztBQUMzVixTQUFTLFdBQUFBLGdCQUFlOzs7QUNxQmpCLFNBQVMsV0FBVyxTQUE4QjtBQUNyRCxRQUFNLE1BQVcsQ0FBQztBQUVsQixhQUFXLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN4QyxRQUFJLFdBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLElBQUk7QUFDcEQsZUFBVyxhQUFhLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUTtBQUN2RSxRQUFJLFlBQVk7QUFBYSxpQkFBVyxPQUFPLFFBQVE7QUFDdkQsUUFBSSxZQUFZLGNBQWM7QUFDMUIsVUFBSTtBQUNBLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDbEMsU0FBUyxPQUFQO0FBQUEsTUFBZTtBQUFBLElBQ3JCO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFBQSxFQUNuQjtBQUNBLFNBQU87QUFDWDs7O0FDekJPLFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDOUMsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLFVBQU0sVUFBVTtBQUNoQixVQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFHbkMsUUFBSSxNQUFNLElBQUk7QUFBQSxNQUNWO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxJQUFJO0FBQUEsTUFDSixTQUFTLFVBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLFFBQVEsR0FBRyxFQUFFO0FBQUE7QUFBQSxNQUUxRCxHQUFJLFVBQVUsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNKO0FBQ0EsU0FBTztBQUNYOzs7QUM3QjBTLFNBQVMsZUFBZTtBQUVsVSxTQUFT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 diff --git a/vite.config.ts.timestamp-1735265206963-4862ddb2f281c.mjs b/vite.config.ts.timestamp-1735265206963-4862ddb2f281c.mjs new file mode 100644 index 0000000..977fcc3 --- /dev/null +++ b/vite.config.ts.timestamp-1735265206963-4862ddb2f281c.mjs @@ -0,0 +1,366 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "yc_ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + "bwip-js": "^4.3.2", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + jsonpack: "^1.1.5", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + qrcode: "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-supplier-ts-admin-new/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-supplier-ts-admin-new"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pbi1uZXdcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4tbmV3XFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluLW5ldy92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFxyXG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZDoge1xyXG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxyXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxyXG4gICAgICAgICAgICAvLyBlc2J1aWxkIFx1NjI1M1x1NTMwNVx1NjZGNFx1NUZFQlx1RkYwQ1x1NEY0Nlx1NjYyRlx1NEUwRFx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1x1RkYwQ3RlcnNlclx1NjI1M1x1NTMwNVx1NjE2Mlx1RkYwQ1x1NEY0Nlx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1xyXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXHJcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gXHRjb21wcmVzczoge1xyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG4gICAgICAgICAgICAvLyBcdH1cclxuICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XHJcbiAgICAgICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxyXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXHJcbiAgICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwiYXNzZXRzL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4tbmV3XFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluLW5ld1xcXFxidWlsZFxcXFxnZXRFbnYudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tc3VwcGxpZXItdHMtYWRtaW4tbmV3L2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4tbmV3XFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluLW5ld1xcXFxidWlsZFxcXFxwcm94eS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbi1uZXcvYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4tbmV3XFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluLW5ld1xcXFxidWlsZFxcXFxwbHVnaW5zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluLW5ldy9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcbiAgICAgICAgXCJtaXR0XCI6IFwiXjMuMC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5wbHVnaW4tYXV0by1pbXBvcnRcIjogXCJeMC4xNi40XCIsXG4gICAgICAgIFwidW5wbHVnaW4taWNvbnNcIjogXCJeMC4xNi4zXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzXCI6IFwiXjEuMC4wXCIsXG4gICAgICAgIFwidml0ZVwiOiBcIl40LjMuOVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tZXNsaW50XCI6IFwiXjEuOC4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4taHRtbFwiOiBcIl4zLjIuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuNi41XCJcbiAgICB9LFxuICAgIFwiZW5naW5lc1wiOiB7XG4gICAgICAgIFwibm9kZVwiOiBcIj49MTYuMC4wXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlcnNsaXN0XCI6IHtcbiAgICAgICAgXCJwcm9kdWN0aW9uXCI6IFtcbiAgICAgICAgICAgIFwiPiAxJVwiLFxuICAgICAgICAgICAgXCJub3QgZGVhZFwiLFxuICAgICAgICAgICAgXCJub3Qgb3BfbWluaSBhbGxcIlxuICAgICAgICBdLFxuICAgICAgICBcImRldmVsb3BtZW50XCI6IFtcbiAgICAgICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIHNhZmFyaSB2ZXJzaW9uXCJcbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJjb25maWdcIjoge1xuICAgICAgICBcImNvbW1pdGl6ZW5cIjoge1xuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQTBTLFNBQVMsY0FBYyxlQUFzQztBQUN2VyxTQUFTLFdBQUFBLGdCQUFlOzs7QUNxQmpCLFNBQVMsV0FBVyxTQUE4QjtBQUNyRCxRQUFNLE1BQVcsQ0FBQztBQUVsQixhQUFXLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN4QyxRQUFJLFdBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLElBQUk7QUFDcEQsZUFBVyxhQUFhLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUTtBQUN2RSxRQUFJLFlBQVk7QUFBYSxpQkFBVyxPQUFPLFFBQVE7QUFDdkQsUUFBSSxZQUFZLGNBQWM7QUFDMUIsVUFBSTtBQUNBLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDbEMsU0FBUyxPQUFQO0FBQUEsTUFBZTtBQUFBLElBQ3JCO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFBQSxFQUNuQjtBQUNBLFNBQU87QUFDWDs7O0FDekJPLFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDOUMsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLFVBQU0sVUFBVTtBQUNoQixVQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU07QUFHbkMsUUFBSSxNQUFNLElBQUk7QUFBQSxNQUNWO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxJQUFJO0FBQUEsTUFDSixTQUFTLFVBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLFFBQVEsR0FBRyxFQUFFO0FBQUE7QUFBQSxNQUUxRCxHQUFJLFVBQVUsRUFBRSxRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxF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 diff --git a/vite.config.ts.timestamp-1757301251305-2ab830ad971fc.mjs b/vite.config.ts.timestamp-1757301251305-2ab830ad971fc.mjs new file mode 100644 index 0000000..746ea7f --- /dev/null +++ b/vite.config.ts.timestamp-1757301251305-2ab830ad971fc.mjs @@ -0,0 +1,366 @@ +// vite.config.ts +import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite/dist/node/index.js"; +import { resolve as resolve2 } from "path"; + +// build/getEnv.ts +function wrapperEnv(envConf) { + const ret = {}; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, "\n"); + realName = realName === "true" ? true : realName === "false" ? false : realName; + if (envName === "VITE_PORT") + realName = Number(realName); + if (envName === "VITE_PROXY") { + try { + realName = JSON.parse(realName); + } catch (error) { + } + } + ret[envName] = realName; + } + return ret; +} + +// build/proxy.ts +function createProxy(list = []) { + const ret = {}; + for (const [prefix, target] of list) { + const httpsRE = /^https:\/\//; + const isHttps = httpsRE.test(target); + ret[prefix] = { + target, + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""), + // https is require secure=false + ...isHttps ? { secure: false } : {} + }; + } + return ret; +} + +// build/plugins.ts +import { resolve } from "path"; +import { VitePWA } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite-plugin-pwa/dist/index.js"; +import { visualizer } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import { createHtmlPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite-plugin-html/dist/index.mjs"; +import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +import vue from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; +import eslintPlugin from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite-plugin-eslint/dist/index.mjs"; +import viteCompression from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/vite-plugin-compression/dist/index.mjs"; +import vueSetupExtend from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js"; +import AutoImport from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-auto-import/dist/vite.js"; +import Components from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-vue-components/dist/vite.mjs"; +import { ElementPlusResolver } from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-vue-components/dist/resolvers.mjs"; +import Icons from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-icons/dist/vite.mjs"; +import IconsResolver from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/unplugin-icons/dist/resolver.mjs"; +var createVitePlugins = (viteEnv) => { + const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv; + return [ + vue(), + // vue 可以使用 jsx/tsx 语法 + vueJsx(), + // esLint 报错信息显示在浏览器界面上 + eslintPlugin(), + // name 可以写在 script 标签上 + vueSetupExtend({}), + // 创建打包压缩配置 + createCompression(viteEnv), + // 注入变量到 html 文件 + createHtmlPlugin({ + inject: { + data: { title: VITE_GLOB_APP_TITLE } + } + }), + // 使用 svg 图标 + createSvgIconsPlugin({ + iconDirs: [resolve(process.cwd(), "src/assets/icons")], + symbolId: "icon-[dir]-[name]" + }), + // element按需导入 + AutoImport({ + // 安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ["vue", "vue-router"], + dts: "src/auto-import.d.ts", + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + prefix: "Icon" + }) + ] + }), + Components({ + // element + resolvers: [ + ElementPlusResolver({ importStyle: "sass" }), + IconsResolver({ + enabledCollections: ["ep"] + }) + ], + // 默认存放位置 + dts: "src/components.d.ts" + }), + Icons({ + autoInstall: true + }), + // vitePWA + VITE_PWA && createVitePwa(viteEnv), + // 是否生成包预览,分析依赖包大小做优化处理 + VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) + ]; +}; +var createCompression = (viteEnv) => { + const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; + const compressList = VITE_BUILD_COMPRESS.split(","); + const plugins = []; + if (compressList.includes("gzip")) { + plugins.push( + viteCompression({ + ext: ".gz", + algorithm: "gzip", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + if (compressList.includes("brotli")) { + plugins.push( + viteCompression({ + ext: ".br", + algorithm: "brotliCompress", + deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE + }) + ); + } + return plugins; +}; +var createVitePwa = (viteEnv) => { + const { VITE_GLOB_APP_TITLE } = viteEnv; + return VitePWA({ + registerType: "autoUpdate", + manifest: { + name: VITE_GLOB_APP_TITLE, + short_name: VITE_GLOB_APP_TITLE, + theme_color: "#ffffff", + icons: [ + { + src: "/logo.png", + sizes: "192x192", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png" + }, + { + src: "/logo.png", + sizes: "512x512", + type: "image/png", + purpose: "any maskable" + } + ] + } + }); +}; + +// package.json +var package_default = { + name: "yc_ops_admin_ts", + private: true, + version: "1.0.0", + type: "module", + scripts: { + dev: "vite", + serve: "vite", + "build:dev": "vue-tsc && vite build --mode development", + "build:test": "vue-tsc && vite build --mode test", + "build:pro": "vue-tsc && 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", + "@types/decimal.js": "^7.4.0", + "@vueuse/core": "^10.1.2", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "async-validator": "^4.2.5", + axios: "^1.4.0", + "bwip-js": "^4.3.2", + dayjs: "^1.11.9", + decimal: "^0.0.2", + "default-passive-events": "^2.0.0", + "driver.js": "^0.9.8", + "element-plus": "^2.3.4", + "file-saver": "^2.0.5", + "js-md5": "^0.7.3", + jsbarcode: "^3.11.6", + jsonpack: "^1.1.5", + "lodash-es": "^4.17.21", + mitt: "^3.0.0", + nprogress: "^0.2.0", + pinia: "^2.1.3", + "pinia-plugin-persistedstate": "^3.1.0", + "print-js": "^1.6.0", + qs: "^6.11.2", + sortablejs: "^1.15.0", + vue: "^3.3.4", + "vue-router": "^4.2.2", + vuedraggable: "^4.1.0", + "vxe-table": "^4.5.0-beta.10", + "xe-utils": "^3.5.11", + xlsx: "^0.18.5" + }, + devDependencies: { + "@commitlint/cli": "^17.6.3", + "@commitlint/config-conventional": "^17.6.3", + "@iconify-json/ep": "^1.1.10", + "@types/file-saver": "^2.0.5", + "@types/js-md5": "^0.7.0", + "@types/nprogress": "^0.2.0", + "@types/qs": "^6.9.7", + "@types/sortablejs": "^1.15.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + autoprefixer: "^10.4.14", + "cz-git": "^1.6.1", + czg: "^1.6.1", + eslint: "^8.41.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.14.0", + husky: "^8.0.3", + "lint-staged": "^13.2.2", + postcss: "^8.4.23", + "postcss-html": "^1.5.0", + prettier: "^2.8.8", + qrcode: "^1.5.3", + "rollup-plugin-visualizer": "^5.9.0", + sass: "^1.62.1", + "standard-version": "^9.5.0", + stylelint: "^15.6.2", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.0.0", + "stylelint-config-recommended-scss": "^12.0.0", + "stylelint-config-recommended-vue": "^1.4.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", + typescript: "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-icons": "^0.16.3", + "unplugin-vue-components": "^0.25.1", + "unplugin-vue-setup-extend-plus": "^1.0.0", + vite: "^4.3.9", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-html": "^3.2.0", + "vite-plugin-pwa": "^0.15.0", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.6.5" + }, + 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" + } + } +}; + +// vite.config.ts +import dayjs from "file:///D:/new_ops/orico-supplier-ts-admin(%E4%BE%9B%E5%BA%94%E9%93%BE-git)-%E4%BD%9C%E5%BA%9F/node_modules/dayjs/dayjs.min.js"; +var __vite_injected_original_dirname = "D:\\new_ops\\orico-supplier-ts-admin(\u4F9B\u5E94\u94FE-git)-\u4F5C\u5E9F"; +var { dependencies, devDependencies, name, version } = package_default; +var __APP_INFO__ = { + pkg: { dependencies, devDependencies, name, version }, + lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss") +}; +var vite_config_default = defineConfig(({ mode }) => { + const root = process.cwd(); + const env = loadEnv(mode, root); + const viteEnv = wrapperEnv(env); + return { + base: viteEnv.VITE_PUBLIC_PATH, + root, + resolve: { + alias: { + "@": resolve2(__vite_injected_original_dirname, "./src") + } + }, + define: { + __APP_INFO__: JSON.stringify(__APP_INFO__) + }, + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;` + } + } + }, + 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: { + //"console.log", + pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [] + }, + build: { + outDir: "dist", + minify: "esbuild", + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + // minify: "terser", + // terserOptions: { + // compress: { + // drop_console: viteEnv.VITE_DROP_CONSOLE, + // drop_debugger: true + // } + // }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 规定触发警告的 chunk 大小 + chunkSizeWarningLimit: 2e3, + 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]" + } + } + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1zdXBwbGllci10cy1hZG1pbihcdTRGOUJcdTVFOTRcdTk0RkUtZ2l0KS1cdTRGNUNcdTVFOUZcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4oXHU0RjlCXHU1RTk0XHU5NEZFLWdpdCktXHU0RjVDXHU1RTlGXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluKCVFNCVCRSU5QiVFNSVCQSU5NCVFOSU5MyVCRS1naXQpLSVFNCVCRCU5QyVFNSVCQSU5Ri92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFxyXG4gICAgICAgICAgICBwdXJlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFID8gW1wiY29uc29sZS5sb2dcIiwgXCJkZWJ1Z2dlclwiXSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZDoge1xyXG4gICAgICAgICAgICBvdXREaXI6IFwiZGlzdFwiLFxyXG4gICAgICAgICAgICBtaW5pZnk6IFwiZXNidWlsZFwiLFxyXG4gICAgICAgICAgICAvLyBlc2J1aWxkIFx1NjI1M1x1NTMwNVx1NjZGNFx1NUZFQlx1RkYwQ1x1NEY0Nlx1NjYyRlx1NEUwRFx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1x1RkYwQ3RlcnNlclx1NjI1M1x1NTMwNVx1NjE2Mlx1RkYwQ1x1NEY0Nlx1ODBGRFx1NTNCQlx1OTY2NCBjb25zb2xlLmxvZ1xyXG4gICAgICAgICAgICAvLyBtaW5pZnk6IFwidGVyc2VyXCIsXHJcbiAgICAgICAgICAgIC8vIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gXHRjb21wcmVzczoge1xyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9jb25zb2xlOiB2aXRlRW52LlZJVEVfRFJPUF9DT05TT0xFLFxyXG4gICAgICAgICAgICAvLyBcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG4gICAgICAgICAgICAvLyBcdH1cclxuICAgICAgICAgICAgLy8gfSxcclxuICAgICAgICAgICAgLy8gXHU3OTgxXHU3NTI4IGd6aXAgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHVGRjBDXHU1M0VGXHU3NTY1XHU1RkFFXHU1MUNGXHU1QzExXHU2MjUzXHU1MzA1XHU2NUY2XHU5NUY0XHJcbiAgICAgICAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gXHU4OUM0XHU1QjlBXHU4OUU2XHU1M0QxXHU4QjY2XHU1NDRBXHU3Njg0IGNodW5rIFx1NTkyN1x1NUMwRlxyXG4gICAgICAgICAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDIwMDAsXHJcbiAgICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXRpYyByZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiBhbmQgcGFja2FnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IFwiYXNzZXRzL2pzL1tuYW1lXS1baGFzaF0uanNcIixcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeUZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiBcImFzc2V0cy9bZXh0XS9bbmFtZV0tW2hhc2hdLltleHRdXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4oXHU0RjlCXHU1RTk0XHU5NEZFLWdpdCktXHU0RjVDXHU1RTlGXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluKFx1NEY5Qlx1NUU5NFx1OTRGRS1naXQpLVx1NEY1Q1x1NUU5RlxcXFxidWlsZFxcXFxnZXRFbnYudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tc3VwcGxpZXItdHMtYWRtaW4oJUU0JUJFJTlCJUU1JUJBJTk0JUU5JTkzJUJFLWdpdCktJUU0JUJEJTlDJUU1JUJBJTlGL2J1aWxkL2dldEVudi50c1wiO2ltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb2RlID09PSBcImRldmVsb3BtZW50XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJwcm9kdWN0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RGbihtb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuVklURV9SRVBPUlQgPT09IFwidHJ1ZVwiO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgZW52TmFtZSBvZiBPYmplY3Qua2V5cyhlbnZDb25mKSkge1xuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xuICAgICAgICByZWFsTmFtZSA9IHJlYWxOYW1lID09PSBcInRydWVcIiA/IHRydWUgOiByZWFsTmFtZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiByZWFsTmFtZTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QT1JUXCIpIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlYWxOYW1lID0gSlNPTi5wYXJzZShyZWFsTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgfVxuICAgICAgICByZXRbZW52TmFtZV0gPSByZWFsTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdXNlciByb290IGRpcmVjdG9yeVxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvb3RQYXRoKC4uLmRpcjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4oXHU0RjlCXHU1RTk0XHU5NEZFLWdpdCktXHU0RjVDXHU1RTlGXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluKFx1NEY5Qlx1NUU5NFx1OTRGRS1naXQpLVx1NEY1Q1x1NUU5RlxcXFxidWlsZFxcXFxwcm94eS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1zdXBwbGllci10cy1hZG1pbiglRTQlQkUlOUIlRTUlQkElOTQlRTklOTMlQkUtZ2l0KS0lRTQlQkQlOUMlRTUlQkElOUYvYnVpbGQvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gXCJ2aXRlXCI7XG5cbnR5cGUgUHJveHlJdGVtID0gW3N0cmluZywgc3RyaW5nXTtcblxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcblxudHlwZSBQcm94eVRhcmdldExpc3QgPSBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+O1xuXG4vKipcbiAqIFx1NTIxQlx1NUVGQVx1NEVFM1x1NzQwNlx1RkYwQ1x1NzUyOFx1NEU4RVx1ODlFM1x1Njc5MCAuZW52LmRldmVsb3BtZW50IFx1NEVFM1x1NzQwNlx1OTE0RFx1N0Y2RVxuICogQHBhcmFtIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGxpc3Q6IFByb3h5TGlzdCA9IFtdKSB7XG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtwcmVmaXgsIHRhcmdldF0gb2YgbGlzdCkge1xuICAgICAgICBjb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCBcIlwiKSxcbiAgICAgICAgICAgIC8vIGh0dHBzIGlzIHJlcXVpcmUgc2VjdXJlPWZhbHNlXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tc3VwcGxpZXItdHMtYWRtaW4oXHU0RjlCXHU1RTk0XHU5NEZFLWdpdCktXHU0RjVDXHU1RTlGXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLXN1cHBsaWVyLXRzLWFkbWluKFx1NEY5Qlx1NUU5NFx1OTRGRS1naXQpLVx1NEY1Q1x1NUU5RlxcXFxidWlsZFxcXFxwbHVnaW5zLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLXN1cHBsaWVyLXRzLWFkbWluKCVFNCVCRSU5QiVFNSVCQSU5NCVFOSU5MyVCRS1naXQpLSVFNCVCRCU5QyVFNSVCQSU5Ri9idWlsZC9wbHVnaW5zLnRzXCI7aW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCB7IFZpdGVQV0EgfSBmcm9tIFwidml0ZS1wbHVnaW4tcHdhXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjtcclxuaW1wb3J0IHZ1ZSBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI7XHJcbmltcG9ydCB2dWVKc3ggZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjtcclxuaW1wb3J0IGVzbGludFBsdWdpbiBmcm9tIFwidml0ZS1wbHVnaW4tZXNsaW50XCI7XHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI7XHJcbmltcG9ydCB2dWVTZXR1cEV4dGVuZCBmcm9tIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzL3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dnVlXHU0RTJEaG9vayByZWFjdGl2ZSByZWZcdTdCNDlcclxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIjtcclxuLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1dWktXHU3RUM0XHU0RUY2IFx1NkJENFx1NTk4Mlx1OEJGNGFudC1kZXNpZ24tdnVlICBlbGVtZW50LXBsdXNcdTdCNDlcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGVcIjtcclxuLy8gZWxlbWVudFxyXG5pbXBvcnQgeyBFbGVtZW50UGx1c1Jlc29sdmVyIH0gZnJvbSBcInVucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVyc1wiO1xyXG4vLyBcdTVCRkNcdTUxNjVcdTU2RkVcdTY4MDdcclxuaW1wb3J0IEljb25zIGZyb20gXCJ1bnBsdWdpbi1pY29ucy92aXRlXCI7XHJcbmltcG9ydCBJY29uc1Jlc29sdmVyIGZyb20gXCJ1bnBsdWdpbi1pY29ucy9yZXNvbHZlclwiO1xyXG5cclxuLyoqXHJcbiAqIFx1NTIxQlx1NUVGQSB2aXRlIFx1NjNEMlx1NEVGNlxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpdGVQbHVnaW5zID0gKHZpdGVFbnY6IFZpdGVFbnYpOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0dMT0JfQVBQX1RJVExFLCBWSVRFX1JFUE9SVCwgVklURV9QV0EgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHZ1ZSgpLFxyXG4gICAgICAgIC8vIHZ1ZSBcdTUzRUZcdTRFRTVcdTRGN0ZcdTc1MjgganN4L3RzeCBcdThCRURcdTZDRDVcclxuICAgICAgICB2dWVKc3goKSxcclxuICAgICAgICAvLyBlc0xpbnQgXHU2MkE1XHU5NTE5XHU0RkUxXHU2MDZGXHU2NjNFXHU3OTNBXHU1NzI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3NTRDXHU5NzYyXHU0RTBBXHJcbiAgICAgICAgZXNsaW50UGx1Z2luKCksXHJcbiAgICAgICAgLy8gbmFtZSBcdTUzRUZcdTRFRTVcdTUxOTlcdTU3Mjggc2NyaXB0IFx1NjgwN1x1N0I3RVx1NEUwQVxyXG4gICAgICAgIHZ1ZVNldHVwRXh0ZW5kKHt9KSxcclxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYyNTNcdTUzMDVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICAgICAgICBjcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTZDRThcdTUxNjVcdTUzRDhcdTkxQ0ZcdTUyMzAgaHRtbCBcdTY1ODdcdTRFRjZcclxuICAgICAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgICAgICAgaW5qZWN0OiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFx1NEY3Rlx1NzUyOCBzdmcgXHU1NkZFXHU2ODA3XHJcbiAgICAgICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgICAgICAgICBpY29uRGlyczogW3Jlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL2ljb25zXCIpXSxcclxuICAgICAgICAgICAgc3ltYm9sSWQ6IFwiaWNvbi1bZGlyXS1bbmFtZV1cIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIGVsZW1lbnRcdTYzMDlcdTk3MDBcdTVCRkNcdTUxNjVcclxuICAgICAgICBBdXRvSW1wb3J0KHtcclxuICAgICAgICAgICAgLy8gXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuICAgICAgICAgICAgaW1wb3J0czogW1widnVlXCIsIFwidnVlLXJvdXRlclwiXSxcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9hdXRvLWltcG9ydC5kLnRzXCIsXHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgcmVzb2x2ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKHsgaW1wb3J0U3R5bGU6IFwic2Fzc1wiIH0pLFxyXG4gICAgICAgICAgICAgICAgSWNvbnNSZXNvbHZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBcIkljb25cIlxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIENvbXBvbmVudHMoe1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRDb2xsZWN0aW9uczogW1wiZXBcIl1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIC8vIFx1OUVEOFx1OEJBNFx1NUI1OFx1NjUzRVx1NEY0RFx1N0Y2RVxyXG4gICAgICAgICAgICBkdHM6IFwic3JjL2NvbXBvbmVudHMuZC50c1wiXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgSWNvbnMoe1xyXG4gICAgICAgICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIHZpdGVQV0FcclxuICAgICAgICBWSVRFX1BXQSAmJiBjcmVhdGVWaXRlUHdhKHZpdGVFbnYpLFxyXG4gICAgICAgIC8vIFx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMFx1NTMwNVx1OTg4NFx1ODlDOFx1RkYwQ1x1NTIwNlx1Njc5MFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NTkyN1x1NUMwRlx1NTA1QVx1NEYxOFx1NTMxNlx1NTkwNFx1NzQwNlxyXG4gICAgICAgIFZJVEVfUkVQT1JUICYmICh2aXN1YWxpemVyKHsgZmlsZW5hbWU6IFwic3RhdHMuaHRtbFwiLCBnemlwU2l6ZTogdHJ1ZSwgYnJvdGxpU2l6ZTogdHJ1ZSB9KSBhcyBQbHVnaW5PcHRpb24pXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBcdTY4MzlcdTYzNkUgY29tcHJlc3MgXHU5MTREXHU3RjZFXHVGRjBDXHU3NTFGXHU2MjEwXHU0RTBEXHU1NDBDXHU3Njg0XHU1MzhCXHU3RjI5XHU4OUM0XHU1MjE5XHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb21wcmVzc2lvbiA9ICh2aXRlRW52OiBWaXRlRW52KTogUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10gPT4ge1xyXG4gICAgY29uc3QgeyBWSVRFX0JVSUxEX0NPTVBSRVNTID0gXCJub25lXCIsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCBwbHVnaW5zOiBQbHVnaW5PcHRpb25bXSA9IFtdO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImd6aXBcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmd6XCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiZ3ppcFwiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcyhcImJyb3RsaVwiKSkge1xyXG4gICAgICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgICAgICAgdml0ZUNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgIGV4dDogXCIuYnJcIixcclxuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogXCJicm90bGlDb21wcmVzc1wiLFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZTogVklURV9CVUlMRF9DT01QUkVTU19ERUxFVEVfT1JJR0lOX0ZJTEVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBsdWdpbnM7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFZpdGVQd2FcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmNvbnN0IGNyZWF0ZVZpdGVQd2EgPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gdml0ZUVudjtcclxuICAgIHJldHVybiBWaXRlUFdBKHtcclxuICAgICAgICByZWdpc3RlclR5cGU6IFwiYXV0b1VwZGF0ZVwiLFxyXG4gICAgICAgIG1hbmlmZXN0OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHNob3J0X25hbWU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXHJcbiAgICAgICAgICAgIHRoZW1lX2NvbG9yOiBcIiNmZmZmZmZcIixcclxuICAgICAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiMTkyeDE5MlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjUxMng1MTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBwdXJwb3NlOiBcImFueSBtYXNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuIiwgIntcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcbiAgICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxuICAgICAgICBcImJ1aWxkOmRldlwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgXCJidWlsZDp0ZXN0XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0XCIsXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICAgICAgXCJwcmV2aWV3XCI6IFwibnBtIHJ1biBidWlsZDpkZXYgJiYgdml0ZSBwcmV2aWV3XCIsXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXG4gICAgICAgIFwibGludDpwcmV0dGllclwiOiBcInByZXR0aWVyIC0td3JpdGUgXFxcInNyYy8qKi8qLntqcyx0cyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICAgICAgXCJsaW50OnN0eWxlbGludFwiOiBcInN0eWxlbGludCAtLWNhY2hlIC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxuICAgICAgICBcInByZXBhcmVcIjogXCJodXNreSBpbnN0YWxsXCIsXG4gICAgICAgIFwicmVsZWFzZVwiOiBcInN0YW5kYXJkLXZlcnNpb25cIixcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXG4gICAgfSxcbiAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcbiAgICAgICAgXCJAdHlwZXMvZGVjaW1hbC5qc1wiOiBcIl43LjQuMFwiLFxuICAgICAgICBcIkB2dWV1c2UvY29yZVwiOiBcIl4xMC4xLjJcIixcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXG4gICAgICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCJeNS4xLjEyXCIsXG4gICAgICAgIFwiYXN5bmMtdmFsaWRhdG9yXCI6IFwiXjQuMi41XCIsXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcbiAgICAgICAgXCJid2lwLWpzXCI6IFwiXjQuMy4yXCIsXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXG4gICAgICAgIFwiZGVjaW1hbFwiOiBcIl4wLjAuMlwiLFxuICAgICAgICBcImRlZmF1bHQtcGFzc2l2ZS1ldmVudHNcIjogXCJeMi4wLjBcIixcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcbiAgICAgICAgXCJlbGVtZW50LXBsdXNcIjogXCJeMi4zLjRcIixcbiAgICAgICAgXCJmaWxlLXNhdmVyXCI6IFwiXjIuMC41XCIsXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXG4gICAgICAgIFwianNiYXJjb2RlXCI6IFwiXjMuMTEuNlwiLFxuICAgICAgICBcImpzb25wYWNrXCI6IFwiXjEuMS41XCIsXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcbiAgICAgICAgXCJtaXR0XCI6IFwiXjMuMC4wXCIsXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXG4gICAgICAgIFwicGluaWFcIjogXCJeMi4xLjNcIixcbiAgICAgICAgXCJwaW5pYS1wbHVnaW4tcGVyc2lzdGVkc3RhdGVcIjogXCJeMy4xLjBcIixcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxuICAgICAgICBcInFzXCI6IFwiXjYuMTEuMlwiLFxuICAgICAgICBcInNvcnRhYmxlanNcIjogXCJeMS4xNS4wXCIsXG4gICAgICAgIFwidnVlXCI6IFwiXjMuMy40XCIsXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxuICAgICAgICBcInZ1ZWRyYWdnYWJsZVwiOiBcIl40LjEuMFwiLFxuICAgICAgICBcInZ4ZS10YWJsZVwiOiBcIl40LjUuMC1iZXRhLjEwXCIsXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXG4gICAgICAgIFwieGxzeFwiOiBcIl4wLjE4LjVcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIl4xNy42LjNcIixcbiAgICAgICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiXjE3LjYuM1wiLFxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL2ZpbGUtc2F2ZXJcIjogXCJeMi4wLjVcIixcbiAgICAgICAgXCJAdHlwZXMvanMtbWQ1XCI6IFwiXjAuNy4wXCIsXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxuICAgICAgICBcIkB0eXBlcy9xc1wiOiBcIl42LjkuN1wiLFxuICAgICAgICBcIkB0eXBlcy9zb3J0YWJsZWpzXCI6IFwiXjEuMTUuMVwiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXJcIjogXCJeNS41OS43XCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlXCI6IFwiXjQuMi4zXCIsXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxuICAgICAgICBcImF1dG9wcmVmaXhlclwiOiBcIl4xMC40LjE0XCIsXG4gICAgICAgIFwiY3otZ2l0XCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXG4gICAgICAgIFwiZXNsaW50XCI6IFwiXjguNDEuMFwiLFxuICAgICAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCJeOC44LjBcIixcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXG4gICAgICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCJeOS4xNC4wXCIsXG4gICAgICAgIFwiaHVza3lcIjogXCJeOC4wLjNcIixcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcbiAgICAgICAgXCJwb3N0Y3NzXCI6IFwiXjguNC4yM1wiLFxuICAgICAgICBcInBvc3Rjc3MtaHRtbFwiOiBcIl4xLjUuMFwiLFxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXG4gICAgICAgIFwicXJjb2RlXCI6IFwiXjEuNS4zXCIsXG4gICAgICAgIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI6IFwiXjUuOS4wXCIsXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcbiAgICAgICAgXCJzdGFuZGFyZC12ZXJzaW9uXCI6IFwiXjkuNS4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50XCI6IFwiXjE1LjYuMlwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjZXNzLW9yZGVyXCI6IFwiXjQuMC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNvbW1lbmRlZC1zY3NzXCI6IFwiXjEyLjAuMFwiLFxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZFwiOiBcIl4zMy4wLjBcIixcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkLXNjc3NcIjogXCJeOS4wLjBcIixcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXG4gICAgICAgIFwidW5wbHVnaW4tYXV0by1pbXBvcnRcIjogXCJeMC4xNi40XCIsXG4gICAgICAgIFwidW5wbHVnaW4taWNvbnNcIjogXCJeMC4xNi4zXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLXNldHVwLWV4dGVuZC1wbHVzXCI6IFwiXjEuMC4wXCIsXG4gICAgICAgIFwidml0ZVwiOiBcIl40LjMuOVwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4tZXNsaW50XCI6IFwiXjEuOC4xXCIsXG4gICAgICAgIFwidml0ZS1wbHVnaW4taHRtbFwiOiBcIl4zLjIuMFwiLFxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCJeMi4wLjFcIixcbiAgICAgICAgXCJ2dWUtdHNjXCI6IFwiXjEuNi41XCJcbiAgICB9LFxuICAgIFwiZW5naW5lc1wiOiB7XG4gICAgICAgIFwibm9kZVwiOiBcIj49MTYuMC4wXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlcnNsaXN0XCI6IHtcbiAgICAgICAgXCJwcm9kdWN0aW9uXCI6IFtcbiAgICAgICAgICAgIFwiPiAxJVwiLFxuICAgICAgICAgICAgXCJub3QgZGVhZFwiLFxuICAgICAgICAgICAgXCJub3Qgb3BfbWluaSBhbGxcIlxuICAgICAgICBdLFxuICAgICAgICBcImRldmVsb3BtZW50XCI6IFtcbiAgICAgICAgICAgIFwibGFzdCAxIGNocm9tZSB2ZXJzaW9uXCIsXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcbiAgICAgICAgICAgIFwibGFzdCAxIHNhZmFyaSB2ZXJzaW9uXCJcbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJjb25maWdcIjoge1xuICAgICAgICBcImNvbW1pdGl6ZW5cIjoge1xuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQTBXLFNBQVMsY0FBYyxlQUFzQztBQUN2YSxTQUFTLFdBQUFBLGdCQUFlOzs7QUNxQmpCLFNBQVMsV0FBVyxTQUE4QjtBQUNyRCxRQUFNLE1BQVcsQ0FBQztBQUVsQixhQUFXLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN4QyxRQUFJLFdBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxRQUFRLElBQUk7QUFDcEQsZUFBVyxhQUFhLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUTtBQUN2RSxRQUFJLFlBQVk7QUFBYSxpQkFBVyxPQUFPLFFBQVE7QUFDdkQsUUFBSSxZQUFZLGNB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