commit 4074bbdc74fa3ce2d31be786b6ecfd55f5048c7d
Author: louis <869322496@qq.com>
Date: Tue Feb 27 17:22:27 2024 +0800
build: 搭建项目架构
diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..b133c49
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,5 @@
+> 1%
+last 2 versions
+not dead
+not ie 11
+chrome 79
diff --git a/.cz-config.js b/.cz-config.js
new file mode 100644
index 0000000..57d4806
--- /dev/null
+++ b/.cz-config.js
@@ -0,0 +1,94 @@
+// 请使用npm run c提交代码。遵循代码提交规范
+module.exports = {
+ types: [
+ { value: 'feat', name: '功能: ✨ 新增功能', emoji: ':sparkles:' },
+ { value: 'fix', name: '修复: 🐛 修复缺陷', emoji: ':bug:' },
+ { value: 'docs', name: '文档: 📝 文档变更', emoji: ':memo:' },
+ {
+ value: 'style',
+ name: '格式: 🌈 代码格式(不影响功能,例如空格、分号等格式修正)',
+ emoji: ':lipstick:',
+ },
+ {
+ value: 'refactor',
+ name: '重构: 🔄 代码重构(不包括 bug 修复、功能新增)',
+ emoji: ':recycle:',
+ },
+ { value: 'perf', name: '性能: 🚀 性能优化', emoji: ':zap:' },
+ {
+ value: 'test',
+ name: '测试: 🧪 添加疏漏测试或已有测试改动',
+ emoji: ':white_check_mark:',
+ },
+ {
+ value: 'build',
+ name: '构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)',
+ emoji: ':package:',
+ },
+ {
+ value: 'ci',
+ name: '集成: ⚙️ 修改 CI 配置、脚本',
+ emoji: ':ferris_wheel:',
+ },
+ { value: 'revert', name: '回退: ↩️ 回滚 commit', emoji: ':rewind:' },
+ {
+ value: 'chore',
+ name: '其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)',
+ emoji: ':hammer:',
+ },
+ ],
+ useEmoji: true,
+ emojiAlign: 'center',
+ useAI: false,
+ aiNumber: 1,
+ themeColorCode: '',
+ scopes: [],
+ allowCustomScopes: true,
+ allowEmptyScopes: true,
+ customScopesAlign: 'bottom',
+ customScopesAlias: 'custom',
+ emptyScopesAlias: 'empty',
+ upperCaseSubject: false,
+ markBreakingChangeMode: false,
+ breaklineNumber: 100,
+ breaklineChar: '|',
+ issuePrefixes: [
+ { value: 'closed', name: 'closed: ISSUES has been processed' },
+ ],
+ customIssuePrefixAlign: 'top',
+ emptyIssuePrefixAlias: 'skip',
+ customIssuePrefixAlias: 'custom',
+ allowCustomIssuePrefix: true,
+ allowEmptyIssuePrefix: true,
+ confirmColorize: true,
+ maxHeaderLength: Infinity,
+ maxSubjectLength: Infinity,
+ minSubjectLength: 0,
+ scopeOverrides: undefined,
+ defaultBody: '',
+ defaultIssues: '',
+ defaultScope: '',
+ defaultSubject: '',
+ messages: {
+ type: '选择一种你期望的提交类型(type):',
+ // scope: '选择一个更改的范围(scope) (可选):',
+ // used if allowCustomScopes is true
+ // customScope: 'Denote the SCOPE of this change:',
+ subject: '输入本次commit记录说明:\n',
+ // body: '长说明,使用"|"换行(可选):\n',
+ // breaking: '非兼容性说明 (可选):\n',
+ // footer: '关联关闭的issue,例如:#31, #34(可选):\n',
+ confirmCommit: '确定提交说明?',
+ },
+ skipQuestions: ['scope', 'body', 'breaking', 'footer'],
+ allowBreakingChanges: [
+ 'fix',
+ 'feat',
+ 'update',
+ 'refactor',
+ 'perf',
+ 'build',
+ 'revert',
+ ],
+ subjectLimit: 500, // 提交长度限制500
+};
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..54adfc6
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,19 @@
+.DS_Store
+node_modules/
+dist/
+.vscode/
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+tests/**/coverage/
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+
\ No newline at end of file
diff --git a/.env b/.env
new file mode 100644
index 0000000..692c263
--- /dev/null
+++ b/.env
@@ -0,0 +1,9 @@
+# 项目名称
+VITE_APP_TITLE = Admin
+
+# 网站前缀
+VITE_BASE_URL = /
+
+# enable mock in production
+VITE_MOCK_IN_PROD = false
+
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..76dead8
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,10 @@
+# 只在开发模式中被载入
+ENV = 'development'
+
+# 公共基础路径, 所有资源的路径都将据此配置重写。
+VITE_BASE_URL = /
+
+# base api url
+VITE_BASE_API_URL = '/api'
+
+VITE_DROP_CONSOLE = false
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..8ef2daa
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,11 @@
+# 只在生产模式中被载入
+ENV = 'production'
+
+# base api url
+# VITE_BASE_API_URL = 'https://nest-api.buqiyuan.site'
+VITE_BASE_API_URL = 'http://localhost:7001'
+
+# 公共基础路径, 所有资源的路径都将据此配置重写。
+VITE_BASE_URL = /api
+
+VITE_DROP_CONSOLE = true
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..13dc310
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,19 @@
+
+*.sh
+node_modules
+*.md
+*.woff
+*.ttf
+.vscode
+.idea
+dist
+/public
+/docs
+.husky
+.local
+/bin
+/src/mock
+Dockerfile
+commitlint.config.js
+
+components.d.ts
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..7de04ca
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,110 @@
+/**
+ * @type {import('eslint').ESLint.ConfigData}
+ */
+module.exports = {
+ root: true,
+ env: {
+ browser: true,
+ node: true,
+ es6: true,
+ },
+ parser: 'vue-eslint-parser',
+ parserOptions: {
+ parser: '@typescript-eslint/parser',
+ ecmaVersion: 2020,
+ sourceType: 'module',
+ jsxPragma: 'React',
+ ecmaFeatures: {
+ jsx: true,
+ tsx: true,
+ },
+ },
+ plugins: ['vue', '@typescript-eslint', 'import'],
+ extends: [
+ 'eslint:recommended',
+ 'plugin:vue/vue3-recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:prettier/recommended',
+ ],
+ overrides: [
+ {
+ files: ['*.ts', '*.js', '*.tsx', '*.vue'],
+ rules: {
+ 'no-undef': 'off',
+ },
+ },
+ ],
+ rules: {
+ 'no-unused-vars': 'off',
+
+ // js/ts
+ // 'no-console': ['warn', { allow: ['error'] }],
+ 'no-restricted-syntax': ['error', 'LabeledStatement', 'WithStatement'],
+ camelcase: ['error', { properties: 'never' }],
+
+ 'no-var': 'error',
+ 'no-empty': ['error', { allowEmptyCatch: true }],
+ 'no-void': 'error',
+ 'prefer-const': ['warn', { destructuring: 'all', ignoreReadBeforeAssign: true }],
+ 'prefer-template': 'error',
+ 'object-shorthand': ['error', 'always', { ignoreConstructors: false, avoidQuotes: true }],
+ 'block-scoped-var': 'error',
+ 'no-constant-condition': ['error', { checkLoops: false }],
+
+ 'no-redeclare': 'off',
+ '@typescript-eslint/no-redeclare': 'error',
+ '@typescript-eslint/ban-ts-comment': 'off',
+ '@typescript-eslint/ban-types': 'off',
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
+ '@typescript-eslint/no-empty-function': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ '@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
+ // '@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
+ '@typescript-eslint/no-var-requires': 'off',
+ '@typescript-eslint/no-unused-vars': [
+ 'error',
+ {
+ argsIgnorePattern: '^_',
+ varsIgnorePattern: '^_',
+ },
+ ],
+
+ // vue
+ 'vue/no-v-html': 'off',
+ 'vue/require-default-prop': 'off',
+ 'vue/require-explicit-emits': 'off',
+ 'vue/multi-word-component-names': 'off',
+
+ // prettier
+ 'prettier/prettier': 'error',
+
+ // import
+ 'import/first': 'error',
+ 'import/no-duplicates': 'error',
+ 'import/order': [
+ 'error',
+ {
+ groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
+
+ pathGroups: [
+ {
+ pattern: 'vue',
+ group: 'external',
+ position: 'before',
+ },
+ {
+ pattern: '@vue/**',
+ group: 'external',
+ position: 'before',
+ },
+ {
+ pattern: 'ant-design-vue',
+ group: 'internal',
+ },
+ ],
+ pathGroupsExcludedImportTypes: ['type'],
+ },
+ ],
+ },
+};
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8337796
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+node_modules
+.DS_Store
+dist
+.cache
+
+tests/server/static
+tests/server/static/upload
+
+.local
+# local env files
+.env.local
+.env.*.local
+.eslintcache
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+*pnpm-debug.log*
+
+# Editor directories and files
+.idea
+# .vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# auto generate file
+types/auto-imports.d.ts
+types/components.d.ts
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 0000000..35ed753
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+npm run commitlint
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000..3bb6316
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,7 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+#推送之前运行eslint检查
+npx lint-staged
+##推送之前运行单元测试检查
+#npm run test:unit
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..c929035
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,18 @@
+# 使用淘宝镜像源
+registry = https://registry.npmmirror.com
+# registry = https://registry.npmjs.org
+
+# 根据需要提升含有以下的依赖包到根 node_modules 目录下
+public-hoist-pattern[]=husky
+public-hoist-pattern[]=*eslint*
+public-hoist-pattern[]=*prettier*
+public-hoist-pattern[]=lint-staged
+public-hoist-pattern[]=*stylelint*
+public-hoist-pattern[]=@commitlint/cli
+public-hoist-pattern[]=core-js
+
+# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用
+# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。
+# shamefully-hoist=true
+
+enable-pre-post-scripts=true
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..f7e39e6
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,9 @@
+/dist/*
+.local
+.output.js
+/node_modules/**
+
+**/*.svg
+**/*.sh
+
+/public/*
diff --git a/.stylelintignore b/.stylelintignore
new file mode 100644
index 0000000..46e88b0
--- /dev/null
+++ b/.stylelintignore
@@ -0,0 +1,2 @@
+/dist/*
+/public/*
diff --git a/.versionrc.js b/.versionrc.js
new file mode 100644
index 0000000..e4ad6c6
--- /dev/null
+++ b/.versionrc.js
@@ -0,0 +1,19 @@
+//发布应用 生成commit日志记录。
+
+module.exports = {
+ types: [
+ { type: 'feat', section: '✨ Features | 新功能' },
+ { type: 'fix', section: '🐛 Bug Fixes | Bug 修复' },
+ { type: 'init', section: '📦️ Init | 初始化' },
+ { type: 'docs', section: '📝 Documentation | 文档' },
+ { type: 'style', section: '🌈 Styles | 风格' },
+ { type: 'refactor', section: '🔄 Code Refactoring | 代码重构' },
+ { type: 'perf', section: '🚀 Performance Improvements | 性能优化' },
+ { type: 'test', section: '🧪 Tests | 测试' },
+ { type: 'revert', section: '↩️ Revert | 回退' },
+ { type: 'build', section: '📦️ Build System | 打包构建' },
+ { type: 'update', section: '⚙️ update | 构建/工程依赖/工具升级' },
+ { type: 'tool', section: '🛠️ tool | 工具升级' },
+ { type: 'ci', section: '⚙️ Continuous Integration | CI 配置' },
+ ],
+};
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..1c8376a
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,14 @@
+{
+ "recommendations": [
+ "Vue.volar",
+ "Vue.vscode-typescript-vue-plugin",
+ "dbaeumer.vscode-eslint",
+ "stylelint.vscode-stylelint",
+ "esbenp.prettier-vscode",
+ "mrmlnc.vscode-less",
+ "lokalise.i18n-ally",
+ "antfu.iconify",
+ "mikestead.dotenv",
+ "heybourn.headwind"
+ ]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..1b6d776
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,13 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "chrome",
+ "request": "launch",
+ "name": "Launch Chrome",
+ "url": "http://localhost:8080",
+ "webRoot": "${workspaceFolder}/src",
+ "sourceMaps": true
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..bd1d447
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,106 @@
+{
+ "typescript.tsdk": "./node_modules/typescript/lib",
+ "volar.tsPlugin": true,
+ "volar.tsPluginStatus": false,
+ "npm.packageManager": "pnpm",
+ "editor.tabSize": 2,
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "files.eol": "\n",
+ "search.exclude": {
+ "**/node_modules": true,
+ "**/*.log": true,
+ "**/*.log*": true,
+ "**/bower_components": true,
+ "**/dist": true,
+ "**/elehukouben": true,
+ "**/.git": true,
+ "**/.gitignore": true,
+ "**/.svn": true,
+ "**/.DS_Store": true,
+ "**/.idea": true,
+ "**/.vscode": false,
+ "**/yarn.lock": true,
+ "**/tmp": true,
+ "out": true,
+ "dist": true,
+ "node_modules": true,
+ "CHANGELOG.md": true,
+ "examples": true,
+ "res": true,
+ "screenshots": true,
+ "yarn-error.log": true,
+ "**/.yarn": true
+ },
+ "files.exclude": {
+ "**/.cache": true,
+ "**/.editorconfig": true,
+ "**/.eslintcache": true,
+ "**/bower_components": true,
+ "**/.idea": true,
+ "**/tmp": true,
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true
+ },
+ "files.watcherExclude": {
+ "**/.git/objects/**": true,
+ "**/.git/subtree-cache/**": true,
+ "**/.vscode/**": true,
+ "**/node_modules/**": true,
+ "**/tmp/**": true,
+ "**/bower_components/**": true,
+ "**/dist/**": true,
+ "**/yarn.lock": true
+ },
+ "stylelint.enable": true,
+ "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
+ "path-intellisense.mappings": {
+ "@/": "${workspaceRoot}/src"
+ },
+ "[javascriptreact]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[typescript]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[typescriptreact]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[html]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[css]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[less]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[scss]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[markdown]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit",
+ "source.fixAll.stylelint": "explicit"
+ },
+ "[vue]": {
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit",
+ "source.fixAll.stylelint": "explicit"
+ },
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "i18n-ally.localesPaths": ["src/locales/lang"],
+ "i18n-ally.keystyle": "nested",
+ "i18n-ally.sortKeys": true,
+ "i18n-ally.namespace": true,
+ "i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
+ "i18n-ally.enabledParsers": ["json"],
+ "i18n-ally.sourceLanguage": "en",
+ "i18n-ally.displayLanguage": "zh-CN",
+ "i18n-ally.enabledFrameworks": ["vue", "react"]
+}
diff --git a/.vscode/vue3.3.code-snippets b/.vscode/vue3.3.code-snippets
new file mode 100644
index 0000000..c4625ad
--- /dev/null
+++ b/.vscode/vue3.3.code-snippets
@@ -0,0 +1,20 @@
+{
+ "Vue3.3+defineOptions快速生成模板": {
+ "scope": "vue",
+ "prefix": "Vue3.3+",
+ "body": [
+ "\n",
+ "",
+ "\ttest
",
+ "\n",
+ "",
+ "$2"
+ ],
+ "description": "Vue3.3+defineOptions快速生成模板"
+ }
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..e69de29
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..2da473c
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,29 @@
+
+# https://stackoverflow.com/questions/53681522/share-variable-in-multi-stage-dockerfile-arg-before-from-not-substituted
+ARG PROJECT_DIR=/huaxin-base-frontend
+
+FROM node:20-slim as builder
+ARG PROJECT_DIR
+WORKDIR $PROJECT_DIR
+
+# 安装pnpm
+RUN npm install -g pnpm
+
+COPY . ./
+# 安装依赖
+# 若网络不通,可以使用淘宝源
+# RUN pnpm config set registry https://registry.npmmirror.com
+RUN pnpm install
+
+# 构建项目
+ENV VITE_BASE_URL=/
+RUN pnpm build
+
+
+FROM nginx:alpine as production
+ARG PROJECT_DIR
+
+COPY --from=builder $PROJECT_DIR/dist/ /usr/share/nginx/html
+# COPY --from=builder $PROJECT_DIR/nginx.conf /etc/nginx/nginx.conf
+
+EXPOSE 80
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..017f883
--- /dev/null
+++ b/README.md
@@ -0,0 +1,77 @@
+# Huaxin-admin
+
+基于 vite5.x + vue3.x + antd-design-vue4.x + typescript5.x
+
+- 账号:admin,密码:a123456
+- [swagger 文档](http://localhost:7001/api-docs/)
+
+## 技术要求
+
+- [Vue](https://cn.vuejs.org/)
+- [Ant desgin](https://www.antdv.com/components/overview-cn)
+- [TypeScript](https://www.tslang.cn/index.html)
+- [Nestjs](https://docs.nestjs.cn/8/)
+- [TypeORM](https://typeorm.biunav.com/)
+- Mysql
+- Redis
+
+## 技术选型
+
+1. **前端技术**
+
+- vue3
+- ant design
+- axios
+- pinia
+- vue-router @3.4.9
+- less-loader @10.1.1
+
+2. **后端技术**
+
+- nest
+- mysql2
+- swagger-ui-express
+- typeorm
+- ioredis
+
+## 安装使用
+
+- 安装依赖
+
+```bash
+pnpm install
+```
+
+- 运行
+
+```bash
+pnpm dev
+```
+
+- 打包
+
+```bash
+pnpm build
+```
+
+## Git 贡献提交规范
+
+```bash
+yarn c
+```
+
+- 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular))
+
+ - `feat` 增加新功能
+ - `fix` 修复问题/BUG
+ - `style` 代码风格相关无影响运行结果的
+ - `perf` 优化/性能提升
+ - `refactor` 重构
+ - `revert` 撤销修改
+ - `test` 测试相关
+ - `docs` 文档/注释
+ - `chore` 依赖更新/脚手架配置修改等
+ - `workflow` 工作流改进
+ - `ci` 持续集成
+ - `types` 类型定义文件更改
+ - `wip` 开发中
diff --git a/commitlint.config.cjs b/commitlint.config.cjs
new file mode 100644
index 0000000..7576451
--- /dev/null
+++ b/commitlint.config.cjs
@@ -0,0 +1,24 @@
+// 请使用npm run c/yarn c提交代码。
+module.exports = {
+ extends: ['@commitlint/config-conventional'],
+ rules: {
+ 'type-enum': [
+ 2,
+ 'always',
+ [
+ 'feat', // 新增功能
+ 'fix', // 修复缺陷
+ 'docs', // 文档变更
+ 'style', // 代码格式(不影响功能,例如空格、分号等格式修正)
+ 'refactor', // 代码重构(不包括 bug 修复、功能新增)
+ 'perf', // 性能优化
+ 'test', // 添加疏漏测试或已有测试改动
+ 'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)
+ 'ci', // 修改 CI 配置、脚本
+ 'revert', // 回滚 commit
+ 'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
+ ],
+ ],
+ 'subject-case': [0], // subject大小写不做校验
+ },
+};
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..96ece10
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,14 @@
+version: '3'
+
+services:
+ huaxin-base-frontend:
+ # 从当前路径构建镜像
+ build:
+ context: .
+ dockerfile: Dockerfile
+ target: production
+ ports:
+ - '80:80'
+ env_file:
+ - .env
+ - .env.production
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..ca8fe44
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ 华信Admin
+
+
+
+
+
+
diff --git a/lint-staged.config.js b/lint-staged.config.js
new file mode 100644
index 0000000..425a9c3
--- /dev/null
+++ b/lint-staged.config.js
@@ -0,0 +1,10 @@
+/**
+ * @type {import('stylelint').Config}
+ */
+module.exports = {
+ '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
+ '*.json': ['prettier --write'],
+ '*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix --allow-empty-input'],
+ '*.{scss,less,styl,html}': ['stylelint --fix --allow-empty-input', 'prettier --write'],
+ '*.md': ['prettier --write'],
+};
diff --git a/mocks/_util.ts b/mocks/_util.ts
new file mode 100644
index 0000000..2164d18
--- /dev/null
+++ b/mocks/_util.ts
@@ -0,0 +1,83 @@
+// Interface data format used to return a unified format
+import type { DefaultBodyType, StrictRequest } from 'msw';
+import { ResultEnum } from '@/enums/httpEnum';
+import { uniqueSlash } from '@/utils/urlUtils';
+
+const baseApiUrl = new URL(import.meta.env.VITE_BASE_API_URL, location.origin).toString();
+
+/**
+ * msw 官方不支持配置 baseUrl, 需要自己手动处理
+ * @see https://github.com/mswjs/msw/issues/397#issuecomment-751230924
+ */
+export const serverApi = (path: string) => {
+ return uniqueSlash(baseApiUrl + path);
+};
+
+export function resultSuccess(data: T, { message = 'ok' } = {}) {
+ return {
+ code: ResultEnum.SUCCESS,
+ data,
+ message,
+ type: 'success',
+ };
+}
+
+export function resultPageSuccess(
+ page: number,
+ pageSize: number,
+ list: T[],
+ { message = 'ok' } = {},
+) {
+ const pageData = pagination(page, pageSize, list);
+
+ return {
+ ...resultSuccess({
+ items: pageData,
+ meta: {
+ currentPage: ~~page,
+ totalItems: list.length,
+ totalPages: Math.ceil(list.length / pageSize),
+ },
+ }),
+ message,
+ };
+}
+
+export function resultError(
+ message = 'Request failed',
+ { code = ResultEnum.ERROR, data = null } = {},
+) {
+ return {
+ code,
+ data,
+ message,
+ type: 'error',
+ };
+}
+
+export function pagination(pageNo: number, pageSize: number, array: T[]): T[] {
+ const offset = (pageNo - 1) * Number(pageSize);
+ return offset + Number(pageSize) >= array.length
+ ? array.slice(offset, array.length)
+ : array.slice(offset, offset + Number(pageSize));
+}
+
+export interface requestParams {
+ method: string;
+ body: any;
+ headers?: { authorization?: string };
+ query: any;
+}
+
+/**
+ * @description 本函数用于从request数据中获取token,请根据项目的实际情况修改
+ *
+ */
+export function getRequestToken({ headers }: requestParams): string | undefined {
+ return headers?.authorization;
+}
+
+export const getQuery = (request: StrictRequest) => {
+ const url = new URL(request.url);
+ return Object.fromEntries(url.searchParams.entries());
+};
diff --git a/mocks/demo/hero/_heroList.json b/mocks/demo/hero/_heroList.json
new file mode 100644
index 0000000..0531065
--- /dev/null
+++ b/mocks/demo/hero/_heroList.json
@@ -0,0 +1,1978 @@
+[
+ {
+ "title": "正义爆轰",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=105&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "105",
+ "appointHeroid": "7",
+ "removeHeroid": "0",
+ "occupation": "坦克",
+ "num": "107",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200428/80750919757873.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200428/117411278918332.jpg",
+ "pinyin": "lianpo",
+ "ename": 105,
+ "cname": "廉颇",
+ "new_type": 0,
+ "hero_type": 3,
+ "skin_name": "正义爆轰|地狱岩魂"
+ },
+ {
+ "title": "恋之微风",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=106&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "106",
+ "appointHeroid": "13",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "106",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/237121077716001.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/1102737314499.jpg",
+ "pinyin": "xiaoqiao",
+ "ename": 106,
+ "cname": "小乔",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽"
+ },
+ {
+ "title": "苍天翔龙",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=107&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "107",
+ "appointHeroid": "1",
+ "removeHeroid": "0",
+ "occupation": "战士/刺客",
+ "num": "105",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/422841175180785.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/225211269527745.jpg",
+ "pinyin": "zhaoyun",
+ "ename": 107,
+ "cname": "赵云",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 4,
+ "skin_name": "苍天翔龙|忍●炎影|未来纪元|皇家上将|嘻哈天王|白执事|引擎之心"
+ },
+ {
+ "title": "和平守望",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=108&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "108",
+ "appointHeroid": "18",
+ "removeHeroid": "0",
+ "occupation": "法师/战士",
+ "num": "104",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/62651469219485.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/141381416202595.jpg",
+ "pinyin": "mozi",
+ "ename": 108,
+ "cname": "墨子",
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 1,
+ "skin_name": "和平守望|金属风暴|龙骑士|进击墨子号"
+ },
+ {
+ "title": "魅力之狐",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=109&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "109",
+ "appointHeroid": "2",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "103",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/782471528444287.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/699631230814498.jpg",
+ "pinyin": "daji",
+ "ename": 109,
+ "cname": "妲己",
+ "pay_type": 11,
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "魅惑之狐|女仆咖啡|魅力维加斯|仙境爱丽丝|少女阿狸|热情桑巴"
+ },
+ {
+ "title": "王者独尊",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=110&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "110",
+ "appointHeroid": "8",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "10",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200323/9558902611675.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200323/278721395811583.jpg",
+ "pinyin": "yingzheng",
+ "ename": 110,
+ "cname": "嬴政",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "王者独尊|摇滚巨星|暗夜贵公子|优雅恋人|白昼王子"
+ },
+ {
+ "title": "千金重弩",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=111&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "111",
+ "appointHeroid": "25",
+ "removeHeroid": "1",
+ "occupation": "射手",
+ "num": "102",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/528761277746534.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/573321328636709.jpg",
+ "pinyin": "sunshangxiang",
+ "ename": 111,
+ "cname": "孙尚香",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "千金重弩|火炮千金|水果甜心|蔷薇恋人|杀手不太冷|末日机甲|沉稳之力"
+ },
+ {
+ "title": "机关造物",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=112&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "112",
+ "appointHeroid": "14",
+ "removeHeroid": "1",
+ "occupation": "射手",
+ "num": "101",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/175711332695893.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/43936199005239.png",
+ "pinyin": "lubanqihao",
+ "ename": 112,
+ "cname": "鲁班七号",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "机关造物|木偶奇遇记|福禄兄弟|电玩小子|星空梦想"
+ },
+ {
+ "title": "逍遥梦幻",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=113&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "113",
+ "appointHeroid": "19",
+ "removeHeroid": "0",
+ "occupation": "辅助/坦克",
+ "num": "100",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/36407803861490.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/77101394382651.png",
+ "pinyin": "zhuangzhou",
+ "ename": 113,
+ "cname": "庄周",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "逍遥幻梦|鲤鱼之梦|蜃楼王|云端筑梦师"
+ },
+ {
+ "title": "暴走机关",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=114&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "114",
+ "appointHeroid": "26",
+ "removeHeroid": "0",
+ "occupation": "辅助/坦克",
+ "num": "14",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/6266887523314.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190823/29306987419076.jpg",
+ "pinyin": "liushan",
+ "ename": 114,
+ "cname": "刘禅",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "暴走机关|英喵野望|绅士熊喵|天才门将"
+ },
+ {
+ "title": "叛逆吟游",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=115&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "115",
+ "appointHeroid": "3",
+ "removeHeroid": "2",
+ "occupation": "法师",
+ "num": "99",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/84899525679925.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/23817580712911.jpg",
+ "pinyin": "gaojianli",
+ "ename": 115,
+ "cname": "高渐离",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "叛逆吟游|金属狂潮|死亡摇滚"
+ },
+ {
+ "title": "信念之刃",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=116&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "116",
+ "appointHeroid": "9",
+ "removeHeroid": "2",
+ "occupation": "刺客",
+ "num": "98",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/977331090834512.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/99651112048573.jpg",
+ "pinyin": "jingke",
+ "ename": 116,
+ "cname": "阿轲",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "信念之刃|爱心护理|暗夜猫娘|致命风华|节奏热浪"
+ },
+ {
+ "title": "野蛮之锤",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=117&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "117",
+ "appointHeroid": "15",
+ "removeHeroid": "0",
+ "occupation": "战士/坦克",
+ "num": "97",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/4638371386568.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/35122420479789.jpg",
+ "pinyin": "zhongwuyan",
+ "ename": 117,
+ "cname": "钟无艳",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "野蛮之锤|生化警戒|王者之锤|海滩丽影"
+ },
+ {
+ "title": "逆流之时",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=118&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "118",
+ "appointHeroid": "20",
+ "removeHeroid": "0",
+ "occupation": "辅助/法师",
+ "num": "16",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/70493764453797.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190717/68582301165891.jpg",
+ "pinyin": "sunbin",
+ "ename": 118,
+ "cname": "孙膑",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 2,
+ "skin_name": "逆流之时|未来旅行|天使之翼|妖精王"
+ },
+ {
+ "title": "善恶怪医",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=119&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "119",
+ "appointHeroid": "27",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "96",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/59618194648034.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/836271081336597.png",
+ "pinyin": "bianque",
+ "ename": 119,
+ "cname": "扁鹊",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "善恶怪医|救世之瞳|化身博士|炼金王"
+ },
+ {
+ "title": "最终兵器",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=120&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "120",
+ "appointHeroid": "4",
+ "removeHeroid": "1",
+ "occupation": "坦克",
+ "num": "95",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200326/155221210224517.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200326/6570235067207.jpg",
+ "pinyin": "baiqi",
+ "ename": 120,
+ "cname": "白起",
+ "new_type": 0,
+ "hero_type": 3,
+ "skin_name": "最终兵器|白色死神|狰|星夜王子"
+ },
+ {
+ "title": "永恒之月",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=121&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "121",
+ "appointHeroid": "37",
+ "removeHeroid": "1",
+ "occupation": "法师/坦克",
+ "num": "94",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/4519469508162.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170613/47620969119925.jpg",
+ "pinyin": "miyue",
+ "ename": 121,
+ "cname": "芈月",
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 3,
+ "skin_name": "永恒之月|红桃皇后|大秦宣太后|重明"
+ },
+ {
+ "title": "无双之魔",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=123&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "123",
+ "appointHeroid": "39",
+ "removeHeroid": "2",
+ "occupation": "战士/坦克",
+ "num": "93",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/664211000977024.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/321961310548288.png",
+ "pinyin": "lvbu",
+ "ename": 123,
+ "cname": "吕布",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "无双之魔|圣诞狂欢|天魔缭乱|末日机甲|猎兽之王"
+ },
+ {
+ "title": "铁血都督",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=124&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "124",
+ "appointHeroid": "34",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "92",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/86934792945830.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170908/307111124323013.jpg",
+ "pinyin": "zhouyu",
+ "ename": 124,
+ "cname": "周瑜",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "铁血都督|海军大将|真爱至上"
+ },
+ {
+ "title": "不羁之风",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=126&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "126",
+ "appointHeroid": "54",
+ "removeHeroid": "2",
+ "occupation": "坦克/战士",
+ "num": "61",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/7593351277808.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/64439961036621.jpg",
+ "pinyin": "xiahoudun",
+ "ename": 126,
+ "cname": "夏侯惇",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 1,
+ "skin_name": "不羁之风|战争骑士|乘风破浪|无限飓风号"
+ },
+ {
+ "title": "洛神降临",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=127&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "127",
+ "appointHeroid": "10",
+ "removeHeroid": "2",
+ "occupation": "法师",
+ "num": "91",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/8706478784651.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/126691414817402.jpg",
+ "pinyin": "zhenji",
+ "ename": 127,
+ "cname": "甄姬",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "洛神降临|冰雪圆舞曲|花好人间|游园惊梦"
+ },
+ {
+ "title": "鲜血枭雄",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=128&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "128",
+ "appointHeroid": "33",
+ "removeHeroid": "2",
+ "occupation": "战士",
+ "num": "90",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/128165944821.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/397691359908498.png",
+ "pinyin": "caocao",
+ "ename": 128,
+ "cname": "曹操",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "鲜血枭雄|超能战警|幽灵船长|死神来了|烛龙"
+ },
+ {
+ "title": "狂战士",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=129&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "129",
+ "appointHeroid": "21",
+ "removeHeroid": "2",
+ "occupation": "战士",
+ "num": "89",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/744831059647720.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/20454559634867.png",
+ "pinyin": "dianwei",
+ "ename": 129,
+ "cname": "典韦",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "狂战士|黄金武士|穷奇"
+ },
+ {
+ "title": "剑圣",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=130&ADTAG=pvp.storyweb",
+ "camptype": "8",
+ "heroid": "130",
+ "appointHeroid": "28",
+ "removeHeroid": "",
+ "occupation": "战士",
+ "num": "55",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/46551546090153.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160727/941571076869491.png",
+ "pinyin": "gongbenwuzang",
+ "ename": 130,
+ "cname": "宫本武藏",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "剑圣|鬼剑武藏|未来纪元|万象初新|地狱之眼|霸王丸"
+ },
+ {
+ "title": "青莲剑仙",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=131&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "131",
+ "appointHeroid": "46",
+ "removeHeroid": "0",
+ "occupation": "刺客",
+ "num": "88",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/54178532140165.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/48767445393807.png",
+ "pinyin": "libai",
+ "ename": 131,
+ "cname": "李白",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "青莲剑仙|范海辛|千年之狐|凤求凰|敏锐之力"
+ },
+ {
+ "title": "远游之枪",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=132&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "132",
+ "appointHeroid": "56",
+ "removeHeroid": "1",
+ "occupation": "射手",
+ "num": "59",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/213931307900110.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181029/120341325343790.jpg",
+ "pinyin": "makeboluo",
+ "ename": 132,
+ "cname": "马可波罗",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "远游之枪|激情绿茵|逐梦之星"
+ },
+ {
+ "title": "断案大师",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=133&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "133",
+ "appointHeroid": "16",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "87",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/5043088753153.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/64476830268821.jpg",
+ "pinyin": "direnjie",
+ "ename": 133,
+ "cname": "狄仁杰",
+ "pay_type": 11,
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "断案大师|锦衣卫|魔术师|超时空战士|阴阳师"
+ },
+ {
+ "title": "拳僧",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=134&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "134",
+ "appointHeroid": "22",
+ "removeHeroid": "0",
+ "occupation": "战士/坦克",
+ "num": "52",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/48361745905777.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/28376554913969.png",
+ "pinyin": "damo",
+ "ename": 134,
+ "cname": "达摩",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "拳僧|大发明家|拳王"
+ },
+ {
+ "title": "霸王",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=135&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "135",
+ "appointHeroid": "29",
+ "removeHeroid": "2",
+ "occupation": "坦克",
+ "num": "86",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/640041141757817.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/35024839042519.png",
+ "pinyin": "xiangyu",
+ "ename": 135,
+ "cname": "项羽",
+ "new_type": 0,
+ "hero_type": 3,
+ "skin_name": "霸王|帝国元帅|苍穹之光|海滩派对|职棒王牌|霸王别姬|科学大爆炸"
+ },
+ {
+ "title": "女帝",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=136&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "136",
+ "appointHeroid": "5",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "62",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/8645575620272.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190627/834011412951609.jpg",
+ "pinyin": "wuzetian",
+ "ename": 136,
+ "cname": "武则天",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "女帝|东方不败|海洋之心"
+ },
+ {
+ "title": "万古长明",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=139&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "139",
+ "appointHeroid": "11",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "47",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/56207935501606.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/58017735021814.png",
+ "pinyin": "laofuzi",
+ "ename": 139,
+ "cname": "老夫子",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "万古长明|潮流仙人|圣诞老人|功夫老勺"
+ },
+ {
+ "title": "一骑当千",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=140&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "140",
+ "appointHeroid": "52",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "46",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/275341569174044.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/18154342091729.png",
+ "pinyin": "guanyu",
+ "ename": 140,
+ "cname": "关羽",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "一骑当千|天启骑士|冰锋战神|龙腾万里"
+ },
+ {
+ "title": "绝世舞姬",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=141&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "141",
+ "appointHeroid": "38",
+ "removeHeroid": "2",
+ "occupation": "法师/刺客",
+ "num": "85",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/1559492280407.png",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/55547119153305.png",
+ "pinyin": "diaochan",
+ "ename": 141,
+ "cname": "貂蝉",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 4,
+ "skin_name": "绝世舞姬|异域舞娘|圣诞恋歌|逐梦之音|仲夏夜之梦"
+ },
+ {
+ "title": "暗夜萝莉",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=142&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "142",
+ "appointHeroid": "32",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "84",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/4412162996520.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/18901316660134.png",
+ "pinyin": "anqila",
+ "ename": 142,
+ "cname": "安琪拉",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "暗夜萝莉|玩偶对对碰|魔法小厨娘|心灵骇客|如懿"
+ },
+ {
+ "title": "热烈之斧",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=144&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "144",
+ "appointHeroid": "30",
+ "removeHeroid": "0",
+ "occupation": "坦克/战士",
+ "num": "83",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/632001118049593.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/12835477027157.png",
+ "pinyin": "chengyaojin",
+ "ename": 144,
+ "cname": "程咬金",
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 1,
+ "skin_name": "热烈之斧|爱与正义|星际陆战队|华尔街大亨|功夫厨神"
+ },
+ {
+ "title": "月光之女",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=146&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "146",
+ "appointHeroid": "6",
+ "removeHeroid": "1",
+ "occupation": "战士/法师",
+ "num": "82",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/63581396650488.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/119971138563496.jpg",
+ "pinyin": "luna",
+ "ename": 146,
+ "cname": "露娜",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 2,
+ "skin_name": "月光之女|哥特玫瑰|绯红之刃|紫霞仙子|一生所爱"
+ },
+ {
+ "title": "太古魔导",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=148&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "148",
+ "appointHeroid": "12",
+ "removeHeroid": "1",
+ "occupation": "法师/辅助",
+ "num": "81",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/107021158349230.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/21386894863581.png",
+ "pinyin": "jiangziya",
+ "ename": 148,
+ "cname": "姜子牙",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "太古魔导|时尚教父"
+ },
+ {
+ "title": "双面君主",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=149&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "149",
+ "appointHeroid": "49",
+ "removeHeroid": "1",
+ "occupation": "坦克",
+ "num": "80",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/71567211286504.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190627/1611520684982.jpg",
+ "pinyin": "liubang",
+ "ename": 149,
+ "cname": "刘邦",
+ "new_type": 0,
+ "hero_type": 3,
+ "skin_name": "双面君主|圣殿之光|德古拉伯爵"
+ },
+ {
+ "title": "国士无双",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=150&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "150",
+ "appointHeroid": "23",
+ "removeHeroid": "1",
+ "occupation": "刺客",
+ "num": "79",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/26620610693151.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/558661233757564.png",
+ "pinyin": "hanxin",
+ "ename": 150,
+ "cname": "韩信",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "国士无双|街头霸王|教廷特使|白龙吟|逐梦之影"
+ },
+ {
+ "title": "冰雪之华",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=152&ADTAG=pvp.storyweb",
+ "camptype": "2",
+ "heroid": "152",
+ "appointHeroid": "31",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "78",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/605981185208690.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/28141313400127.jpg",
+ "pinyin": "wangzhaojun",
+ "ename": 152,
+ "cname": "王昭君",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "冰雪之华|精灵公主|偶像歌手|凤凰于飞|幻想奇妙夜"
+ },
+ {
+ "title": "暗影刀锋",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=153&ADTAG=pvp.storyweb",
+ "camptype": "9",
+ "heroid": "153",
+ "appointHeroid": "44",
+ "removeHeroid": "0",
+ "occupation": "刺客",
+ "num": "77",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210114/34030207140278.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210114/9912813909230.jpg",
+ "pinyin": "lanlingwang",
+ "ename": 153,
+ "cname": "兰陵王",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "暗影刀锋|隐刃|暗隐猎兽者"
+ },
+ {
+ "title": "传说之刃",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=154&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "154",
+ "appointHeroid": "40",
+ "removeHeroid": "2",
+ "occupation": "战士/刺客",
+ "num": "76",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/3685977620263.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170308/34782968648244.jpg",
+ "pinyin": "huamulan",
+ "ename": 154,
+ "cname": "花木兰",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 4,
+ "skin_name": "传说之刃|剑舞者|兔女郎|水晶猎龙者|青春决赛季|冠军飞将|瑞麟志"
+ },
+ {
+ "title": "言灵之书",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=156&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "156",
+ "appointHeroid": "17",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "75",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/2248336605405.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/55913224991097.jpg",
+ "pinyin": "zhangliang",
+ "ename": 156,
+ "cname": "张良",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "言灵之书|天堂福音|一千零一夜|幽兰居士"
+ },
+ {
+ "title": "明媚烈焰",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=157&ADTAG=pvp.storyweb",
+ "camptype": "8",
+ "heroid": "157",
+ "appointHeroid": "50",
+ "removeHeroid": "",
+ "occupation": "法师/刺客",
+ "num": "74",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/579210012886.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/63399584503206.png",
+ "pinyin": "buzhihuowu",
+ "ename": 157,
+ "cname": "不知火舞",
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 4,
+ "skin_name": "明媚烈焰"
+ },
+ {
+ "title": "鹰之守护",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=162&ADTAG=pvp.storyweb",
+ "camptype": "8",
+ "heroid": "162",
+ "appointHeroid": "45",
+ "removeHeroid": "",
+ "occupation": "刺客",
+ "num": "73",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/548681020090103.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/31519374723603.png",
+ "pinyin": "nakelulu",
+ "ename": 162,
+ "cname": "娜可露露",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "鹰之守护"
+ },
+ {
+ "title": "神梦一刀",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=163&ADTAG=pvp.storyweb",
+ "camptype": "8",
+ "heroid": "163",
+ "appointHeroid": "57",
+ "removeHeroid": "",
+ "occupation": "刺客/战士",
+ "num": "58",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/58109651771952.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160830/20769120063270.jpg",
+ "pinyin": "juyoujing",
+ "ename": 163,
+ "cname": "橘右京",
+ "new_type": 0,
+ "hero_type": 4,
+ "hero_type2": 1,
+ "skin_name": "神梦一刀"
+ },
+ {
+ "title": "圣骑之力",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=166&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "166",
+ "appointHeroid": "24",
+ "removeHeroid": "0",
+ "occupation": "战士/坦克",
+ "num": "72",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/45701468188203.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190116/93251107128088.jpg",
+ "pinyin": "yase",
+ "ename": 166,
+ "cname": "亚瑟",
+ "pay_type": 11,
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "圣骑之力|死亡骑士|狮心王|心灵战警"
+ },
+ {
+ "title": "齐天大圣",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=167&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "167",
+ "appointHeroid": "36",
+ "removeHeroid": "2",
+ "occupation": "刺客/战士",
+ "num": "71",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/46014866033037.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/37425581339924.png",
+ "pinyin": "sunwukong",
+ "ename": 167,
+ "cname": "孙悟空",
+ "new_type": 0,
+ "hero_type": 4,
+ "hero_type2": 1,
+ "skin_name": "齐天大圣|地狱火|西部大镖客|美猴王|至尊宝|全息碎影|大圣娶亲"
+ },
+ {
+ "title": "精英酋长",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=168&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "168",
+ "appointHeroid": "35",
+ "removeHeroid": "2",
+ "occupation": "辅助/坦克",
+ "num": "70",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/775111569812043.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/873611252975639.png",
+ "pinyin": "niumo",
+ "ename": 168,
+ "cname": "牛魔",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "精英酋长|西部大镖客|制霸全明星"
+ },
+ {
+ "title": "半神之弓",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=169&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "169",
+ "appointHeroid": "41",
+ "removeHeroid": "2",
+ "occupation": "射手",
+ "num": "69",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/64275801657630.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/7521729121819.jpg",
+ "pinyin": "houyi",
+ "ename": 169,
+ "cname": "后羿",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "半神之弓|精灵王|阿尔法小队|辉光之辰|黄金射手座"
+ },
+ {
+ "title": "仁德义枪",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=170&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "170",
+ "appointHeroid": "43",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "68",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/980091411957883.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/16495784782816.png",
+ "pinyin": "liubei",
+ "ename": 170,
+ "cname": "刘备",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "仁德义枪|万事如意|纽约教父|汉昭烈帝"
+ },
+ {
+ "title": "禁血狂兽",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=171&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "171",
+ "appointHeroid": "42",
+ "removeHeroid": "0",
+ "occupation": "辅助/坦克",
+ "num": "67",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/184661526306200.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/941221097359270.png",
+ "pinyin": "zhangfei",
+ "ename": 171,
+ "cname": "张飞",
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 6,
+ "skin_name": "禁血狂兽|五福同心|乱世虎臣"
+ },
+ {
+ "title": "王都密探",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=173&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "173",
+ "appointHeroid": "48",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "66",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/536601401910051.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181025/289431194455887.jpg",
+ "pinyin": "liyuanfang",
+ "ename": 173,
+ "cname": "李元芳",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "王都密探|特种部队|黑猫爱糖果|逐浪之夏"
+ },
+ {
+ "title": "森之风灵",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=174&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "174",
+ "appointHeroid": "51",
+ "removeHeroid": "2",
+ "occupation": "射手",
+ "num": "64",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/85572974862749.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180327/75023658143716.jpg",
+ "pinyin": "yuji",
+ "ename": 174,
+ "cname": "虞姬",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "森之风灵|加勒比小姐|霸王别姬|凯尔特女王"
+ },
+ {
+ "title": "虚灵城判",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=175&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "175",
+ "appointHeroid": "47",
+ "removeHeroid": "0",
+ "occupation": "法师/战士",
+ "num": "65",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/203361241905570.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180122/79835640494001.jpg",
+ "pinyin": "zhongkui",
+ "ename": 175,
+ "cname": "钟馗",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 2,
+ "skin_name": "虚灵城判|地府判官"
+ },
+ {
+ "title": "苍狼末裔",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=177&ADTAG=pvp.storyweb",
+ "camptype": "2",
+ "heroid": "177",
+ "appointHeroid": "58",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "57",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/669879518974.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160918/21931014171659.jpg",
+ "pinyin": "chengjisihan",
+ "ename": 177,
+ "cname": "成吉思汗",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "苍狼末裔|维京掠夺者"
+ },
+ {
+ "title": "根源之目",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=178&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "178",
+ "appointHeroid": "59",
+ "removeHeroid": "1",
+ "occupation": "战士",
+ "num": "56",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/365511150355588.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20161008/81211237899931.jpg",
+ "pinyin": "yangjian",
+ "ename": 178,
+ "cname": "杨戬",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "根源之目|埃及法老|永曜之星"
+ },
+ {
+ "title": "圣域余晖",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=183&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "183",
+ "appointHeroid": "55",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "60",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/44483332637077.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190524/64614584030878.jpg",
+ "pinyin": "yadianna",
+ "ename": 183,
+ "cname": "雅典娜",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "圣域余晖|战争女神|冰冠公主|神奇女侠"
+ },
+ {
+ "title": "天籁弦音",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=184&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "184",
+ "appointHeroid": "53",
+ "removeHeroid": "2",
+ "occupation": "辅助",
+ "num": "63",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/9456290393768.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20160726/8277177112204.png",
+ "pinyin": "caiwenji",
+ "ename": 184,
+ "cname": "蔡文姬",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "天籁弦音|蔷薇王座|舞动绿茵|奇迹圣诞"
+ },
+ {
+ "title": "炼金大师",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=186&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "186",
+ "appointHeroid": "60",
+ "removeHeroid": "1",
+ "occupation": "辅助/坦克",
+ "num": "54",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/524241070493059.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20161124/29648640143170.jpg",
+ "pinyin": "taiyizhenren",
+ "ename": 186,
+ "cname": "太乙真人",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "炼金大师|圆桌骑士|饕餮|华丽摇滚"
+ },
+ {
+ "title": "桀骜炎枪",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=180&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "180",
+ "appointHeroid": "61",
+ "removeHeroid": "1",
+ "occupation": "战士",
+ "num": "53",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/652021297028542.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170104/952661342083635.jpg",
+ "pinyin": "nezha",
+ "ename": 180,
+ "cname": "哪吒",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "桀骜炎枪|三太子|逐梦之翼"
+ },
+ {
+ "title": "绝代智谋",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=190&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "190",
+ "appointHeroid": "62",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "51",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/29138566540861.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170118/48646263962066.jpg",
+ "pinyin": "zhugeliang",
+ "ename": 190,
+ "cname": "诸葛亮",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "绝代智谋|星航指挥官|黄金分割率|武陵仙君|掌控之力"
+ },
+ {
+ "title": "燃魂重炮",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=192&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "192",
+ "appointHeroid": "63",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "50",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/85062883647203.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170203/81719401485448.jpg",
+ "pinyin": "huangzhong",
+ "ename": 192,
+ "cname": "黄忠",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "燃魂重炮|芝加哥教父"
+ },
+ {
+ "title": "沧海之曜",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=191&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "191",
+ "appointHeroid": "64",
+ "removeHeroid": "1",
+ "occupation": "辅助",
+ "num": "49",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/39697765755935.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170217/62422276203551.jpg",
+ "pinyin": "daqiao",
+ "ename": 191,
+ "cname": "大乔",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "沧海之曜|伊势巫女|守护之力|猫狗日记"
+ },
+ {
+ "title": "噬灭日蚀",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=187&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "187",
+ "appointHeroid": "65",
+ "removeHeroid": "0",
+ "occupation": "辅助/坦克",
+ "num": "48",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/33388656891546.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170317/94767842334793.jpg",
+ "pinyin": "donghuangtaiyi",
+ "ename": 187,
+ "cname": "东皇太一",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "噬灭日蚀|东海龙王|逐梦之光"
+ },
+ {
+ "title": "淬命双剑",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=182&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "182",
+ "appointHeroid": "66",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "45",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/42817207621092.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170524/87618567096649.jpg",
+ "pinyin": "ganjiangmoye",
+ "ename": 182,
+ "cname": "干将莫邪",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "淬命双剑|第七人偶|冰霜恋舞曲"
+ },
+ {
+ "title": "万物有灵",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=189&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "189",
+ "appointHeroid": "67",
+ "removeHeroid": "0",
+ "occupation": "辅助",
+ "num": "44",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/88527151660191.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170621/886741128494673.jpg",
+ "pinyin": "guiguzi",
+ "ename": 189,
+ "cname": "鬼谷子",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "万物有灵|阿摩司公爵|幻乐之宴"
+ },
+ {
+ "title": "破灭刃锋",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=193&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "193",
+ "appointHeroid": "68",
+ "removeHeroid": "2",
+ "occupation": "战士/坦克",
+ "num": "43",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/40660475542197.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170703/82350987230843.jpg",
+ "pinyin": "kai",
+ "ename": 193,
+ "cname": "铠",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "破灭刃锋|龙域领主|曙光守护者|青龙志"
+ },
+ {
+ "title": "静谧之眼",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=196&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "196",
+ "appointHeroid": "69",
+ "removeHeroid": "2",
+ "occupation": "射手",
+ "num": "42",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/973981525713211.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170728/457611237008978.jpg",
+ "pinyin": "bailishouyue",
+ "ename": 196,
+ "cname": "百里守约",
+ "new_type": 0,
+ "hero_type": 5,
+ "hero_type2": 4,
+ "skin_name": "静谧之眼|绝影神枪|特工魅影|朱雀志"
+ },
+ {
+ "title": "嚣狂之镰",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=195&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "195",
+ "appointHeroid": "70",
+ "removeHeroid": "2",
+ "occupation": "刺客",
+ "num": "41",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/70144136701374.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170817/84625581125048.jpg",
+ "pinyin": "bailixuance",
+ "ename": 195,
+ "cname": "百里玄策",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "嚣狂之镰|威尼斯狂欢|白虎志"
+ },
+ {
+ "title": "不屈铁壁",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=194&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "194",
+ "appointHeroid": "71",
+ "removeHeroid": "2",
+ "occupation": "坦克/战士",
+ "num": "40",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/75102223449716.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20170921/73767796416726.jpg",
+ "pinyin": "sulie",
+ "ename": 194,
+ "cname": "苏烈",
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 1,
+ "skin_name": "不屈铁壁|爱与和平|坚韧之力|玄武志"
+ },
+ {
+ "title": "入梦之灵",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=198&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "198",
+ "appointHeroid": "72",
+ "removeHeroid": "1",
+ "occupation": "战士/坦克",
+ "num": "39",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210510/88228768602449.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210510/23016587216986.jpg",
+ "pinyin": "mengqi",
+ "ename": 198,
+ "cname": "梦奇",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "入梦之灵|美梦成真|胖达荣荣"
+ },
+ {
+ "title": "至高创世",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=179&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "179",
+ "appointHeroid": "73",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "38",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/957611093104192.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20171116/969111664137.jpg",
+ "pinyin": "nvwa",
+ "ename": 179,
+ "cname": "女娲",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "至高创世|尼罗河女神"
+ },
+ {
+ "title": "灵魂劫卜",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=501&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "501",
+ "appointHeroid": "74",
+ "removeHeroid": "1",
+ "occupation": "辅助",
+ "num": "37",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/950592351878.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20171204/28305587201309.jpg",
+ "pinyin": "mingshiyin",
+ "ename": 501,
+ "cname": "明世隐",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "灵魂劫卜|占星术士|虹云星官"
+ },
+ {
+ "title": "幻舞玲珑",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=199&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "199",
+ "appointHeroid": "75",
+ "removeHeroid": "1",
+ "occupation": "射手",
+ "num": "36",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/85961165268981.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180117/403241369215383.jpg",
+ "pinyin": "gongsunli",
+ "ename": 199,
+ "cname": "公孙离",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "幻舞玲珑|花间舞|蜜橘之夏"
+ },
+ {
+ "title": "霓裳风华",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=176&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "176",
+ "appointHeroid": "76",
+ "removeHeroid": "1",
+ "occupation": "法师/辅助",
+ "num": "35",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/316771484611139.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180205/26781833129059.jpg",
+ "pinyin": "yangyuhuan",
+ "ename": 176,
+ "cname": "杨玉环",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "风华霓裳|霓裳曲|遇见飞天"
+ },
+ {
+ "title": "六合虎拳",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=502&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "502",
+ "appointHeroid": "77",
+ "removeHeroid": "1",
+ "occupation": "刺客/战士",
+ "num": "26",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/69916960929378.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180208/24328465009145.jpg",
+ "pinyin": "peiqinhu",
+ "ename": 502,
+ "cname": "裴擒虎",
+ "new_type": 0,
+ "hero_type": 4,
+ "hero_type2": 1,
+ "skin_name": "六合虎拳|街头霸王|梅西"
+ },
+ {
+ "title": "天元之弈",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=197&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "197",
+ "appointHeroid": "78",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "34",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210922/84992915823949.png",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210922/47732222929767.png",
+ "pinyin": "yixing",
+ "ename": 197,
+ "cname": "弈星",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "天元之弈|踏雪寻梅"
+ },
+ {
+ "title": "战车意志",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=503&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "503",
+ "appointHeroid": "79",
+ "removeHeroid": "1",
+ "occupation": "战士",
+ "num": "33",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/7239917087550.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180412/546911293826154.jpg",
+ "pinyin": "kuangtie",
+ "ename": 503,
+ "cname": "狂铁",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "战车意志|命运角斗场|御狮"
+ },
+ {
+ "title": "筑城者",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=504&ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "504",
+ "appointHeroid": "80",
+ "removeHeroid": "1",
+ "occupation": "法师",
+ "num": "32",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/46616375519675.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180510/96802286473688.jpg",
+ "pinyin": "milaidi",
+ "ename": 504,
+ "cname": "米莱狄",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "筑城者|精准探案法|御霄"
+ },
+ {
+ "title": "无间傀儡",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=125&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "125",
+ "appointHeroid": "81",
+ "removeHeroid": "0",
+ "occupation": "刺客",
+ "num": "31",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/227131284204645.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180628/795971480753540.jpg",
+ "pinyin": "yuange",
+ "ename": 125,
+ "cname": "元歌",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "无间傀儡|午夜歌剧院"
+ },
+ {
+ "title": "光明之海",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=510&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "510",
+ "appointHeroid": "82",
+ "removeHeroid": "1",
+ "occupation": "战士/坦克",
+ "num": "30",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/67846590935414.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180717/10339910137309.jpg",
+ "pinyin": "sunce",
+ "ename": 510,
+ "cname": "孙策",
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 1,
+ "skin_name": "光明之海|海之征途|猫狗日记"
+ },
+ {
+ "title": "寂灭之心",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=137&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "137",
+ "appointHeroid": "83",
+ "removeHeroid": "2",
+ "occupation": "刺客/法师",
+ "num": "29",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/332921188655301.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180816/813571069462033.jpg",
+ "pinyin": "simayi",
+ "ename": 137,
+ "cname": "司马懿",
+ "new_type": 0,
+ "hero_type": 4,
+ "hero_type2": 2,
+ "skin_name": "寂灭之心|魇语军师"
+ },
+ {
+ "title": "无尽之盾",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=509&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "509",
+ "appointHeroid": "84",
+ "removeHeroid": "2",
+ "occupation": "辅助/坦克",
+ "num": "28",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/953261427583808.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180904/71811613439812.jpg",
+ "pinyin": "dunshan",
+ "ename": 509,
+ "cname": "盾山",
+ "new_type": 0,
+ "hero_type": 6,
+ "hero_type2": 3,
+ "skin_name": "无尽之盾|极冰防御线"
+ },
+ {
+ "title": "破魔之箭",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=508&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "508",
+ "appointHeroid": "85",
+ "removeHeroid": "2",
+ "occupation": "射手",
+ "num": "27",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/15595309331581.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20180921/75205278535459.jpg",
+ "pinyin": "jialuo",
+ "ename": 508,
+ "cname": "伽罗",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "破魔之箭|花见巫女"
+ },
+ {
+ "title": "爆弹怪猫",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=312&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "312",
+ "appointHeroid": "86",
+ "removeHeroid": "2",
+ "occupation": "法师",
+ "num": "25",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/293661177557011.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181019/13265340386756.jpg",
+ "pinyin": "shenmengxi",
+ "ename": 312,
+ "cname": "沈梦溪",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "爆弹怪猫|棒球奇才"
+ },
+ {
+ "title": "谋世之战",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=507&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "507",
+ "appointHeroid": "87",
+ "removeHeroid": "2",
+ "occupation": "战士",
+ "num": "24",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/45330314537943.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181120/7804990460330.jpg",
+ "pinyin": "lixin",
+ "ename": 507,
+ "cname": "李信",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "谋世之战|灼热之刃"
+ },
+ {
+ "title": "惊鸿之笔",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=513&ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "513",
+ "appointHeroid": "88",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "23",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/218171149641279.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20181211/715691338489128.jpg",
+ "pinyin": "shangguanwaner",
+ "ename": 513,
+ "cname": "上官婉儿",
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 4,
+ "skin_name": "惊鸿之笔|修竹墨客"
+ },
+ {
+ "title": "寒月公主",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=515&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "515",
+ "appointHeroid": "89",
+ "removeHeroid": "2",
+ "occupation": "法师/坦克",
+ "num": "22",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/353911202229544.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190111/868981192916415.jpg",
+ "pinyin": "change",
+ "ename": 515,
+ "cname": "嫦娥",
+ "new_type": 0,
+ "hero_type": 2,
+ "hero_type2": 3,
+ "skin_name": "寒月公主|露花倒影"
+ },
+ {
+ "title": "无忧猛士",
+ "infourl": "//pvp.qq.com/act/a20180905herostory/index.html?id=511&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "511",
+ "appointHeroid": "90",
+ "removeHeroid": "2",
+ "occupation": "坦克",
+ "num": "21",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/99063960055644.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190121/59935186584184.jpg",
+ "pinyin": "zhubajie",
+ "ename": 511,
+ "cname": "猪八戒",
+ "new_type": 0,
+ "hero_type": 3,
+ "skin_name": "无忧猛士|年年有余"
+ },
+ {
+ "title": "破晓之神",
+ "infourl": "https://pvp.qq.com/act/a20180905herostory/index.html?id=529&ADTAG=pvp.storyweb",
+ "camptype": "0",
+ "heroid": "529",
+ "appointHeroid": "91",
+ "removeHeroid": "1",
+ "occupation": "战士",
+ "num": "20",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/19615858476334.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190218/16716956397489.jpg",
+ "pinyin": "pangu",
+ "ename": 529,
+ "cname": "盘古",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "破晓之神"
+ },
+ {
+ "title": "鹿灵守心",
+ "infourl": "https://pvp.qq.com/act/a20180905herostory/index.html?id=505&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "505",
+ "appointHeroid": "92",
+ "removeHeroid": "0",
+ "occupation": "辅助",
+ "num": "19",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/757821175652297.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190415/22946736869045.jpg",
+ "pinyin": "yao",
+ "ename": 505,
+ "cname": "瑶",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "森"
+ },
+ {
+ "title": "流云之翼",
+ "infourl": "https://pvp.qq.com/act/a20180905herostory/index.html?id=506&ADTAG=pvp.storyweb",
+ "camptype": "3",
+ "heroid": "506",
+ "appointHeroid": "93",
+ "removeHeroid": "0",
+ "occupation": "刺客/战士",
+ "num": "18",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/86214230515643.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190510/38160378200548.jpg",
+ "pinyin": "yunzhongjun",
+ "ename": 506,
+ "cname": "云中君",
+ "pay_type": 10,
+ "new_type": 0,
+ "hero_type": 4,
+ "hero_type2": 1,
+ "skin_name": "荷鲁斯之眼"
+ },
+ {
+ "title": "星辰之子",
+ "infourl": "https://pvp.qq.com/act/a20180905herostory/index.html?id=522&ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "522",
+ "appointHeroid": "94",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "17",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/770901264838612.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190625/86727196039895.jpg",
+ "pinyin": "yao",
+ "ename": 522,
+ "cname": "曜",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "归虚梦演"
+ },
+ {
+ "title": "冷晖之枪",
+ "infourl": "https://pvp.qq.com/act/a20180905herostory/index.html?id=518&ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "518",
+ "appointHeroid": "95",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "15",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/33883177785525.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190813/47880503928005.jpg",
+ "pinyin": "machao",
+ "ename": 518,
+ "cname": "马超",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 4,
+ "skin_name": "冷晖之枪|幸存者|神威"
+ },
+ {
+ "title": "幻纱之灵",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/523?ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "523",
+ "appointHeroid": "95",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "13",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191010/87864951621394.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20190920/52701914999686.jpg",
+ "pinyin": "xishi",
+ "ename": 523,
+ "cname": "西施",
+ "new_type": 0,
+ "hero_type": 2,
+ "skin_name": "幻纱之灵|归虚梦演"
+ },
+ {
+ "title": "神匠",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/525?ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "525",
+ "appointHeroid": "96",
+ "removeHeroid": "0",
+ "occupation": "辅助",
+ "num": "12",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191126/72226651341391.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20191126/57064767888562.jpg",
+ "pinyin": "luban",
+ "ename": 525,
+ "cname": "鲁班大师",
+ "new_type": 0,
+ "hero_type": 6,
+ "skin_name": "神匠|归虚梦演"
+ },
+ {
+ "title": "烈炮小子",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/524?ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "524",
+ "appointHeroid": "97",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "11",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200109/645021221580209.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200109/769101262329107.jpg",
+ "pinyin": "mengya",
+ "ename": 524,
+ "cname": "蒙犽",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "烈炮小子|归虚梦演"
+ },
+ {
+ "title": "破镜之刃",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/531?ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "531",
+ "appointHeroid": "98",
+ "removeHeroid": "1",
+ "occupation": "刺客",
+ "num": "9",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200327/25718162647590.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200327/396541250647794.jpg",
+ "pinyin": "jing",
+ "ename": 531,
+ "cname": "镜",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "破镜之刃|冰刃幻境"
+ },
+ {
+ "title": "秩序统将",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/527?ADTAG=pvp.storyweb",
+ "camptype": "1",
+ "heroid": "527",
+ "appointHeroid": "99",
+ "removeHeroid": "1",
+ "occupation": "战士/坦克",
+ "num": "8",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200601/79145982836583.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200601/97479618556133.jpg",
+ "pinyin": "mengtian",
+ "ename": 527,
+ "cname": "蒙恬",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 3,
+ "skin_name": "秩序统将|秩序猎龙将"
+ },
+ {
+ "title": "山林之子",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/533?ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "533",
+ "appointHeroid": "100",
+ "removeHeroid": "0",
+ "occupation": "坦克/辅助",
+ "num": "7",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200730/908422776017.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200730/2465499023977.jpg",
+ "pinyin": "aguduo",
+ "ename": 533,
+ "cname": "阿古朵",
+ "new_type": 0,
+ "hero_type": 3,
+ "hero_type2": 6,
+ "skin_name": "山林之子"
+ },
+ {
+ "title": "玫瑰剑士",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/536?ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "536",
+ "appointHeroid": "101",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "6",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200921/27859854994324.png",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20200921/438831094577151.png",
+ "pinyin": "xialuote",
+ "ename": 536,
+ "cname": "夏洛特",
+ "new_type": 0,
+ "hero_type": 1,
+ "skin_name": "玫瑰剑士"
+ },
+ {
+ "title": "鲨之猎刃",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/528?ADTAG=pvp.storyweb",
+ "camptype": "4",
+ "heroid": "528",
+ "appointHeroid": "102",
+ "removeHeroid": "1",
+ "occupation": "刺客",
+ "num": "5",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20201208/35161952266060.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20201208/644721207778332.jpg",
+ "pinyin": "lan",
+ "ename": 528,
+ "cname": "澜",
+ "new_type": 0,
+ "hero_type": 4,
+ "skin_name": "鲨之猎刃|孤猎"
+ },
+ {
+ "title": "雷霆之王",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/537?ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "537",
+ "appointHeroid": "103",
+ "removeHeroid": "0",
+ "occupation": "战士/法师",
+ "num": "4",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210112/85473239526448.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210112/98246362641488.jpg",
+ "pinyin": "sikongzhen",
+ "ename": 537,
+ "cname": "司空震",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 2,
+ "skin_name": "雷霆之王|启蛰"
+ },
+ {
+ "title": "精灵之舞",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/155?ADTAG=pvp.storyweb",
+ "camptype": "6",
+ "heroid": "155",
+ "appointHeroid": "104",
+ "removeHeroid": "0",
+ "occupation": "射手",
+ "num": "3",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210407/384301448271504.png",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210407/571741466946835.png",
+ "pinyin": "ailin",
+ "ename": 155,
+ "cname": "艾琳",
+ "new_type": 0,
+ "hero_type": 5,
+ "skin_name": "精灵之舞|女武神"
+ },
+ {
+ "title": "燎原之心",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/538?ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "538",
+ "appointHeroid": "105",
+ "removeHeroid": "0",
+ "occupation": "战士",
+ "num": "2",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210621/45838846827439.jpg",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20210621/23553953591021.jpg",
+ "pinyin": "yunying",
+ "ename": 538,
+ "cname": "云缨",
+ "new_type": 0,
+ "hero_type": 1,
+ "hero_type2": 4,
+ "skin_name": "燎原之心|赤焰之缨"
+ },
+ {
+ "title": "渡世行者",
+ "infourl": "https://pvp.qq.com/story201904/index.html#/heroDetail/index/540?ADTAG=pvp.storyweb",
+ "camptype": "7",
+ "heroid": "540",
+ "appointHeroid": "106",
+ "removeHeroid": "0",
+ "occupation": "法师",
+ "num": "1",
+ "heroimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20211116/10927593674507.png",
+ "faceimg": "//ossweb-img.qq.com/upload/webplat/info/yxzj/20211115/730421262848940.png",
+ "pinyin": "jinchan",
+ "ename": 540,
+ "cname": "金蝉",
+ "new_type": 1,
+ "hero_type": 2,
+ "hero_type2": 6,
+ "skin_name": "渡世行者|前尘"
+ }
+]
diff --git a/mocks/demo/hero/_lolHeroList.json b/mocks/demo/hero/_lolHeroList.json
new file mode 100644
index 0000000..8806da5
--- /dev/null
+++ b/mocks/demo/hero/_lolHeroList.json
@@ -0,0 +1,7380 @@
+[
+ {
+ "heroId": "1",
+ "name": "黑暗之女",
+ "alias": "Annie",
+ "title": "安妮",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "3",
+ "magic": "10",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/1.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/1.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "安妮,黑暗之女,火女,Annie,anni,heianzhinv,huonv,an,hazn,hn",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/1000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Annie.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big1013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/1013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/1000.jpg"
+ },
+ {
+ "heroId": "2",
+ "name": "狂战士",
+ "alias": "Olaf",
+ "title": "奥拉夫",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/2.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/2.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "1500",
+ "camp": "",
+ "campId": "",
+ "keywords": "狂战士,奥拉夫,kzs,alf,Olaf,kuangzhanshi,aolafu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/2000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Olaf.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big2016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/2016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/2000.jpg"
+ },
+ {
+ "heroId": "3",
+ "name": "正义巨像",
+ "alias": "Galio",
+ "title": "加里奥",
+ "roles": ["tank", "mage"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "10",
+ "magic": "6",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/3.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/3.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "正义巨像,加里奥,Galio,jla,zyjx,zhengyijuxiang,jialiao",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/3000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Galio.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big3013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/3013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/3000.jpg"
+ },
+ {
+ "heroId": "4",
+ "name": "卡牌大师",
+ "alias": "TwistedFate",
+ "title": "崔斯特",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "2",
+ "magic": "6",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/4.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/4.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "卡牌大师,崔斯特,卡牌,TwistedFate,kp,cst,kpds,kapaidashi,cuisite,kapai",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/4000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/TwistedFate.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big4013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/4013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/4000.jpg"
+ },
+ {
+ "heroId": "5",
+ "name": "德邦总管",
+ "alias": "XinZhao",
+ "title": "赵信",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "6",
+ "magic": "3",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/5.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/5.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "德邦总管,德邦,赵信,XinZhao,db,dbzg,zx,debangzongguan,debang,zhaoxin",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/5000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/XinZhao.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big5013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/5017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/5000.jpg"
+ },
+ {
+ "heroId": "6",
+ "name": "无畏战车",
+ "alias": "Urgot",
+ "title": "厄加特",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/6.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/6.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "1350",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "无畏战车,厄加特,ejt,wwzc,Urgot,wuweizhanche,ejiate",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/6000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Urgot.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big6015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/6015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/6000.jpg"
+ },
+ {
+ "heroId": "7",
+ "name": "诡术妖姬",
+ "alias": "Leblanc",
+ "title": "乐芙兰",
+ "roles": ["assassin", "mage"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "4",
+ "magic": "10",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/7.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/7.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "诡术妖姬,妖姬,乐芙兰,Leblanc,lfl,yj,gsyj,guishuyaoji,yaoji,lefulan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/7000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Leblanc.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big7012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/7012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/7000.jpg"
+ },
+ {
+ "heroId": "8",
+ "name": "猩红收割者",
+ "alias": "Vladimir",
+ "title": "弗拉基米尔",
+ "roles": ["mage"],
+ "isWeekFree": "1",
+ "attack": "2",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/8.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/8.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "猩红收割者,吸血鬼,弗拉基米尔,fljme,xxg,xhsgz,Vladimir,xinghongshougezhe,xixiegui,fulajimier",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/8000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Vladimir.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big8014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/8014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/8000.jpg"
+ },
+ {
+ "heroId": "9",
+ "name": "远古恐惧",
+ "alias": "FiddleSticks",
+ "title": "费德提克",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "3",
+ "magic": "9",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/9.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/9.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "远古恐惧,费德提克,稻草人,FiddleSticks,yuangukongju,feidetike,daocaoren,dcr,fdtk,ygkj",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/9000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/FiddleSticks.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big9009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/9009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/9000.jpg"
+ },
+ {
+ "heroId": "10",
+ "name": "正义天使",
+ "alias": "Kayle",
+ "title": "凯尔",
+ "roles": ["fighter", "support"],
+ "isWeekFree": "1",
+ "attack": "6",
+ "defense": "6",
+ "magic": "7",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/10.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/10.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "正义天使,凯尔,天使,ts,zyts,ke,Kayle,zhengyitianshi,kaier,tianshi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/10000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kayle.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big10009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/10015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/10000.jpg"
+ },
+ {
+ "heroId": "11",
+ "name": "无极剑圣",
+ "alias": "MasterYi",
+ "title": "易",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "4",
+ "magic": "2",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/11.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/11.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "无极剑圣,易,剑圣,js,y,wjjs,MasterYi,wujijiansheng,yi,jiansheng",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/11000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/MasterYi.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big11017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/11017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/11000.jpg"
+ },
+ {
+ "heroId": "12",
+ "name": "牛头酋长",
+ "alias": "Alistar",
+ "title": "阿利斯塔",
+ "roles": ["tank", "support"],
+ "isWeekFree": "1",
+ "attack": "6",
+ "defense": "9",
+ "magic": "5",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/12.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/12.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "阿利斯塔,牛头,牛头酋长,酋长,alisita,niutou,niutouqiuzhang,qiuzhang,Alistar,alst,nt,ntqz,qz",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/12000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Alistar.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big12010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/12017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/12000.jpg"
+ },
+ {
+ "heroId": "13",
+ "name": "符文法师",
+ "alias": "Ryze",
+ "title": "瑞兹",
+ "roles": ["mage", "fighter"],
+ "isWeekFree": "1",
+ "attack": "2",
+ "defense": "2",
+ "magic": "10",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/13.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/13.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "1",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "符文法师,瑞兹,Ryze,光头,rz,fwfs,gt,fuwenfashi,ruizi,guangtou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/13000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ryze.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big13011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/13013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/13000.jpg"
+ },
+ {
+ "heroId": "14",
+ "name": "亡灵战神",
+ "alias": "Sion",
+ "title": "赛恩",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "1",
+ "attack": "5",
+ "defense": "9",
+ "magic": "3",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/14.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/14.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "亡灵战神,塞恩,赛恩,se,wlzs,Sion,wanglingzhanshen,saien",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/14000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sion.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big14014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/14014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/14000.jpg"
+ },
+ {
+ "heroId": "15",
+ "name": "战争女神",
+ "alias": "Sivir",
+ "title": "希维尔",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "3",
+ "magic": "1",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/15.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/15.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "战争女神,轮子妈,希维尔,lzm,xwe,zzns,Sivir,zhanzhengnvshen,lunzima,xiweier",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/15000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sivir.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big15016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/15016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/15000.jpg"
+ },
+ {
+ "heroId": "16",
+ "name": "众星之子",
+ "alias": "Soraka",
+ "title": "索拉卡",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/16.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/16.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "众星之子,索拉卡,星妈,奶妈,xm,nm,slk,zxzz,Soraka,zhongxingzhizi,suolaka,xingma,naima",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/16000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Soraka.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big16016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/16017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/16000.jpg"
+ },
+ {
+ "heroId": "17",
+ "name": "迅捷斥候",
+ "alias": "Teemo",
+ "title": "提莫",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "1",
+ "attack": "5",
+ "defense": "3",
+ "magic": "7",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/17.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/17.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "1",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "迅捷斥候,提莫,timo,Teemo,tm,xjch,xunjiechihou,timo",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/17000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Teemo.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big17014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/17017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/17000.jpg"
+ },
+ {
+ "heroId": "18",
+ "name": "麦林炮手",
+ "alias": "Tristana",
+ "title": "崔丝塔娜",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "3",
+ "magic": "5",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/18.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/18.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "麦林炮手,小炮,崔丝塔娜,xp,cstn,mlps,Tristana,mailinpaoshou,xiaopao,cuisitana",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/18000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Tristana.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big18012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/18017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/18000.jpg"
+ },
+ {
+ "heroId": "19",
+ "name": "祖安怒兽",
+ "alias": "Warwick",
+ "title": "沃里克",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/19.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/19.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "祖安怒兽,沃里克,狼人,lr,wlk,zans,Warwick,zuannushou,wolike,langren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/19000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Warwick.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big19016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/19016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/19000.jpg"
+ },
+ {
+ "heroId": "20",
+ "name": "雪原双子",
+ "alias": "Nunu",
+ "title": "努努和威朗普",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "6",
+ "magic": "7",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/20.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/20.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "雪原双子,努努和威朗普,努努,雪人,Nunu,nn,xr,xysz,mmhwlp,xueyuanshuangzi,nunuheweilangpu,nunu,xueren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/20000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nunu.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big20016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/20016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/20000.jpg"
+ },
+ {
+ "heroId": "21",
+ "name": "赏金猎人",
+ "alias": "MissFortune",
+ "title": "厄运小姐",
+ "roles": ["marksman"],
+ "isWeekFree": "1",
+ "attack": "8",
+ "defense": "2",
+ "magic": "5",
+ "difficulty": "1",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/21.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/21.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "赏金猎人,赏金,厄运小姐,MF,MissFortune,sj,sjlr,eyxj,shangjinlieren,shangjin,eyunxiaojie",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/21000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/MissFortune.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big21017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/21017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/21000.jpg"
+ },
+ {
+ "heroId": "22",
+ "name": "寒冰射手",
+ "alias": "Ashe",
+ "title": "艾希",
+ "roles": ["marksman", "support"],
+ "isWeekFree": "1",
+ "attack": "7",
+ "defense": "3",
+ "magic": "2",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/22.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/22.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "1",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "艾希,寒冰,爱射,艾射,冰弓,Ashe,aixi,hanbing,aishe,aishe,binggong,ax,hb,as,bg",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/22000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ashe.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big22017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/22010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/22000.jpg"
+ },
+ {
+ "heroId": "23",
+ "name": "蛮族之王",
+ "alias": "Tryndamere",
+ "title": "泰达米尔",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "5",
+ "magic": "2",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/23.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/23.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "蛮族之王,蛮王,泰达米尔,Tryndamere,tdme,mw,mzzw,manzuzhiwang,manwang,taidamier",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/23000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Tryndamere.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big23010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/23005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/23000.jpg"
+ },
+ {
+ "heroId": "24",
+ "name": "武器大师",
+ "alias": "Jax",
+ "title": "贾克斯",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/24.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/24.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "武器大师,贾克斯,武器,Jax,wq,jks,wqds,wuqidashi,jiakesi,wuqi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/24000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Jax.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big24014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/24013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/24000.jpg"
+ },
+ {
+ "heroId": "25",
+ "name": "堕落天使",
+ "alias": "Morgana",
+ "title": "莫甘娜",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "1",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/25.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/25.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "堕落天使,莫甘娜,MGN,dlts,Morgana,duoluotianshi,moganna",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/25000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Morgana.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big25017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/25017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/25000.jpg"
+ },
+ {
+ "heroId": "26",
+ "name": "时光守护者",
+ "alias": "Zilean",
+ "title": "基兰",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "5",
+ "magic": "8",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/26.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/26.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "时光守护者,基兰,Zilean,jl,sgshz,时光老人,时光老头,shiguangshouhuzhe,jilan,shiguanglaoren,shiguanglaotou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/26000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Zilean.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big26005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/26003.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/26000.jpg"
+ },
+ {
+ "heroId": "27",
+ "name": "炼金术士",
+ "alias": "Singed",
+ "title": "辛吉德",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "8",
+ "magic": "7",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/27.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/27.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "炼金术士,辛吉德,炼金,lj,xjd,ljss,Singed,lianjinshushi,xinjide,lianjin",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/27000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Singed.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big27010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/27009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/27000.jpg"
+ },
+ {
+ "heroId": "28",
+ "name": "痛苦之拥",
+ "alias": "Evelynn",
+ "title": "伊芙琳",
+ "roles": ["assassin", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "2",
+ "magic": "7",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/28.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/28.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "痛苦之拥,伊芙琳,寡妇,Evelynn,tongkuzhiyong,yifulin,guafu,gf,tkzy,yfl",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/28000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Evelynn.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big28015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/28015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/28000.jpg"
+ },
+ {
+ "heroId": "29",
+ "name": "瘟疫之源",
+ "alias": "Twitch",
+ "title": "图奇",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "2",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/29.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/29.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "瘟疫之源,图奇,老鼠,Twitch,ls,tq,wyzy,wenyizhiyuan,tuqi,laoshu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/29000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Twitch.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big29012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/29009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/29000.jpg"
+ },
+ {
+ "heroId": "30",
+ "name": "死亡颂唱者",
+ "alias": "Karthus",
+ "title": "卡尔萨斯",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "2",
+ "magic": "10",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/30.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/30.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "死亡颂唱者,卡尔萨斯,死歌,Karthus,sg,kess,swscz,siwangsongchangzhe,kaersasi,sige",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/30000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Karthus.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big30017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/30017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/30000.jpg"
+ },
+ {
+ "heroId": "31",
+ "name": "虚空恐惧",
+ "alias": "Chogath",
+ "title": "科加斯",
+ "roles": ["tank", "mage"],
+ "isWeekFree": "1",
+ "attack": "3",
+ "defense": "7",
+ "magic": "7",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/31.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/31.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "1500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空恐惧,科加斯,大虫子,虫子,Chogath,xukongkongju,kejiasi,dachongzi,chongzi,xkkj,kjs,dcz,cz",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/31000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Chogath.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big31014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/31010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/31000.jpg"
+ },
+ {
+ "heroId": "32",
+ "name": "殇之木乃伊",
+ "alias": "Amumu",
+ "title": "阿木木",
+ "roles": ["tank", "mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/32.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/32.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "阿木木,木乃伊,分头,殇之木乃伊,木木,伤之木乃伊,amumu,munaiyi,fentou,shangzhimunaiyi,amm,szmny,mny,ft,mm,mumu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/32000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Amumu.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big32017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/32014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/32000.jpg"
+ },
+ {
+ "heroId": "33",
+ "name": "披甲龙龟",
+ "alias": "Rammus",
+ "title": "拉莫斯",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "10",
+ "magic": "5",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/33.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/33.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "披甲龙龟,拉莫斯,龙龟,lg,pjlg,lms,Rammus,pijialonggui,lamosi,longgui",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/33000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Rammus.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big33017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/33015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/33000.jpg"
+ },
+ {
+ "heroId": "34",
+ "name": "冰晶凤凰",
+ "alias": "Anivia",
+ "title": "艾尼维亚",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "4",
+ "magic": "10",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/34.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/34.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "凤凰,冰晶凤凰,艾尼维亚,Anivia,fenghuang,bingjingfenghuang,ainiweiya,anwy,bjfh,fh",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/34000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Anivia.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big34017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/34017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/34000.jpg"
+ },
+ {
+ "heroId": "35",
+ "name": "恶魔小丑",
+ "alias": "Shaco",
+ "title": "萨科",
+ "roles": ["assassin"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "4",
+ "magic": "6",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/35.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/35.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "恶魔小丑,小丑,沙扣,沙口,萨科,xc,emxc,sk,emoxiaochou,xiaochou,sake,Shaco",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/35000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Shaco.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big35015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/35008.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/35000.jpg"
+ },
+ {
+ "heroId": "36",
+ "name": "祖安狂人",
+ "alias": "DrMundo",
+ "title": "蒙多医生",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "7",
+ "magic": "6",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/36.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/36.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "祖安狂人,蒙多医生,蒙多,DrMundo,zuankuangren,mengduoyisheng,mengduo,md,mdys,zakr",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/36000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/DrMundo.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big36009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/36010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/36000.jpg"
+ },
+ {
+ "heroId": "37",
+ "name": "琴瑟仙女",
+ "alias": "Sona",
+ "title": "娑娜",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "2",
+ "magic": "8",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/37.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/37.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "琴瑟仙女,琴女,娑娜,sn,qn,qsxn,Sona,qinsexiannv,qinnv,suona",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/37000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sona.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big37017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/37016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/37000.jpg"
+ },
+ {
+ "heroId": "38",
+ "name": "虚空行者",
+ "alias": "Kassadin",
+ "title": "卡萨丁",
+ "roles": ["assassin", "mage"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "5",
+ "magic": "8",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/38.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/38.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空行者,卡萨丁,ksd,xkxz,Kassadin,xukongxingzhe,kasading",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/38000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kassadin.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big38014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/38014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/38000.jpg"
+ },
+ {
+ "heroId": "39",
+ "name": "刀锋舞者",
+ "alias": "Irelia",
+ "title": "艾瑞莉娅",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "4",
+ "magic": "5",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/39.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/39.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4000",
+ "camp": "",
+ "campId": "",
+ "keywords": "刀锋舞者,艾瑞莉娅,女刀,女刀锋,Irelia,nd,ndf,dfwz,arly,daofengwuzhe,airuiliya,nvdao,nvdaofeng",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/39000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Irelia.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big39017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/39017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/39000.jpg"
+ },
+ {
+ "heroId": "40",
+ "name": "风暴之怒",
+ "alias": "Janna",
+ "title": "迦娜",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/40.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/40.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "风暴之怒,迦娜,风女,fn,jn,fbzn,Janna,fengbaozhinu,jiana,fengnv",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/40000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Janna.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big40013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/40011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/40000.jpg"
+ },
+ {
+ "heroId": "41",
+ "name": "海洋之灾",
+ "alias": "Gangplank",
+ "title": "普朗克",
+ "roles": ["fighter"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "6",
+ "magic": "4",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/41.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/41.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "海洋之灾,普朗克,船长,plk,cz,hyzz,Gangplank,haiyangzhizai,pulangke,chuanzhang",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/41000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Gangplank.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big41014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/41017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/41000.jpg"
+ },
+ {
+ "heroId": "42",
+ "name": "英勇投弹手",
+ "alias": "Corki",
+ "title": "库奇",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "3",
+ "magic": "6",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/42.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/42.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "英勇投弹手,库奇,飞机,Corki,yingyongtoudanshou,kuqi,feiji,fj,kq,yytds",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/42000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Corki.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big42008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/42017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/42000.jpg"
+ },
+ {
+ "heroId": "43",
+ "name": "天启者",
+ "alias": "Karma",
+ "title": "卡尔玛",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "7",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/43.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/43.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "天启者,卡尔玛,扇子妈,Karma,szm,kem,tqz,tianqizhe,kaerma,shanzima",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/43000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Karma.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big43008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/43008.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/43000.jpg"
+ },
+ {
+ "heroId": "44",
+ "name": "瓦洛兰之盾",
+ "alias": "Taric",
+ "title": "塔里克",
+ "roles": ["support", "fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "8",
+ "magic": "5",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/44.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/44.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "1500",
+ "camp": "",
+ "campId": "",
+ "keywords": "瓦洛兰之盾,塔里克,宝石,bs,tlk,wllzd,Taric,waluolanzhidun,talike,baoshi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/44000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Taric.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big44009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/44009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/44000.jpg"
+ },
+ {
+ "heroId": "45",
+ "name": "邪恶小法师",
+ "alias": "Veigar",
+ "title": "维迦",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "2",
+ "magic": "10",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/45.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/45.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "邪恶小法师,小法师,维迦,xfs,xexfs,wj,Veigar,xieexiaofashi,xiaofashi,weijia",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/45000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Veigar.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big45013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/45013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/45000.jpg"
+ },
+ {
+ "heroId": "48",
+ "name": "巨魔之王",
+ "alias": "Trundle",
+ "title": "特朗德尔",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "6",
+ "magic": "2",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/48.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/48.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "巨魔之王,巨魔,特朗德尔,Trundle,jm,jmzw,tlde,jumozhiwang,jumo,telangdeer",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/48000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Trundle.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big48006.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/48006.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/48000.jpg"
+ },
+ {
+ "heroId": "50",
+ "name": "诺克萨斯统领",
+ "alias": "Swain",
+ "title": "斯维因",
+ "roles": ["mage", "fighter"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "6",
+ "magic": "9",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/50.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/50.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "诺克萨斯统领,乌鸦,斯维因,swy,wy,nksstl,Swain,nuokesasitongling,wuya,siweiyin",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/50000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Swain.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big50012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/50012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/50000.jpg"
+ },
+ {
+ "heroId": "51",
+ "name": "皮城女警",
+ "alias": "Caitlyn",
+ "title": "凯特琳",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "2",
+ "magic": "2",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/51.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/51.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "皮城女警,凯特琳,女警,皮城,Caitlyn,pichengnvjing,kaitelin,nvjing,picheng,pc,nj,pcnj,ctl",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/51000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Caitlyn.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big51013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/51017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/51000.jpg"
+ },
+ {
+ "heroId": "53",
+ "name": "蒸汽机器人",
+ "alias": "Blitzcrank",
+ "title": "布里茨",
+ "roles": ["tank", "fighter", "support"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "8",
+ "magic": "5",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/53.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/53.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "蒸汽机器人,布里茨,机器人,Blitzcrank,zhengqijiqiren,bulici,jiqiren,zqjqr,jqr,blc",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/53000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Blitzcrank.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big53011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/53015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/53000.jpg"
+ },
+ {
+ "heroId": "54",
+ "name": "熔岩巨兽",
+ "alias": "Malphite",
+ "title": "墨菲特",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "9",
+ "magic": "7",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/54.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/54.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "熔岩巨兽,墨菲特,石头人,Malphite,str,mft,ryjs,rongyanjushou,mofeite,shitouren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/54000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Malphite.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big54016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/54016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/54000.jpg"
+ },
+ {
+ "heroId": "55",
+ "name": "不祥之刃",
+ "alias": "Katarina",
+ "title": "卡特琳娜",
+ "roles": ["assassin", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "3",
+ "magic": "9",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/55.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/55.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "不祥之刃,卡特琳娜,卡特,kt,ktln,bxzr,不详,bx,Katarina,buxiangzhiren,katelinna,kate,buxiang",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/55000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Katarina.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big55009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/55012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/55000.jpg"
+ },
+ {
+ "heroId": "56",
+ "name": "永恒梦魇",
+ "alias": "Nocturne",
+ "title": "魔腾",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "5",
+ "magic": "2",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/56.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/56.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "永恒梦魇,魔腾,noc,Nocturne,梦魇,my,yhmy,mt,yonghengmengyan,moteng,mengyan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/56000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nocturne.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big56016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/56016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/56000.jpg"
+ },
+ {
+ "heroId": "57",
+ "name": "扭曲树精",
+ "alias": "Maokai",
+ "title": "茂凯",
+ "roles": ["tank", "mage"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "8",
+ "magic": "6",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/57.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/57.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "扭曲树精,茂凯,大树,ds,mk,nqsj,Maokai,niuqushujing,maokai,dashu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/57000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Maokai.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big57016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/57016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/57000.jpg"
+ },
+ {
+ "heroId": "58",
+ "name": "荒漠屠夫",
+ "alias": "Renekton",
+ "title": "雷克顿",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "1",
+ "attack": "8",
+ "defense": "5",
+ "magic": "2",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/58.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/58.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "荒漠屠夫,鳄鱼,雷克顿,ey,lkd,mmtf,huangmotufu,eyu,leikedun",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/58000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Renekton.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big58017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/58017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/58000.jpg"
+ },
+ {
+ "heroId": "59",
+ "name": "德玛西亚皇子",
+ "alias": "JarvanIV",
+ "title": "嘉文四世",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "8",
+ "magic": "3",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/59.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/59.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "德玛西亚皇子,嘉文四世,皇子,嘉文,JarvanIV,jw,hz,dmxyhz,jwss,demaxiyahuangzi,jiawensishi,huangzi,jiawen",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/59000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/JarvanIV.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big59009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/59011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/59000.jpg"
+ },
+ {
+ "heroId": "60",
+ "name": "蜘蛛女皇",
+ "alias": "Elise",
+ "title": "伊莉丝",
+ "roles": ["mage", "fighter"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/60.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/60.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "蜘蛛女皇,伊莉丝,蜘蛛,Elise,zz,zznh,yls,zhizhunvhuang,yilisi,zhizhu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/60000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Elise.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big60006.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/60006.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/60000.jpg"
+ },
+ {
+ "heroId": "61",
+ "name": "发条魔灵",
+ "alias": "Orianna",
+ "title": "奥莉安娜",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "3",
+ "magic": "9",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/61.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/61.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "发条魔灵,奥莉安娜,发条,Orianna,ftml,ft,alan,fatiaomoling,aolianna,fatiao",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/61000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Orianna.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big61011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/61011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/61000.jpg"
+ },
+ {
+ "heroId": "62",
+ "name": "齐天大圣",
+ "alias": "MonkeyKing",
+ "title": "孙悟空",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "2",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/62.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/62.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "齐天大圣,孙悟空,MonkeyKing,猴子,hz,qtds,swk,qitiandasheng,sunwukong,houzi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/62000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/MonkeyKing.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big62007.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/62007.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/62000.jpg"
+ },
+ {
+ "heroId": "63",
+ "name": "复仇焰魂",
+ "alias": "Brand",
+ "title": "布兰德",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "2",
+ "magic": "9",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/63.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/63.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "复仇焰魂,布兰德,火男,Brand,fuchouyanhun,bulande,huonan,cfyh,bld,hn",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/63000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Brand.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big63008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/63008.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/63000.jpg"
+ },
+ {
+ "heroId": "64",
+ "name": "盲僧",
+ "alias": "LeeSin",
+ "title": "李青",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/64.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/64.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "盲僧,瞎子,李青,lq,xz,ms,LeeSin,mangseng,xiazi,liqing",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/64000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/LeeSin.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big64010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/64017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/64000.jpg"
+ },
+ {
+ "heroId": "67",
+ "name": "暗夜猎手",
+ "alias": "Vayne",
+ "title": "薇恩",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "1",
+ "magic": "1",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/67.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/67.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "暗夜猎手,薇恩,vn,Vayne,ve,ayls,anyelieshou,weien",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/67000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Vayne.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big67015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/67015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/67000.jpg"
+ },
+ {
+ "heroId": "68",
+ "name": "机械公敌",
+ "alias": "Rumble",
+ "title": "兰博",
+ "roles": ["fighter", "mage"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/68.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/68.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "机械公敌,兰博,Rumble,lb,jxgd,jixiegongdi,lanbo",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/68000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Rumble.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big68013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/68013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/68000.jpg"
+ },
+ {
+ "heroId": "69",
+ "name": "魔蛇之拥",
+ "alias": "Cassiopeia",
+ "title": "卡西奥佩娅",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "3",
+ "magic": "9",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/69.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/69.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "魔蛇之拥,卡西奥佩娅,蛇女,Cassiopeia,moshezhiyong,kaxiaopeiya,shenv,mszy,kxapy,sn",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/69000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Cassiopeia.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big69009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/69009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/69000.jpg"
+ },
+ {
+ "heroId": "72",
+ "name": "水晶先锋",
+ "alias": "Skarner",
+ "title": "斯卡纳",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "6",
+ "magic": "5",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/72.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/72.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "水晶先锋,斯卡纳,skn,sjxf,蝎子,xz,Skarner,shuijingxianfeng,sikana,xiezi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/72000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Skarner.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big72005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/72005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/72000.jpg"
+ },
+ {
+ "heroId": "74",
+ "name": "大发明家",
+ "alias": "Heimerdinger",
+ "title": "黑默丁格",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/74.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/74.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "大发明家,黑默丁格,大头,Heimerdinger,dt,dfmj,hmdg,dafamingjia,heimodingge,datou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/74000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Heimerdinger.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big74015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/74015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/74000.jpg"
+ },
+ {
+ "heroId": "75",
+ "name": "沙漠死神",
+ "alias": "Nasus",
+ "title": "内瑟斯",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "5",
+ "magic": "6",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/75.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/75.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "沙漠死神,内瑟斯,狗头,gt,nss,smss,Nasus,shamosishen,neisesi,goutou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/75000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nasus.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big75016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/75016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/75000.jpg"
+ },
+ {
+ "heroId": "76",
+ "name": "狂野女猎手",
+ "alias": "Nidalee",
+ "title": "奈德丽",
+ "roles": ["assassin", "mage"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "4",
+ "magic": "7",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/76.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/76.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "狂野女猎手,奈德丽,豹女,bn,ndl,kynls,Nidalee,kuangyenvlieshou,naideli,baonv",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/76000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nidalee.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big76011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/76011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/76000.jpg"
+ },
+ {
+ "heroId": "77",
+ "name": "兽灵行者",
+ "alias": "Udyr",
+ "title": "乌迪尔",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "7",
+ "magic": "4",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/77.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/77.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "兽灵行者,乌迪尔,Udyr,wde,slxz,UD,shoulingxingzhe,wudier",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/77000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Udyr.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big77004.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/77005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/77000.jpg"
+ },
+ {
+ "heroId": "78",
+ "name": "圣锤之毅",
+ "alias": "Poppy",
+ "title": "波比",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "7",
+ "magic": "2",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/78.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/78.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "450",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "圣锤之毅,波比,bb,sczy,Poppy,shengchuizhiyi,bobi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/78000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Poppy.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big78016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/78016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/78000.jpg"
+ },
+ {
+ "heroId": "79",
+ "name": "酒桶",
+ "alias": "Gragas",
+ "title": "古拉加斯",
+ "roles": ["fighter", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "7",
+ "magic": "6",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/79.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/79.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "酒桶,古拉加斯,啤酒人,肉蛋葱鸡,Gragas,pjr,jt,gljs,rdcj,jiutong,gulajiasi,pijiuren,roudancongji",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/79000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Gragas.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big79010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/79011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/79000.jpg"
+ },
+ {
+ "heroId": "80",
+ "name": "不屈之枪",
+ "alias": "Pantheon",
+ "title": "潘森",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "4",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/80.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/80.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "1500",
+ "camp": "",
+ "campId": "",
+ "keywords": "不屈之枪,潘森,Pantheon,PS,bqzq,buquzhiqiang,pansen",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/80000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Pantheon.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big80008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/80016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/80000.jpg"
+ },
+ {
+ "heroId": "81",
+ "name": "探险家",
+ "alias": "Ezreal",
+ "title": "伊泽瑞尔",
+ "roles": ["marksman", "mage"],
+ "isWeekFree": "1",
+ "attack": "7",
+ "defense": "2",
+ "magic": "6",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/81.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/81.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "探险家,伊泽瑞尔,ez,Ezreal,tanxianjia,yizeruier,txj,yzrr",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/81000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ezreal.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big81009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/81015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/81000.jpg"
+ },
+ {
+ "heroId": "82",
+ "name": "铁铠冥魂",
+ "alias": "Mordekaiser",
+ "title": "莫德凯撒",
+ "roles": ["fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "6",
+ "magic": "7",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/82.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/82.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "1500",
+ "camp": "",
+ "campId": "",
+ "keywords": "铁铠冥魂,莫德凯撒,铁男,Mordekaiser,tn,mdks,tkmh,tiekaiminghun,modekaisa,tienan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/82000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Mordekaiser.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big82013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/82013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/82000.jpg"
+ },
+ {
+ "heroId": "83",
+ "name": "牧魂人",
+ "alias": "Yorick",
+ "title": "约里克",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "6",
+ "magic": "4",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/83.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/83.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "牧魂人,约里克,掘墓人,jmr,mhr,ylk,Yorick,muhunren,yuelike,juemuren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/83000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Yorick.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big83012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/83012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/83000.jpg"
+ },
+ {
+ "heroId": "84",
+ "name": "离群之刺",
+ "alias": "Akali",
+ "title": "阿卡丽",
+ "roles": ["assassin"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "3",
+ "magic": "8",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/84.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/84.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "阿卡丽,离群之刺,akali,liqunzhici,akl,lqzc",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/84000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Akali.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big84015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/84015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/84000.jpg"
+ },
+ {
+ "heroId": "85",
+ "name": "狂暴之心",
+ "alias": "Kennen",
+ "title": "凯南",
+ "roles": ["mage", "marksman"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "4",
+ "magic": "7",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/85.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/85.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "狂暴之心,凯南,kn,kbzx,Kennen,kuangbaozhixin,kainan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/85000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kennen.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big85008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/85008.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/85000.jpg"
+ },
+ {
+ "heroId": "86",
+ "name": "德玛西亚之力",
+ "alias": "Garen",
+ "title": "盖伦",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "1",
+ "attack": "7",
+ "defense": "7",
+ "magic": "1",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/86.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/86.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "1",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "1000",
+ "camp": "",
+ "campId": "",
+ "keywords": "德玛西亚之力,盖伦,大宝剑,Garen,dbj,gl,dmxyzl,demaxiyazhili,gailun,dabaojian",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/86000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Garen.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big86014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/86014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/86000.jpg"
+ },
+ {
+ "heroId": "89",
+ "name": "曙光女神",
+ "alias": "Leona",
+ "title": "蕾欧娜",
+ "roles": ["tank", "support"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "8",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/89.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/89.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "曙光女神,蕾欧娜,日女,曙光,女坦,nt,rn,sg,lon,sgns,shuguangnvshen,leiouna,rinv,shuguang,Leona,nvtan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/89000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Leona.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big89012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/89012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/89000.jpg"
+ },
+ {
+ "heroId": "90",
+ "name": "虚空先知",
+ "alias": "Malzahar",
+ "title": "玛尔扎哈",
+ "roles": ["mage", "assassin"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "2",
+ "magic": "9",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/90.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/90.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空先知,玛尔扎哈,蚂蚱,马尔扎哈,Malzahar,mz,mezh,xkxz,xukongxianzhi,maerzhaha,mazha,maerzhaha",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/90000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Malzahar.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big90009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/90009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/90000.jpg"
+ },
+ {
+ "heroId": "91",
+ "name": "刀锋之影",
+ "alias": "Talon",
+ "title": "泰隆",
+ "roles": ["assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "3",
+ "magic": "1",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/91.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/91.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "刀锋之影,男刀,泰隆,tl,nd,dfzy,Talon,daofengzhiying,nandao,tailong",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/91000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Talon.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big91012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/91012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/91000.jpg"
+ },
+ {
+ "heroId": "92",
+ "name": "放逐之刃",
+ "alias": "Riven",
+ "title": "锐雯",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "1",
+ "attack": "8",
+ "defense": "5",
+ "magic": "1",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/92.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/92.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "放逐之刃,锐雯,Riven,rw,fzzr,fangzhuzhiren,ruiwen",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/92000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Riven.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big92016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/92017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/92000.jpg"
+ },
+ {
+ "heroId": "96",
+ "name": "深渊巨口",
+ "alias": "KogMaw",
+ "title": "克格莫",
+ "roles": ["marksman", "mage"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "2",
+ "magic": "5",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/96.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/96.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "深渊巨口,克格莫,大嘴,KogMaw,dz,kgm,syjk,shenyuanjukou,kegemo,dazui",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/96000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/KogMaw.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big96010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/96017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/96000.jpg"
+ },
+ {
+ "heroId": "98",
+ "name": "暮光之眼",
+ "alias": "Shen",
+ "title": "慎",
+ "roles": ["tank"],
+ "isWeekFree": "1",
+ "attack": "3",
+ "defense": "9",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/98.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/98.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "1350",
+ "couponPrice": "2000",
+ "camp": "",
+ "campId": "",
+ "keywords": "暮光之眼,慎,yaozi,s,mgzy,Shen,muguangzhiyan,shen",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/98000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Shen.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big98016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/98016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/98000.jpg"
+ },
+ {
+ "heroId": "99",
+ "name": "光辉女郎",
+ "alias": "Lux",
+ "title": "拉克丝",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "4",
+ "magic": "9",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/99.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/99.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "3150",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "光辉女郎,拉克丝,光辉,lux,lks,gh,ghnl,guanghuinvlang,lakesi,guanghui",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/99000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Lux.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big99017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/99017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/99000.jpg"
+ },
+ {
+ "heroId": "101",
+ "name": "远古巫灵",
+ "alias": "Xerath",
+ "title": "泽拉斯",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "3",
+ "magic": "10",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/101.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/101.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "远古巫灵,泽拉斯,guancaiban,gbc,zls,ygwl,Xerath,yuanguwuling,zelasi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/101000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Xerath.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big101012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/101012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/101000.jpg"
+ },
+ {
+ "heroId": "102",
+ "name": "龙血武姬",
+ "alias": "Shyvana",
+ "title": "希瓦娜",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "6",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/102.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/102.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "龙血武姬,龙女,希瓦娜,ln,xwn,lxwj,Shyvana,longxuewuji,longnv,xiwana",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/102000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Shyvana.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big102008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/102008.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/102000.jpg"
+ },
+ {
+ "heroId": "103",
+ "name": "九尾妖狐",
+ "alias": "Ahri",
+ "title": "阿狸",
+ "roles": ["mage", "assassin"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "4",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/103.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/103.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "九尾,九尾妖狐,狐狸,阿狸,jiuwei,jiuweiyaohu,huli,ali,ahri,jwyh,al,hl,jw",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/103000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ahri.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big103017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/103017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/103000.jpg"
+ },
+ {
+ "heroId": "104",
+ "name": "法外狂徒",
+ "alias": "Graves",
+ "title": "格雷福斯",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/104.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/104.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "法外狂徒,格雷福斯,男枪,Graves,nq,glfs,fwkt,fawaikuangtu,geleifusi,nanqiang",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/104000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Graves.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big104014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/104014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/104000.jpg"
+ },
+ {
+ "heroId": "105",
+ "name": "潮汐海灵",
+ "alias": "Fizz",
+ "title": "菲兹",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "4",
+ "magic": "7",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/105.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/105.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "潮汐海灵,菲兹,小鱼人,Fizz,fz,xyr,cxhl,chaoxihailing,feizi,xiaoyuren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/105000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Fizz.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big105016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/105016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/105000.jpg"
+ },
+ {
+ "heroId": "106",
+ "name": "不灭狂雷",
+ "alias": "Volibear",
+ "title": "沃利贝尔",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "7",
+ "magic": "4",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/106.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/106.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "不灭狂雷,沃利贝尔,Volibear,狗熊,gx,wlbe,bmkl,bumiekuanglei,wolibeier,gouxiong",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/106000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Volibear.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big106009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/106009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/106000.jpg"
+ },
+ {
+ "heroId": "107",
+ "name": "傲之追猎者",
+ "alias": "Rengar",
+ "title": "雷恩加尔",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "1",
+ "attack": "7",
+ "defense": "4",
+ "magic": "2",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/107.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/107.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "傲之追猎者,狮子狗,雷恩加尔,szg,leje,azzlz,Rengar,aozhizhuiliezhe,shizigou,leienjiaer",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/107000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Rengar.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big107015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/107015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/107000.jpg"
+ },
+ {
+ "heroId": "110",
+ "name": "惩戒之箭",
+ "alias": "Varus",
+ "title": "韦鲁斯",
+ "roles": ["marksman", "mage"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "3",
+ "magic": "4",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/110.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/110.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "惩戒之箭,韦鲁斯,维鲁斯,wls,cjzj,Varus,chengjiezhijian,weilusi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/110000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Varus.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big110017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/110017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/110000.jpg"
+ },
+ {
+ "heroId": "111",
+ "name": "深海泰坦",
+ "alias": "Nautilus",
+ "title": "诺提勒斯",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "6",
+ "magic": "6",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/111.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/111.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "深海泰坦,诺提勒斯,泰坦,Nautilus,tt,ntls,shtt,shenhaitaitan,nuotileisi,taitan",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/111000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nautilus.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big111009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/111009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/111000.jpg"
+ },
+ {
+ "heroId": "112",
+ "name": "机械先驱",
+ "alias": "Viktor",
+ "title": "维克托",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "4",
+ "magic": "10",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/112.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/112.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "2500",
+ "camp": "",
+ "campId": "",
+ "keywords": "机械先驱,维克托,三只手,szs,wkt,jxxq,Viktor,jixiexianqu,weiketuo,sanzhishou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/112000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Viktor.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big112005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/112005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/112000.jpg"
+ },
+ {
+ "heroId": "113",
+ "name": "北地之怒",
+ "alias": "Sejuani",
+ "title": "瑟庄妮",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "7",
+ "magic": "6",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/113.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/113.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "北地之怒,猪妹,瑟庄妮,zm,szn,bdzn,Sejuani,beidizhinu,zhumei,sezhuangni",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/113000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sejuani.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big113016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/113016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/113000.jpg"
+ },
+ {
+ "heroId": "114",
+ "name": "无双剑姬",
+ "alias": "Fiora",
+ "title": "菲奥娜",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "4",
+ "magic": "2",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/114.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/114.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "无双剑姬,菲奥娜,剑姬,Fiora,jj,wsjj,fan,wushuangjianji,feiaona,jianji",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/114000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Fiora.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big114005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/114017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/114000.jpg"
+ },
+ {
+ "heroId": "115",
+ "name": "爆破鬼才",
+ "alias": "Ziggs",
+ "title": "吉格斯",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "4",
+ "magic": "9",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/115.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/115.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "爆破鬼才,炸弹人,吉格斯,Ziggs,jgs,zdr,bpgc,baopoguicai,zhadanren,jigesi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/115000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ziggs.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big115014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/115014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/115000.jpg"
+ },
+ {
+ "heroId": "117",
+ "name": "仙灵女巫",
+ "alias": "Lulu",
+ "title": "璐璐",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/117.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/117.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "仙灵女巫,璐璐,ll,xlnw,Lulu,xianlingnvwu,lulu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/117000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Lulu.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big117015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/117015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/117000.jpg"
+ },
+ {
+ "heroId": "119",
+ "name": "荣耀行刑官",
+ "alias": "Draven",
+ "title": "德莱文",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "3",
+ "magic": "1",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/119.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/119.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "荣耀行刑官,德莱文,Draven,rongyaoxingxingguan,delaiwen,ryxxg,dlw",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/119000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Draven.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big119013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/119013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/119000.jpg"
+ },
+ {
+ "heroId": "120",
+ "name": "战争之影",
+ "alias": "Hecarim",
+ "title": "赫卡里姆",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "6",
+ "magic": "4",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/120.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/120.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "战争之影,赫卡里姆,人马,Hecarim,rm,zzzy,hlkm,zhanzhengzhiying,hekalimu,renma",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/120000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Hecarim.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big120014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/120014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/120000.jpg"
+ },
+ {
+ "heroId": "121",
+ "name": "虚空掠夺者",
+ "alias": "Khazix",
+ "title": "卡兹克",
+ "roles": ["assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "4",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/121.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/121.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空掠夺者,螳螂,卡兹克,kzk,tl,xkldz,Khazix,xukonglueduozhe,tanglang,kazike",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/121000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Khazix.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big121011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/121011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/121000.jpg"
+ },
+ {
+ "heroId": "122",
+ "name": "诺克萨斯之手",
+ "alias": "Darius",
+ "title": "德莱厄斯",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "5",
+ "magic": "1",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/122.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/122.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "诺克萨斯之手,德莱厄斯,诺手,Darius,nuokesasizhishou,delaiesi,nuoshou,nksszs,ns,dles",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/122000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Darius.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big122016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/122016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/122000.jpg"
+ },
+ {
+ "heroId": "126",
+ "name": "未来守护者",
+ "alias": "Jayce",
+ "title": "杰斯",
+ "roles": ["fighter", "marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "4",
+ "magic": "3",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/126.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/126.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "未来守护者,杰斯,Jayce,js,wlshz,weilaishouhuzhe,jiesi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/126000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Jayce.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big126015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/126015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/126000.jpg"
+ },
+ {
+ "heroId": "127",
+ "name": "冰霜女巫",
+ "alias": "Lissandra",
+ "title": "丽桑卓",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "5",
+ "magic": "8",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/127.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/127.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "冰霜女巫,冰女,丽桑卓,Lissandra,bn,lsz,bsnw,bingshuangnvwu,bingnv,lisangzhuo",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/127000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Lissandra.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big127012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/127012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/127000.jpg"
+ },
+ {
+ "heroId": "131",
+ "name": "皎月女神",
+ "alias": "Diana",
+ "title": "黛安娜",
+ "roles": ["fighter", "mage"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "6",
+ "magic": "8",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/131.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/131.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "皎月女神,黛安娜,皎月,Diana,jiaoyuenvshen,daianna,jiaoyue,jy,dan,jyns",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/131000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Diana.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big131011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/131012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/131000.jpg"
+ },
+ {
+ "heroId": "133",
+ "name": "德玛西亚之翼",
+ "alias": "Quinn",
+ "title": "奎因",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "4",
+ "magic": "2",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/133.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/133.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "德玛西亚之翼,奎因,鸟人,ky,dmxyzz,Quinn,nr,demaxiyazhiyi,kuiyin,niaoren",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/133000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Quinn.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big133005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/133005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/133000.jpg"
+ },
+ {
+ "heroId": "134",
+ "name": "暗黑元首",
+ "alias": "Syndra",
+ "title": "辛德拉",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "3",
+ "magic": "9",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/134.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/134.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "暗黑元首,球女,辛德拉,qn,xdl,ahyy,Syndra,anheiyuanshou,qiunv,xindela",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/134000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Syndra.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big134016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/134016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/134000.jpg"
+ },
+ {
+ "heroId": "136",
+ "name": "铸星龙王",
+ "alias": "AurelionSol",
+ "title": "奥瑞利安索尔",
+ "roles": ["mage"],
+ "isWeekFree": "1",
+ "attack": "2",
+ "defense": "3",
+ "magic": "8",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/136.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/136.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "铸星龙王,奥瑞利安索尔,索尔,龙王,AurelionSol,zhuxinglongwang,aoruiliansuoer,suoer,longwang,zxlw,lw,se,arlasr",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/136000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/AurelionSol.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big136000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big136001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big136002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big136011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/136000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/136001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/136002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/136011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/136000.jpg"
+ },
+ {
+ "heroId": "141",
+ "name": "影流之镰",
+ "alias": "Kayn",
+ "title": "凯隐",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "6",
+ "magic": "1",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/141.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/141.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "影流之镰,凯隐,ky,ylzl,Kayn,yingliuzhilian,kaiyin",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/141000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kayn.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big141000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big141002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big141001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big141009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big141008.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/141000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/141001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/141002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/141008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/141009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/141000.jpg"
+ },
+ {
+ "heroId": "142",
+ "name": "暮光星灵",
+ "alias": "Zoe",
+ "title": "佐伊",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "7",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/142.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/142.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "暮光星灵,佐伊,zy,mgxl,Zoe,muguangxingling,zuoyi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/142000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Zoe.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big142000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big142002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big142001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big142009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/142000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/142001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/142002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/142009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/142000.jpg"
+ },
+ {
+ "heroId": "143",
+ "name": "荆棘之兴",
+ "alias": "Zyra",
+ "title": "婕拉",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "3",
+ "magic": "8",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/143.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/143.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "荆棘之兴,婕拉,jl,jjzx,Zyra,jingjizhixing,jiela",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/143000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Zyra.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big143016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/143016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/143000.jpg"
+ },
+ {
+ "heroId": "145",
+ "name": "虚空之女",
+ "alias": "Kaisa",
+ "title": "卡莎",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/145.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/145.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空之女,卡莎,ks,xkzn,Kaisa,xukongzhinv,kasha",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/145000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kaisa.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big145017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145016.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/145017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/145000.jpg"
+ },
+ {
+ "heroId": "147",
+ "name": "星籁歌姬",
+ "alias": "Seraphine",
+ "title": "萨勒芬妮",
+ "roles": ["mage", "support"],
+ "isWeekFree": "1",
+ "attack": "0",
+ "defense": "0",
+ "magic": "0",
+ "difficulty": "0",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/147.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/147.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "萨勒芬妮,星籁歌姬,Seraphine,saleifenni,xinglaigeji",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/147000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Seraphine.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big147000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big147001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big147004.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/147000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/147001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/147004.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/147000.jpg"
+ },
+ {
+ "heroId": "150",
+ "name": "迷失之牙",
+ "alias": "Gnar",
+ "title": "纳尔",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "1",
+ "attack": "6",
+ "defense": "5",
+ "magic": "5",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/150.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/150.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "迷失之牙,纳尔,Gnar,ne,mszy,mishizhiya,naer",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/150000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Gnar.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big150015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/150015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/150000.jpg"
+ },
+ {
+ "heroId": "154",
+ "name": "生化魔人",
+ "alias": "Zac",
+ "title": "扎克",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "7",
+ "magic": "7",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/154.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/154.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3000",
+ "camp": "",
+ "campId": "",
+ "keywords": "生化魔人,扎克,Zac,shenghuamoren,zhake,zk,shmr",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/154000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Zac.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big154002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big154000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big154006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big154001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big154007.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/154000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/154001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/154002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/154006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/154007.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/154000.jpg"
+ },
+ {
+ "heroId": "157",
+ "name": "疾风剑豪",
+ "alias": "Yasuo",
+ "title": "亚索",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "4",
+ "magic": "4",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/157.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/157.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "疾风剑豪,剑豪,亚索,Yasuo,ys,jh,jfjh,jifengjianhao,jianhao,yasuo",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/157000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Yasuo.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157017.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big157010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/157017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/157000.jpg"
+ },
+ {
+ "heroId": "161",
+ "name": "虚空之眼",
+ "alias": "Velkoz",
+ "title": "维克兹",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "2",
+ "magic": "10",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/161.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/161.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空之眼,大眼,维克兹,wkz,dy,xkzy,Velkoz,xukongzhiyan,dayan,weikezi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/161000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Velkoz.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big161011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/161011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/161000.jpg"
+ },
+ {
+ "heroId": "163",
+ "name": "岩雀",
+ "alias": "Taliyah",
+ "title": "塔莉垭",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "7",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/163.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/163.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "岩雀,小鸟,塔莉垭,tly,xn,yq,Taliyah,yanque,xiaoniao,taliya",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/163000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Taliyah.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big163000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big163003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big163001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big163002.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/163000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/163002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/163001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/163003.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/163000.jpg"
+ },
+ {
+ "heroId": "164",
+ "name": "青钢影",
+ "alias": "Camille",
+ "title": "卡蜜尔",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "6",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/164.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/164.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "青钢影,卡蜜尔,卡密尔,Camille,腿女,qinggangying,kamier,kamier,tuinv,qgy,kme,tn",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/164000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Camille.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big164000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big164001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big164002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big164010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big164011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/164002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/164001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/164000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/164010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/164011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/164000.jpg"
+ },
+ {
+ "heroId": "166",
+ "name": "影哨",
+ "alias": "Akshan",
+ "title": "阿克尚",
+ "roles": ["marksman", "assassin"],
+ "isWeekFree": "0",
+ "attack": "0",
+ "defense": "0",
+ "magic": "0",
+ "difficulty": "0",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/166.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/166.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "影哨,阿克尚,阿克,阿,yingshao,akeshang,ake,a",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/166000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Akshan.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big166000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big166001.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/166000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/166001.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/166000.jpg"
+ },
+ {
+ "heroId": "201",
+ "name": "弗雷尔卓德之心",
+ "alias": "Braum",
+ "title": "布隆",
+ "roles": ["support", "tank"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "9",
+ "magic": "4",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/201.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/201.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "弗雷尔卓德之心,布隆,bl,Braum,flezdzx,fuleierzhuodezhixin,bulong",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/201000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Braum.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big201011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/201011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/201000.jpg"
+ },
+ {
+ "heroId": "202",
+ "name": "戏命师",
+ "alias": "Jhin",
+ "title": "烬",
+ "roles": ["marksman", "mage"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "2",
+ "magic": "6",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/202.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/202.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "戏命师,烬,Jhin,j,xms,ximingshi,jin",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/202000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Jhin.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big202014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/202014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/202000.jpg"
+ },
+ {
+ "heroId": "203",
+ "name": "永猎双子",
+ "alias": "Kindred",
+ "title": "千珏",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "2",
+ "magic": "2",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/203.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/203.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "永猎双子,千珏,Kindred,qj,ylsz,yonglieshuangzi,qianjue",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/203000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kindred.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big203000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big203001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big203002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big203003.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/203000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/203002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/203003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/203001.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/203000.jpg"
+ },
+ {
+ "heroId": "222",
+ "name": "暴走萝莉",
+ "alias": "Jinx",
+ "title": "金克丝",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "2",
+ "magic": "4",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/222.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/222.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "暴走萝莉,萝莉,金克丝,Jinx,jks,ll,bzll,baozouluoli,luoli,jinkesi,金克丝",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/222000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Jinx.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big222013.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/222013.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/222000.jpg"
+ },
+ {
+ "heroId": "223",
+ "name": "河流之王",
+ "alias": "TahmKench",
+ "title": "塔姆",
+ "roles": ["support", "tank"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "9",
+ "magic": "6",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/223.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/223.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "河流之王,hama,塔姆,tm,hlzw,TahmKench,heliuzhiwang,tamu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/223000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/TahmKench.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big223000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big223001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big223002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big223003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big223011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/223002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/223000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/223003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/223001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/223011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/223000.jpg"
+ },
+ {
+ "heroId": "234",
+ "name": "破败之王",
+ "alias": "Viego",
+ "title": "佛耶戈",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "4",
+ "magic": "2",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/234.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/234.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "破败之王,佛耶戈,破败,佛,pobaizhiwang,fuyege,pobai,fu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/234000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Viego.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big234000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big234001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big234010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/234001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/234000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/234010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/234000.jpg"
+ },
+ {
+ "heroId": "235",
+ "name": "涤魂圣枪",
+ "alias": "Senna",
+ "title": "赛娜",
+ "roles": ["marksman", "support"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "2",
+ "magic": "6",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/235.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/235.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "涤魂圣枪,赛娜,奶枪,Senna,nq,sn,qhsq,dihunshengqiang,saina,naiqiang",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/235000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Senna.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big235000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big235001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big235009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big235010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big235016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/235001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/235000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/235009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/235010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/235016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/235000.jpg"
+ },
+ {
+ "heroId": "236",
+ "name": "圣枪游侠",
+ "alias": "Lucian",
+ "title": "卢锡安",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/236.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/236.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "圣枪游侠,卢锡安,奥巴马,Lucian,abm,lxa,sqyx,shengqiangyouxia,luxian,aobama",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/236000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Lucian.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big236009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/236017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/236000.jpg"
+ },
+ {
+ "heroId": "238",
+ "name": "影流之主",
+ "alias": "Zed",
+ "title": "劫",
+ "roles": ["assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "2",
+ "magic": "1",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/238.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/238.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "影流之主,劫,j,ylzz,Zed,yingliuzhizhu,jie",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/238000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Zed.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big238015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/238014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/238000.jpg"
+ },
+ {
+ "heroId": "240",
+ "name": "暴怒骑士",
+ "alias": "Kled",
+ "title": "克烈",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "2",
+ "magic": "2",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/240.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/240.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "暴怒骑士,克烈,kl,bnqs,baonuqishi,kelie",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/240000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kled.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big240000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big240001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big240002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big240009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/240000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/240002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/240001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/240009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/240000.jpg"
+ },
+ {
+ "heroId": "245",
+ "name": "时间刺客",
+ "alias": "Ekko",
+ "title": "艾克",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "1",
+ "attack": "5",
+ "defense": "3",
+ "magic": "7",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/245.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/245.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "时间刺客,艾克,Ekko,shijiancike,aike,ak,sjck",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/245000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ekko.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big245012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/245012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/245000.jpg"
+ },
+ {
+ "heroId": "246",
+ "name": "元素女皇",
+ "alias": "Qiyana",
+ "title": "奇亚娜",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "0",
+ "defense": "2",
+ "magic": "4",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/246.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/246.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "元素女皇,奇亚娜,qyn,ysnh,Qiyana,yuansunvhuang,qiyana",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/246000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Qiyana.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big246000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big246001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big246002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big246010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big246011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/246011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/246000.jpg"
+ },
+ {
+ "heroId": "254",
+ "name": "皮城执法官",
+ "alias": "Vi",
+ "title": "蔚",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/254.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/254.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "皮城执法官,拳女,蔚,v,qv,pczfg,Vi,pichengzhifaguan,quannv,wei",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/254000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Vi.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big254012.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/254012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/254000.jpg"
+ },
+ {
+ "heroId": "266",
+ "name": "暗裔剑魔",
+ "alias": "Aatrox",
+ "title": "亚托克斯",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "4",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/266.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/266.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "剑魔,亚托克斯,暗裔剑魔,jianmo,yatuokesi,anyijianmo,Aatrox,jm,ayjm,ytks",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/266000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Aatrox.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big266011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/266011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/266000.jpg"
+ },
+ {
+ "heroId": "267",
+ "name": "唤潮鲛姬",
+ "alias": "Nami",
+ "title": "娜美",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "3",
+ "magic": "7",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/267.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/267.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "4800",
+ "couponPrice": "3500",
+ "camp": "",
+ "campId": "",
+ "keywords": "唤潮鲛姬,鲛姬,娜美,nm,jj,hcjj,Nami,huanchaojiaoji,jiaoji,namei",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/267000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Nami.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big267015.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267007.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/267015.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/267000.jpg"
+ },
+ {
+ "heroId": "268",
+ "name": "沙漠皇帝",
+ "alias": "Azir",
+ "title": "阿兹尔",
+ "roles": ["mage", "marksman"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "3",
+ "magic": "8",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/268.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/268.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "沙漠皇帝,阿兹尔,沙皇,Azir,shamohuangdi,azier,shahuang,smhd,aze,sh",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/268000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Azir.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big268005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/268005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/268000.jpg"
+ },
+ {
+ "heroId": "350",
+ "name": "魔法猫咪",
+ "alias": "Yuumi",
+ "title": "悠米",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "1",
+ "magic": "8",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/350.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/350.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "魔法猫咪,猫,猫咪,悠米,cat,m,mm,mfmm,ym,Yuumi,mofamaomi,mao,maomi,youmi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/350000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Yuumi.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big350001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big350000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big350011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/350000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/350001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/350011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/350000.jpg"
+ },
+ {
+ "heroId": "360",
+ "name": "沙漠玫瑰",
+ "alias": "Samira",
+ "title": "莎弥拉",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "3",
+ "difficulty": "6",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/360.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/360.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "莎弥拉,沙漠玫瑰,Samira,sml,smmg,shamila,shamomeigui",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/360000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Samira.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big360001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big360000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big360010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/360000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/360001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/360010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/360000.jpg"
+ },
+ {
+ "heroId": "412",
+ "name": "魂锁典狱长",
+ "alias": "Thresh",
+ "title": "锤石",
+ "roles": ["support", "fighter"],
+ "isWeekFree": "1",
+ "attack": "5",
+ "defense": "6",
+ "magic": "6",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/412.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/412.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "魂锁典狱长,锤石,Thresh,cs,hsdyz,hunsuodianyuzhang,chuishi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/412000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Thresh.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big412017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412014.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412015.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/412017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/412000.jpg"
+ },
+ {
+ "heroId": "420",
+ "name": "海兽祭司",
+ "alias": "Illaoi",
+ "title": "俄洛伊",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "6",
+ "magic": "3",
+ "difficulty": "4",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/420.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/420.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "海兽祭司,俄洛伊,触手妈,Illaoi,csm,ely,hsjs,haishoujisi,eluoyi,chushouma",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/420000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Illaoi.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big420000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big420001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big420002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big420010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/420000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/420001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/420002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/420010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/420000.jpg"
+ },
+ {
+ "heroId": "421",
+ "name": "虚空遁地兽",
+ "alias": "RekSai",
+ "title": "雷克塞",
+ "roles": ["fighter"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "2",
+ "difficulty": "3",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/421.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/421.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "虚空遁地兽,挖掘机,雷克赛,雷克塞,lks,wjj,xkdds,RekSai,xukongdundishou,wajueji,leikesai,leikesai",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/421000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/RekSai.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big421002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big421001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big421000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big421009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/421000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/421001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/421002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/421009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/421000.jpg"
+ },
+ {
+ "heroId": "427",
+ "name": "翠神",
+ "alias": "Ivern",
+ "title": "艾翁",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "5",
+ "magic": "7",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/427.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/427.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "改动英雄",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "翠神,艾翁,小菊,Ivern,xj,cs,aw,cuishen,aiweng,xiaoju",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/427000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ivern.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big427000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big427001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big427002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big427011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/427000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/427001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/427002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/427011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/427000.jpg"
+ },
+ {
+ "heroId": "429",
+ "name": "复仇之矛",
+ "alias": "Kalista",
+ "title": "卡莉丝塔",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "2",
+ "magic": "4",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/429.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/429.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "复仇之矛,卡莉丝塔,Kalista,fczm,klst,fuchouzhimao,kalisita",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/429000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Kalista.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big429001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big429000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big429002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big429003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big429005.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/429000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/429001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/429002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/429003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/429005.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/429000.jpg"
+ },
+ {
+ "heroId": "432",
+ "name": "星界游神",
+ "alias": "Bard",
+ "title": "巴德",
+ "roles": ["support", "mage"],
+ "isWeekFree": "0",
+ "attack": "4",
+ "defense": "4",
+ "magic": "5",
+ "difficulty": "9",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/432.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/432.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "星界游神,巴德,Bard,xingjieyoushen,bade,xjys,bd",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/432000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Bard.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big432017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432006.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/432017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/432000.jpg"
+ },
+ {
+ "heroId": "497",
+ "name": "幻翎",
+ "alias": "Rakan",
+ "title": "洛",
+ "roles": ["support"],
+ "isWeekFree": "0",
+ "attack": "2",
+ "defense": "4",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/497.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/497.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "幻翎,洛,l,hl,Rakan,huanling,luo",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/497000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Rakan.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big497009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497005.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/497009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/497000.jpg"
+ },
+ {
+ "heroId": "498",
+ "name": "逆羽",
+ "alias": "Xayah",
+ "title": "霞",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "10",
+ "defense": "6",
+ "magic": "1",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/498.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/498.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "逆羽,霞,x,ny,Xayah,niyu,xia",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/498000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Xayah.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big498017.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498002.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498003.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498004.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/498017.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/498000.jpg"
+ },
+ {
+ "heroId": "516",
+ "name": "山隐之焰",
+ "alias": "Ornn",
+ "title": "奥恩",
+ "roles": ["tank", "fighter"],
+ "isWeekFree": "0",
+ "attack": "5",
+ "defense": "9",
+ "magic": "3",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/516.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/516.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "山隐之焰,奥恩,Ornn,an,syzy,shanyinzhiyan,aoen",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/516000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Ornn.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big516001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big516000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big516002.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/516000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/516001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/516002.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/516000.jpg"
+ },
+ {
+ "heroId": "517",
+ "name": "解脱者",
+ "alias": "Sylas",
+ "title": "塞拉斯",
+ "roles": ["mage", "assassin"],
+ "isWeekFree": "0",
+ "attack": "3",
+ "defense": "4",
+ "magic": "8",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/517.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/517.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "解脱者,塞拉斯,sls,suannan,sn,jtz,Sylas,jietuozhe,sailasi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/517000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sylas.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big517000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big517001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big517013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big517008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big517014.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/517000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/517001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/517008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/517013.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/517014.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/517000.jpg"
+ },
+ {
+ "heroId": "518",
+ "name": "万花通灵",
+ "alias": "Neeko",
+ "title": "妮蔻",
+ "roles": ["mage", "support"],
+ "isWeekFree": "0",
+ "attack": "1",
+ "defense": "1",
+ "magic": "9",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/518.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/518.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "万花通灵,妮蔻,neeko,nk,whtl,wanhuatongling,nikou",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/518000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Neeko.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big518000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big518001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big518012.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big518011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big518010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/518000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/518001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/518010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/518011.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/518012.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/518000.jpg"
+ },
+ {
+ "heroId": "523",
+ "name": "残月之肃",
+ "alias": "Aphelios",
+ "title": "厄斐琉斯",
+ "roles": ["marksman"],
+ "isWeekFree": "0",
+ "attack": "6",
+ "defense": "2",
+ "magic": "1",
+ "difficulty": "10",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/523.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/523.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "残月之肃,厄斐琉斯,Aphelios,efls,cyzs,canyuezhisu,efeiliusi",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/523000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Aphelios.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big523000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big523001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big523009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/523000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/523001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/523009.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/523000.jpg"
+ },
+ {
+ "heroId": "526",
+ "name": "镕铁少女",
+ "alias": "Rell",
+ "title": "芮尔",
+ "roles": ["tank", "support"],
+ "isWeekFree": "0",
+ "attack": "0",
+ "defense": "0",
+ "magic": "0",
+ "difficulty": "0",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/526.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/526.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "7800",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "镕铁少女,芮尔,镕铁,,rongtieshaonv,ruier,rongtie",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/526000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Rell.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big526000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big526001.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/526000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/526001.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/526000.jpg"
+ },
+ {
+ "heroId": "555",
+ "name": "血港鬼影",
+ "alias": "Pyke",
+ "title": "派克",
+ "roles": ["support", "assassin"],
+ "isWeekFree": "0",
+ "attack": "9",
+ "defense": "3",
+ "magic": "1",
+ "difficulty": "7",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/555.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/555.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "血港鬼影,派克,pk,xggy,Pyke,xuegangguiying,paike",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/555000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Pyke.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big555000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big555001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big555009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big555016.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/555000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/555001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/555009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/555016.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/555000.jpg"
+ },
+ {
+ "heroId": "711",
+ "name": "愁云使者",
+ "alias": "Vex",
+ "title": "薇古丝",
+ "roles": ["mage"],
+ "isWeekFree": "0",
+ "attack": "0",
+ "defense": "0",
+ "magic": "0",
+ "difficulty": "0",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/711.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/711.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/711000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Vex.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big711000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big711001.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/711000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/711001.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/711000.jpg"
+ },
+ {
+ "heroId": "777",
+ "name": "封魔剑魂",
+ "alias": "Yone",
+ "title": "永恩",
+ "roles": ["assassin", "fighter"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "4",
+ "magic": "4",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/777.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/777.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "永恩,封魔剑魂,ye,fmjh,Yone,yongen,fengmojianhun",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/777000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Yone.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big777000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big777001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big777010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/777000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/777001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/777010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/777000.jpg"
+ },
+ {
+ "heroId": "875",
+ "name": "腕豪",
+ "alias": "Sett",
+ "title": "瑟提",
+ "roles": ["fighter", "tank"],
+ "isWeekFree": "0",
+ "attack": "8",
+ "defense": "5",
+ "magic": "1",
+ "difficulty": "2",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/875.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/875.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "腕豪,瑟提,jinfu,jf,Sett,st,wh,wanhao,seti",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/875000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Sett.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big875000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big875001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big875008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big875010.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big875009.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/875000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/875001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/875008.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/875009.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/875010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/875000.jpg"
+ },
+ {
+ "heroId": "876",
+ "name": "含羞蓓蕾",
+ "alias": "Lillia",
+ "title": "莉莉娅",
+ "roles": ["fighter", "mage"],
+ "isWeekFree": "0",
+ "attack": "0",
+ "defense": "2",
+ "magic": "10",
+ "difficulty": "8",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/876.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/876.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "含羞蓓蕾,莉莉娅,小鹿,lly,hxbl,Lillia,hanxiubeilei,liliya,xiaolu",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/876000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Lillia.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big876000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big876001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big876010.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/876000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/876001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/876010.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/876000.jpg"
+ },
+ {
+ "heroId": "887",
+ "name": "灵罗娃娃",
+ "alias": "Gwen",
+ "title": "格温",
+ "roles": ["fighter", "assassin"],
+ "isWeekFree": "0",
+ "attack": "7",
+ "defense": "4",
+ "magic": "5",
+ "difficulty": "5",
+ "selectAudio": "https://game.gtimg.cn/images/lol/act/img/vo/choose/887.ogg",
+ "banAudio": "https://game.gtimg.cn/images/lol/act/img/vo/ban/887.ogg",
+ "isARAMweekfree": "0",
+ "ispermanentweekfree": "0",
+ "changeLabel": "无改动",
+ "goldPrice": "6300",
+ "couponPrice": "4500",
+ "camp": "",
+ "campId": "",
+ "keywords": "灵罗娃娃,格温,灵,娃wa,gw,Gw,,lingluowawa,gewen,ling,wa",
+ "bigImg": "https://game.gtimg.cn/images/lol/act/img/skinloading/887000.jpg",
+ "avatar": "https://game.gtimg.cn/images/lol/act/img/champion/Gwen.png",
+ "skins": [
+ "https://game.gtimg.cn/images/lol/act/img/skin/big887000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big887001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skin/big887011.jpg"
+ ],
+ "posters": [
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/887000.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/887001.jpg",
+ "https://game.gtimg.cn/images/lol/act/img/skinloading/887011.jpg"
+ ],
+ "big_avatar": "https://game.gtimg.cn/images/lol/act/img/skinloading/887000.jpg"
+ }
+]
diff --git a/mocks/demo/hero/index.ts b/mocks/demo/hero/index.ts
new file mode 100644
index 0000000..4748fec
--- /dev/null
+++ b/mocks/demo/hero/index.ts
@@ -0,0 +1,37 @@
+import { HttpResponse, delay, http } from 'msw';
+import { getQuery, resultPageSuccess, resultSuccess, serverApi } from '../../_util';
+import heroListJson from './_heroList.json';
+import heroLoLListJson from './_lolHeroList.json';
+
+export default [
+ http.get(serverApi('/demo/wzry/hero_list'), async ({ request }) => {
+ await delay(500);
+ const { page = 1, pageSize = 10, cname = '', title = '' } = getQuery(request);
+
+ const filterResult = heroListJson.filter((n) => {
+ return n.cname.includes(cname) && n.title.includes(title);
+ });
+
+ return HttpResponse.json(resultPageSuccess(page, pageSize, filterResult));
+ }),
+ http.get(serverApi('/demo/lol/hero_list'), async ({ request }) => {
+ // 接口地址: https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js
+ await delay(500);
+
+ const { page = 1, pageSize = 10, title = '', name = '' } = getQuery(request);
+
+ const filterResult = heroLoLListJson.filter((n) => {
+ return n.title.includes(title) && n.name.includes(name);
+ });
+
+ return HttpResponse.json(resultPageSuccess(page, pageSize, filterResult));
+ }),
+ http.get(serverApi('/demo/lol/hero_info/:id'), async ({ params }) => {
+ await delay(300);
+ const { id } = params;
+
+ const result = heroLoLListJson.find((n) => n.heroId == id);
+
+ return HttpResponse.json(resultSuccess(result));
+ }),
+];
diff --git a/mocks/demo/select.ts b/mocks/demo/select.ts
new file mode 100644
index 0000000..e9d47a1
--- /dev/null
+++ b/mocks/demo/select.ts
@@ -0,0 +1,23 @@
+import { http, HttpResponse, delay } from 'msw';
+import { getQuery, resultSuccess, serverApi } from '../_util';
+
+const demoList = (keyword, count = 20) => {
+ const result = [] as any[];
+
+ for (let index = 0; index < count; index++) {
+ result.push({
+ name: `${keyword ?? ''}选项${index}`,
+ id: `${index}`,
+ });
+ }
+ return result;
+};
+
+export default [
+ http.get(serverApi('/select/getDemoOptions'), async ({ request }) => {
+ await delay(1000);
+ const { keyword, count } = getQuery(request);
+
+ return HttpResponse.json(resultSuccess(demoList(keyword, count)));
+ }),
+];
diff --git a/mocks/index.ts b/mocks/index.ts
new file mode 100644
index 0000000..59e28de
--- /dev/null
+++ b/mocks/index.ts
@@ -0,0 +1,25 @@
+// import { enableMocking } from '@admin-pkg/vite-plugin-msw';
+// import { HttpHandler } from 'msw';
+
+// const modules = import.meta.glob('./**/*.ts', {
+// eager: true,
+// });
+
+// export const setupMock = async () => {
+// const handlers = Object.values(modules).reduce((prev, curr) => {
+// const arr = curr?.default;
+// if (Array.isArray(arr)) {
+// arr.forEach((item) => {
+// if (item instanceof HttpHandler) {
+// prev.push(item);
+// }
+// });
+// }
+// return prev;
+// }, []);
+// console.log('handlers', handlers);
+// await enableMocking(handlers, {
+// // 设置为 true 则不会在浏览器控制台输出 log 信息
+// quiet: false,
+// });
+// };
diff --git a/mocks/list.ts b/mocks/list.ts
new file mode 100644
index 0000000..074ea96
--- /dev/null
+++ b/mocks/list.ts
@@ -0,0 +1,28 @@
+import { http, HttpResponse, delay } from 'msw';
+import { faker } from '@faker-js/faker/locale/zh_CN';
+import { serverApi } from './_util';
+
+export default [
+ http.get(serverApi('/list'), async () => {
+ await delay(1000);
+ return HttpResponse.json(
+ Array.from({ length: 10 }).map(() => ({
+ fullname: faker.person.fullName(),
+ email: faker.internet.email(),
+ avatar: faker.image.avatar(),
+ address: faker.location.streetAddress(),
+ })),
+ );
+ }),
+ http.get(serverApi('/list'), async () => {
+ await delay(1000);
+ return HttpResponse.json(
+ Array.from({ length: 10 }).map(() => ({
+ fullname: faker.person.fullName(),
+ email: faker.internet.email(),
+ avatar: faker.image.avatar(),
+ address: faker.location.streetAddress(),
+ })),
+ );
+ }),
+];
diff --git a/mocks/user.ts b/mocks/user.ts
new file mode 100644
index 0000000..99db5f2
--- /dev/null
+++ b/mocks/user.ts
@@ -0,0 +1,24 @@
+import { http, HttpResponse, delay } from 'msw';
+import { faker } from '@faker-js/faker/locale/zh_CN';
+import { serverApi } from './_util';
+
+export default [
+ http.get(serverApi('/user/:id'), async () => {
+ await delay(1000);
+ return HttpResponse.json(
+ Array.from({ length: 10 }).map(() => ({
+ fullname: faker.person.fullName(),
+ email: faker.internet.email(),
+ avatar: faker.image.avatar(),
+ address: faker.location.streetAddress(),
+ })),
+ );
+ }),
+ http.get(serverApi('/login'), async () => {
+ await delay(1000);
+ return HttpResponse.json({
+ code: 200,
+ data: '登录成功',
+ });
+ }),
+];
diff --git a/openapi.config.ts b/openapi.config.ts
new file mode 100644
index 0000000..94cf06e
--- /dev/null
+++ b/openapi.config.ts
@@ -0,0 +1,67 @@
+import { generateService } from '@umijs/openapi';
+import type { RequestOptions } from './src/utils/request';
+
+const re = /controller[-_ .](\w)/gi;
+
+// swagger-typescript-api
+generateService({
+ schemaPath: 'http://127.0.0.1:7001/api-docs-json',
+ serversPath: './src/api/backend',
+ requestOptionsType: 'RequestOptions',
+ // 自定义网络请求函数路径
+ requestImportStatement: 'import { request, type RequestOptions } from "@/utils/request";',
+ hook: {
+ // @ts-ignore
+ customFunctionName(operationObject, apiPath) {
+ const { operationId } = operationObject;
+
+ if (!operationId) {
+ console.warn('[Warning] no operationId', apiPath);
+ return;
+ }
+
+ const funcName = operationId.replace(re, (_all, letter) => letter.toUpperCase());
+
+ operationObject.operationId = funcName;
+
+ return funcName;
+ },
+ // @ts-ignore
+ customFileNames(operationObject, apiPath) {
+ const { operationId } = operationObject;
+
+ if (!operationId) {
+ console.warn('[Warning] no operationId', apiPath);
+ return;
+ }
+ const controllerName = operationId.split(re)[0];
+ const moduleName = operationObject.tags?.[0].split(' - ')[0];
+
+ if (moduleName === controllerName) {
+ return [controllerName];
+ } else if (moduleName && moduleName !== controllerName) {
+ return [`${moduleName}_${controllerName}`];
+ }
+ return;
+ },
+ customType(schemaObject, namespace, defaultGetType) {
+ const type = defaultGetType(schemaObject, namespace);
+ // 提取出 data 的类型
+ const regex = /API\.ResOp & { 'data'\?: (.+); }/;
+ return type.replace(regex, '$1');
+ },
+ customOptionsDefaultValue(data): RequestOptions {
+ const { summary } = data;
+
+ if (summary?.startsWith('创建') || summary?.startsWith('新增')) {
+ return { successMsg: '创建成功' };
+ } else if (summary?.startsWith('更新')) {
+ return { successMsg: '更新成功' };
+ } else if (summary?.startsWith('删除')) {
+ return { successMsg: '删除成功' };
+ }
+
+ return {};
+ },
+ },
+});
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..b74a464
--- /dev/null
+++ b/package.json
@@ -0,0 +1,155 @@
+{
+ "name": "huaxin-base-frontend",
+ "version": "1.0.0",
+ "packageManager": "pnpm@8.10.2",
+ "engines": {
+ "node": ">=18"
+ },
+ "author": {
+ "name": "luzixun",
+ "email": "869322496@qq.com",
+ "url": "https://github.com/869322496"
+ },
+ "scripts": {
+ "bootstrap": "pnpm install",
+ "serve": "npm run dev",
+ "dev": "vite",
+ "build": "rimraf dist && cross-env NODE_ENV=production vite build",
+ "build:watch": "rimraf dist && cross-env NODE_ENV=production vite build --watch",
+ "preview": "npm run build && vite preview",
+ "preview:dist": "vite preview",
+ "deploy": "bash deploy.sh",
+ "openapi": "npx tsx openapi.config.ts",
+ "clean:cache": "npx rimraf node_modules/.cache/ && npx rimraf node_modules/.vite",
+ "clean:lib": "npx rimraf node_modules packages/*/node_modules",
+ "format": "prettier --write .",
+ "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx,.md,.json --max-warnings 0 && pretty-quick --check --branch main",
+ "lint:fix": "eslint --fix . --ext .vue,.js,.ts,.jsx,.tsx,.md,.json && pretty-quick --branch main",
+ "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
+ "lint:prettier": "prettier --write \"src/**/*.{js,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",
+ "gen:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",
+ "reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
+ "test:gzip": "npx http-server dist --cors --gzip -c-1",
+ "test:br": "npx http-server dist --cors --brotli -c-1",
+ "commitlint": "commitlint --config commitlint.config.cjs -e -V",
+ "c": "git add . && git cz && git push",
+ "release": "standard-version"
+ },
+ "dependencies": {
+ "@ant-design/icons-vue": "~7.0.1",
+ "@iconify/vue": "^4.1.1",
+ "@tinymce/tinymce-vue": "^5.1.1",
+ "@vueuse/core": "~10.8.0",
+ "ant-design-vue": "~4.1.2",
+ "axios": "~1.6.7",
+ "dayjs": "~1.11.10",
+ "echarts": "^5.5.0",
+ "file-saver": "~2.0.5",
+ "lodash-es": "~4.17.21",
+ "mitt": "~3.0.1",
+ "nprogress": "~1.0.0-1",
+ "pinia": "~2.1.7",
+ "qiniu-js": "^3.4.2",
+ "qs": "~6.11.2",
+ "sortablejs": "~1.15.2",
+ "tinymce": "^6.8.3",
+ "vue": "~3.4.19",
+ "vue-echarts": "^6.6.9",
+ "vue-i18n": "9.9.1",
+ "vue-router": "~4.3.0",
+ "vue-types": "~5.1.1",
+ "vue-virtual-scroller": "2.0.0-beta.8",
+ "xlsx": "~0.18.5"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "~18.6.0",
+ "@commitlint/config-conventional": "~18.6.0",
+ "@faker-js/faker": "^8.4.1",
+ "@iconify-json/ant-design": "^1.1.15",
+ "@iconify-json/ep": "^1.1.14",
+ "@iconify/json": "^2.2.180",
+ "@types/lodash-es": "~4.17.12",
+ "@types/node": "~20.11.16",
+ "@typescript-eslint/eslint-plugin": "~7.0.2",
+ "@typescript-eslint/parser": "~7.0.2",
+ "@umijs/openapi": "^1.10.1",
+ "@vitejs/plugin-vue": "~5.0.4",
+ "@vitejs/plugin-vue-jsx": "~3.1.0",
+ "@vue/tsconfig": "^0.5.1",
+ "commitizen": "~4.3.0",
+ "cliui": "^8.0.1",
+ "cz-customizable": "^7.0.0",
+ "conventional-changelog-cli": "~4.1.0",
+ "standard-version": "^9.5.0",
+ "core-js": "^3.36.0",
+ "cross-env": "~7.0.3",
+ "eslint": "~8.57.0",
+ "eslint-config-prettier": "~9.1.0",
+ "eslint-define-config": "~2.1.0",
+ "eslint-plugin-import": "~2.29.1",
+ "eslint-plugin-prettier": "~5.1.3",
+ "eslint-plugin-vue": "~9.22.0",
+ "husky": "~9.0.10",
+ "less": "~4.2.0",
+ "lightningcss": "^1.24.0",
+ "lint-staged": "~15.2.2",
+ "mockjs": "~1.1.0",
+ "msw": "^2.2.1",
+ "postcss": "~8.4.34",
+ "postcss-html": "~1.6.0",
+ "postcss-less": "~6.0.0",
+ "prettier": "~3.2.5",
+ "pretty-quick": "~4.0.0",
+ "rimraf": "~5.0.5",
+ "stylelint": "~16.2.1",
+ "stylelint-config-property-sort-order-smacss": "^10.0.0",
+ "stylelint-config-recommended": "~14.0.0",
+ "stylelint-config-recommended-vue": "~1.5.0",
+ "stylelint-config-standard": "~36.0.0",
+ "stylelint-order": "~6.0.4",
+ "stylelint-prettier": "^5.0.0",
+ "terser": "~5.28.1",
+ "ts-node": "^10.9.2",
+ "typescript": "~5.3.3",
+ "unocss": "^0.58.5",
+ "unplugin-vue-components": "~0.26.0",
+ "vite": "~5.1.4",
+ "vite-plugin-checker": "~0.6.4",
+ "vite-plugin-mkcert": "^1.17.3",
+ "vite-plugin-svg-icons": "~2.0.1",
+ "vue-eslint-parser": "~9.4.2",
+ "vue-tsc": "~1.8.27"
+ },
+ "keywords": [
+ "vue",
+ "ant-design-vue",
+ "vue3",
+ "ts",
+ "tsx",
+ "admin",
+ "typescript"
+ ],
+ "target": "web",
+ "pnpm": {
+ "peerDependencyRules": {
+ "ignoreMissing": [
+ "rollup"
+ ],
+ "allowedVersions": {
+ "postcss": "5"
+ }
+ }
+ },
+ "config": {
+ "commitizen": {
+ "path": "cz-customizable"
+ }
+ },
+ "lint-staged": {
+ "*.{js,ts,jsx,tsx,vue}": [
+ "npm run lint"
+ ]
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..8bf0290
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,12319 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@ant-design/icons-vue':
+ specifier: ~7.0.1
+ version: 7.0.1(vue@3.4.19)
+ '@iconify/vue':
+ specifier: ^4.1.1
+ version: 4.1.1(vue@3.4.19)
+ '@tinymce/tinymce-vue':
+ specifier: ^5.1.1
+ version: 5.1.1(vue@3.4.19)
+ '@vueuse/core':
+ specifier: ~10.8.0
+ version: 10.8.0(vue@3.4.19)
+ ant-design-vue:
+ specifier: ~4.1.2
+ version: 4.1.2(vue@3.4.19)
+ axios:
+ specifier: ~1.6.7
+ version: 1.6.7(debug@4.3.4)
+ dayjs:
+ specifier: ~1.11.10
+ version: 1.11.10
+ echarts:
+ specifier: ^5.5.0
+ version: 5.5.0
+ file-saver:
+ specifier: ~2.0.5
+ version: 2.0.5
+ lodash-es:
+ specifier: ~4.17.21
+ version: 4.17.21
+ mitt:
+ specifier: ~3.0.1
+ version: 3.0.1
+ nprogress:
+ specifier: ~1.0.0-1
+ version: 1.0.0-1
+ pinia:
+ specifier: ~2.1.7
+ version: 2.1.7(typescript@5.3.3)(vue@3.4.19)
+ qiniu-js:
+ specifier: ^3.4.2
+ version: 3.4.2
+ qs:
+ specifier: ~6.11.2
+ version: 6.11.2
+ sortablejs:
+ specifier: ~1.15.2
+ version: 1.15.2
+ tinymce:
+ specifier: ^6.8.3
+ version: 6.8.3
+ vue:
+ specifier: ~3.4.19
+ version: 3.4.19(typescript@5.3.3)
+ vue-echarts:
+ specifier: ^6.6.9
+ version: 6.6.9(echarts@5.5.0)(vue@3.4.19)
+ vue-i18n:
+ specifier: 9.9.1
+ version: 9.9.1(vue@3.4.19)
+ vue-router:
+ specifier: ~4.3.0
+ version: 4.3.0(vue@3.4.19)
+ vue-types:
+ specifier: ~5.1.1
+ version: 5.1.1(vue@3.4.19)
+ vue-virtual-scroller:
+ specifier: 2.0.0-beta.8
+ version: 2.0.0-beta.8(vue@3.4.19)
+ xlsx:
+ specifier: ~0.18.5
+ version: 0.18.5
+
+devDependencies:
+ '@commitlint/cli':
+ specifier: ~18.6.0
+ version: 18.6.0(@types/node@20.11.16)(typescript@5.3.3)
+ '@commitlint/config-conventional':
+ specifier: ~18.6.0
+ version: 18.6.0
+ '@faker-js/faker':
+ specifier: ^8.4.1
+ version: 8.4.1
+ '@iconify-json/ant-design':
+ specifier: ^1.1.15
+ version: 1.1.15
+ '@iconify-json/ep':
+ specifier: ^1.1.14
+ version: 1.1.14
+ '@iconify/json':
+ specifier: ^2.2.180
+ version: 2.2.180
+ '@types/lodash-es':
+ specifier: ~4.17.12
+ version: 4.17.12
+ '@types/node':
+ specifier: ~20.11.16
+ version: 20.11.16
+ '@typescript-eslint/eslint-plugin':
+ specifier: ~7.0.2
+ version: 7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/parser':
+ specifier: ~7.0.2
+ version: 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ '@umijs/openapi':
+ specifier: ^1.10.1
+ version: 1.10.1
+ '@vitejs/plugin-vue':
+ specifier: ~5.0.4
+ version: 5.0.4(vite@5.1.4)(vue@3.4.19)
+ '@vitejs/plugin-vue-jsx':
+ specifier: ~3.1.0
+ version: 3.1.0(vite@5.1.4)(vue@3.4.19)
+ '@vue/tsconfig':
+ specifier: ^0.5.1
+ version: 0.5.1
+ cliui:
+ specifier: ^8.0.1
+ version: 8.0.1
+ commitizen:
+ specifier: ~4.3.0
+ version: 4.3.0(@types/node@20.11.16)(typescript@5.3.3)
+ conventional-changelog-cli:
+ specifier: ~4.1.0
+ version: 4.1.0
+ core-js:
+ specifier: ^3.36.0
+ version: 3.36.0
+ cross-env:
+ specifier: ~7.0.3
+ version: 7.0.3
+ cz-customizable:
+ specifier: ^7.0.0
+ version: 7.0.0
+ eslint:
+ specifier: ~8.57.0
+ version: 8.57.0
+ eslint-config-prettier:
+ specifier: ~9.1.0
+ version: 9.1.0(eslint@8.57.0)
+ eslint-define-config:
+ specifier: ~2.1.0
+ version: 2.1.0
+ eslint-plugin-import:
+ specifier: ~2.29.1
+ version: 2.29.1(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)
+ eslint-plugin-prettier:
+ specifier: ~5.1.3
+ version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
+ eslint-plugin-vue:
+ specifier: ~9.22.0
+ version: 9.22.0(eslint@8.57.0)
+ husky:
+ specifier: ~9.0.10
+ version: 9.0.10
+ less:
+ specifier: ~4.2.0
+ version: 4.2.0
+ lightningcss:
+ specifier: ^1.24.0
+ version: 1.24.0
+ lint-staged:
+ specifier: ~15.2.2
+ version: 15.2.2
+ mockjs:
+ specifier: ~1.1.0
+ version: 1.1.0
+ msw:
+ specifier: ^2.2.1
+ version: 2.2.1(typescript@5.3.3)
+ postcss:
+ specifier: ~8.4.34
+ version: 8.4.34
+ postcss-html:
+ specifier: ~1.6.0
+ version: 1.6.0
+ postcss-less:
+ specifier: ~6.0.0
+ version: 6.0.0(postcss@8.4.34)
+ prettier:
+ specifier: ~3.2.5
+ version: 3.2.5
+ pretty-quick:
+ specifier: ~4.0.0
+ version: 4.0.0(prettier@3.2.5)
+ rimraf:
+ specifier: ~5.0.5
+ version: 5.0.5
+ standard-version:
+ specifier: ^9.5.0
+ version: 9.5.0
+ stylelint:
+ specifier: ~16.2.1
+ version: 16.2.1(typescript@5.3.3)
+ stylelint-config-property-sort-order-smacss:
+ specifier: ^10.0.0
+ version: 10.0.0(stylelint@16.2.1)
+ stylelint-config-recommended:
+ specifier: ~14.0.0
+ version: 14.0.0(stylelint@16.2.1)
+ stylelint-config-recommended-vue:
+ specifier: ~1.5.0
+ version: 1.5.0(postcss-html@1.6.0)(stylelint@16.2.1)
+ stylelint-config-standard:
+ specifier: ~36.0.0
+ version: 36.0.0(stylelint@16.2.1)
+ stylelint-order:
+ specifier: ~6.0.4
+ version: 6.0.4(stylelint@16.2.1)
+ stylelint-prettier:
+ specifier: ^5.0.0
+ version: 5.0.0(prettier@3.2.5)(stylelint@16.2.1)
+ terser:
+ specifier: ~5.28.1
+ version: 5.28.1
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3)
+ typescript:
+ specifier: ~5.3.3
+ version: 5.3.3
+ unocss:
+ specifier: ^0.58.5
+ version: 0.58.5(postcss@8.4.34)(vite@5.1.4)
+ unplugin-vue-components:
+ specifier: ~0.26.0
+ version: 0.26.0(vue@3.4.19)
+ vite:
+ specifier: ~5.1.4
+ version: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ vite-plugin-checker:
+ specifier: ~0.6.4
+ version: 0.6.4(eslint@8.57.0)(stylelint@16.2.1)(typescript@5.3.3)(vite@5.1.4)(vue-tsc@1.8.27)
+ vite-plugin-mkcert:
+ specifier: ^1.17.3
+ version: 1.17.3(vite@5.1.4)
+ vite-plugin-svg-icons:
+ specifier: ~2.0.1
+ version: 2.0.1(vite@5.1.4)
+ vue-eslint-parser:
+ specifier: ~9.4.2
+ version: 9.4.2(eslint@8.57.0)
+ vue-tsc:
+ specifier: ~1.8.27
+ version: 1.8.27(typescript@5.3.3)
+
+packages:
+
+ /@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /@ampproject/remapping@2.2.1:
+ resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@ant-design/colors@6.0.0:
+ resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
+ dependencies:
+ '@ctrl/tinycolor': 3.6.1
+ dev: false
+
+ /@ant-design/icons-svg@4.3.1:
+ resolution: {integrity: sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==}
+ dev: false
+
+ /@ant-design/icons-vue@7.0.1(vue@3.4.19):
+ resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==}
+ peerDependencies:
+ vue: '>=3.0.3'
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-svg': 4.3.1
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /@antfu/install-pkg@0.1.1:
+ resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==}
+ dependencies:
+ execa: 5.1.1
+ find-up: 5.0.0
+ dev: true
+
+ /@antfu/utils@0.7.7:
+ resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
+ dev: true
+
+ /@babel/code-frame@7.12.11:
+ resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==}
+ dependencies:
+ '@babel/highlight': 7.23.4
+ dev: true
+
+ /@babel/code-frame@7.23.5:
+ resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.23.4
+ chalk: 2.4.2
+ dev: true
+
+ /@babel/compat-data@7.23.5:
+ resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/core@7.23.7:
+ resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helpers': 7.23.8
+ '@babel/parser': 7.23.9
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.7
+ '@babel/types': 7.23.9
+ convert-source-map: 2.0.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/core@7.23.9:
+ resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9)
+ '@babel/helpers': 7.23.9
+ '@babel/parser': 7.23.9
+ '@babel/template': 7.23.9
+ '@babel/traverse': 7.23.9
+ '@babel/types': 7.23.9
+ convert-source-map: 2.0.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/eslint-parser@7.23.3(@babel/core@7.23.7)(eslint@7.32.0):
+ resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==}
+ engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0
+ eslint: ^7.5.0 || ^8.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+ eslint: 7.32.0
+ eslint-visitor-keys: 2.1.0
+ semver: 6.3.1
+ dev: true
+
+ /@babel/eslint-parser@7.23.3(@babel/core@7.23.9)(eslint@7.32.0):
+ resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==}
+ engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0
+ eslint: ^7.5.0 || ^8.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+ eslint: 7.32.0
+ eslint-visitor-keys: 2.1.0
+ semver: 6.3.1
+ dev: true
+
+ /@babel/generator@7.23.6:
+ resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ jsesc: 2.5.2
+ dev: true
+
+ /@babel/helper-annotate-as-pure@7.22.5:
+ resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.6
+ dev: true
+
+ /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
+ resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-compilation-targets@7.23.6:
+ resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.22.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7):
+ resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.9):
+ resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7):
+ resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ regexpu-core: 5.3.2
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.7):
+ resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.22.5
+ debug: 4.3.4
+ lodash.debounce: 4.0.8
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helper-environment-visitor@7.22.20:
+ resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-function-name@7.23.0:
+ resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-hoist-variables@7.22.5:
+ resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-member-expression-to-functions@7.23.0:
+ resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-module-imports@7.22.15:
+ resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.6
+ dev: true
+
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-simple-access': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: true
+
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-simple-access': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: true
+
+ /@babel/helper-optimise-call-expression@7.22.5:
+ resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-plugin-utils@7.22.5:
+ resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7):
+ resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-wrap-function': 7.22.20
+ dev: true
+
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7):
+ resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ dev: true
+
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9):
+ resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ dev: true
+
+ /@babel/helper-simple-access@7.22.5:
+ resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+ resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-split-export-declaration@7.22.6:
+ resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-string-parser@7.23.4:
+ resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier@7.22.20:
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-option@7.23.5:
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-wrap-function@7.22.20:
+ resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-function-name': 7.23.0
+ '@babel/template': 7.23.9
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helpers@7.23.8:
+ resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.7
+ '@babel/types': 7.23.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/helpers@7.23.9:
+ resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.23.9
+ '@babel/traverse': 7.23.9
+ '@babel/types': 7.23.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/highlight@7.23.4:
+ resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+
+ /@babel/parser@7.23.6:
+ resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/parser@7.23.9:
+ resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.23.9
+
+ /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7):
+ resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7):
+ resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+ engines: {node: '>=6.9.0'}
+ deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-proposal-decorators@7.23.7(@babel/core@7.23.7):
+ resolution: {integrity: sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7):
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ dev: true
+
+ /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7):
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7):
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.7):
+ resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7):
+ resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
+ '@babel/helper-split-export-declaration': 7.22.6
+ globals: 11.12.0
+ dev: true
+
+ /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/template': 7.23.9
+ dev: true
+
+ /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7):
+ resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-simple-access': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-simple-access': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.7):
+ resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: true
+
+ /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.7
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.7):
+ resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7)
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ regenerator-transform: 0.15.2
+ dev: true
+
+ /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7):
+ resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9):
+ resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.9)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9)
+ dev: true
+
+ /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/preset-env@7.23.9(@babel/core@7.23.7):
+ resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.7
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7)
+ '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.7)
+ '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7)
+ '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7)
+ '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.7)
+ '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7)
+ '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7)
+ babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7)
+ babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.7)
+ babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7)
+ core-js-compat: 3.35.1
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7):
+ 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
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/types': 7.23.9
+ esutils: 2.0.3
+ dev: true
+
+ /@babel/preset-react@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7)
+ '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.7)
+ '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/preset-typescript@7.23.3(@babel/core@7.23.7):
+ resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7)
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7)
+ dev: true
+
+ /@babel/preset-typescript@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9)
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9)
+ dev: true
+
+ /@babel/regjsgen@0.8.0:
+ resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+ dev: true
+
+ /@babel/runtime-corejs2@7.23.8:
+ resolution: {integrity: sha512-U7JI0Qne1eSenXriL+BynbS4GyJE5nwGW/L72RnqOPJ+lgAZvEHS/jHtfU001R8NxD0Y/fqWKrHBoSBg8g2Vqw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ core-js: 2.6.12
+ regenerator-runtime: 0.14.1
+ dev: false
+
+ /@babel/runtime@7.23.8:
+ resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ /@babel/template@7.22.15:
+ resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.6
+ '@babel/types': 7.23.6
+ dev: true
+
+ /@babel/template@7.23.9:
+ resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.9
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/traverse@7.23.7:
+ resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.23.6
+ '@babel/types': 7.23.6
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/traverse@7.23.9:
+ resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.23.9
+ '@babel/types': 7.23.9
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/types@7.23.6:
+ resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+ dev: true
+
+ /@babel/types@7.23.9:
+ resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+
+ /@bundled-es-modules/cookie@2.0.0:
+ resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==}
+ dependencies:
+ cookie: 0.5.0
+ dev: true
+
+ /@bundled-es-modules/statuses@1.0.1:
+ resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
+ dependencies:
+ statuses: 2.0.1
+ dev: true
+
+ /@commitlint/cli@18.6.0(@types/node@20.11.16)(typescript@5.3.3):
+ resolution: {integrity: sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w==}
+ engines: {node: '>=v18'}
+ hasBin: true
+ dependencies:
+ '@commitlint/format': 18.6.0
+ '@commitlint/lint': 18.6.0
+ '@commitlint/load': 18.6.0(@types/node@20.11.16)(typescript@5.3.3)
+ '@commitlint/read': 18.6.0
+ '@commitlint/types': 18.6.0
+ execa: 5.1.1
+ lodash.isfunction: 3.0.9
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+ dev: true
+
+ /@commitlint/config-conventional@18.6.0:
+ resolution: {integrity: sha512-CDCOf2eJz9D/TL44IBks0stM9TmdLCNE2B48owIU3YCadwzts/bobXPScagIgPQF6hhKYMEdj5zpUDlmbwuqwQ==}
+ engines: {node: '>=v18'}
+ dependencies:
+ conventional-changelog-conventionalcommits: 7.0.2
+ dev: true
+
+ /@commitlint/config-validator@18.6.0:
+ resolution: {integrity: sha512-Ptfa865arNozlkjxrYG3qt6wT9AlhNUHeuDyKEZiTL/l0ftncFhK/KN0t/EAMV2tec+0Mwxo0FmhbESj/bI+1g==}
+ engines: {node: '>=v18'}
+ requiresBuild: true
+ dependencies:
+ '@commitlint/types': 18.6.0
+ ajv: 8.12.0
+ dev: true
+
+ /@commitlint/ensure@18.6.0:
+ resolution: {integrity: sha512-xY07NmOBJ7JuhX3tic021PaeLepZARIQyqpAQoNQZoml1keBFfB6MbA7XlWZv0ebbarUFE4yhKxOPw+WFv7/qw==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/types': 18.6.0
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
+ dev: true
+
+ /@commitlint/execute-rule@18.4.4:
+ resolution: {integrity: sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==}
+ engines: {node: '>=v18'}
+ requiresBuild: true
+ dev: true
+
+ /@commitlint/format@18.6.0:
+ resolution: {integrity: sha512-8UNWfs2slPPSQiiVpLGJTnPHv7Jkd5KYxfbNXbmLL583bjom4RrylvyrCVnmZReA8nNad7pPXq6mDH4FNVj6xg==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/types': 18.6.0
+ chalk: 4.1.2
+ dev: true
+
+ /@commitlint/is-ignored@18.6.0:
+ resolution: {integrity: sha512-Xjx/ZyyJ4FdLuz0FcOvqiqSFgiO2yYj3QN9XlvyrxqbXTxPVC7QFEXJYBVPulUSN/gR7WXH1Udw+HYYfD17xog==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/types': 18.6.0
+ semver: 7.5.4
+ dev: true
+
+ /@commitlint/lint@18.6.0:
+ resolution: {integrity: sha512-ycbuDWfyykPmslgiHzhz8dL6F0BJYltXLVfc+M49z0c+FNITM0v+r0Vd2+Tdtq06VTc894p2+YSmZhulY8Jn3Q==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/is-ignored': 18.6.0
+ '@commitlint/parse': 18.6.0
+ '@commitlint/rules': 18.6.0
+ '@commitlint/types': 18.6.0
+ dev: true
+
+ /@commitlint/load@18.6.0(@types/node@20.11.16)(typescript@5.3.3):
+ resolution: {integrity: sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/config-validator': 18.6.0
+ '@commitlint/execute-rule': 18.4.4
+ '@commitlint/resolve-extends': 18.6.0
+ '@commitlint/types': 18.6.0
+ chalk: 4.1.2
+ cosmiconfig: 8.3.6(typescript@5.3.3)
+ cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.16)(cosmiconfig@8.3.6)(typescript@5.3.3)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+ dev: true
+
+ /@commitlint/message@18.4.4:
+ resolution: {integrity: sha512-lHF95mMDYgAI1LBXveJUyg4eLaMXyOqJccCK3v55ZOEUsMPrDi8upqDjd/NmzWmESYihaOMBTAnxm+6oD1WoDQ==}
+ engines: {node: '>=v18'}
+ dev: true
+
+ /@commitlint/parse@18.6.0:
+ resolution: {integrity: sha512-Y/G++GJpATFw54O0jikc/h2ibyGHgghtPnwsOk3O/aU092ydJ5XEHYcd7xGNQYuLweLzQis2uEwRNk9AVIPbQQ==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/types': 18.6.0
+ conventional-changelog-angular: 7.0.0
+ conventional-commits-parser: 5.0.0
+ dev: true
+
+ /@commitlint/read@18.6.0:
+ resolution: {integrity: sha512-w39ji8VfWhPKRquPhRHB3Yd8XIHwaNHgOh28YI1QEmZ59qVpuVUQo6h/NsVb+uoC6LbXZiofTZv2iFR084jKEA==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/top-level': 18.4.4
+ '@commitlint/types': 18.6.0
+ git-raw-commits: 2.0.11
+ minimist: 1.2.8
+ dev: true
+
+ /@commitlint/resolve-extends@18.6.0:
+ resolution: {integrity: sha512-k2Xp+Fxeggki2i90vGrbiLDMefPius3zGSTFFlRAPKce/SWLbZtI+uqE9Mne23mHO5lmcSV8z5m6ziiJwGpOcg==}
+ engines: {node: '>=v18'}
+ requiresBuild: true
+ dependencies:
+ '@commitlint/config-validator': 18.6.0
+ '@commitlint/types': 18.6.0
+ import-fresh: 3.3.0
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ dev: true
+
+ /@commitlint/rules@18.6.0:
+ resolution: {integrity: sha512-pTalvCEvuCWrBWZA/YqO/3B3nZnY3Ncc+TmQsRajBdC1tkQIm5Iovdo4Ec7f2Dw1tVvpYMUUNAgcWqsY0WckWg==}
+ engines: {node: '>=v18'}
+ dependencies:
+ '@commitlint/ensure': 18.6.0
+ '@commitlint/message': 18.4.4
+ '@commitlint/to-lines': 18.4.4
+ '@commitlint/types': 18.6.0
+ execa: 5.1.1
+ dev: true
+
+ /@commitlint/to-lines@18.4.4:
+ resolution: {integrity: sha512-mwe2Roa59NCz/krniAdCygFabg7+fQCkIhXqBHw00XQ8Y7lw4poZLLxeGI3p3bLpcEOXdqIDrEGLwHmG5lBdwQ==}
+ engines: {node: '>=v18'}
+ dev: true
+
+ /@commitlint/top-level@18.4.4:
+ resolution: {integrity: sha512-PBwW1drgeavl9CadB7IPRUk6rkUP/O8jEkxjlC+ofuh3pw0bzJdAT+Kw7M1Yc9KtTb9xTaqUB8uvRtaybHa/tQ==}
+ engines: {node: '>=v18'}
+ dependencies:
+ find-up: 5.0.0
+ dev: true
+
+ /@commitlint/types@18.6.0:
+ resolution: {integrity: sha512-oavoKLML/eJa2rJeyYSbyGAYzTxQ6voG5oeX3OrxpfrkRWhJfm4ACnhoRf5tgiybx2MZ+EVFqC1Lw3W8/uwpZA==}
+ engines: {node: '>=v18'}
+ dependencies:
+ chalk: 4.1.2
+ dev: true
+
+ /@cspotcode/source-map-support@0.8.1:
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+ dev: true
+
+ /@csstools/css-parser-algorithms@2.5.0(@csstools/css-tokenizer@2.2.3):
+ resolution: {integrity: sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^2.2.3
+ dependencies:
+ '@csstools/css-tokenizer': 2.2.3
+ dev: true
+
+ /@csstools/css-tokenizer@2.2.3:
+ resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==}
+ engines: {node: ^14 || ^16 || >=18}
+ dev: true
+
+ /@csstools/media-query-list-parser@2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3):
+ resolution: {integrity: sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^2.5.0
+ '@csstools/css-tokenizer': ^2.2.3
+ dependencies:
+ '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3)
+ '@csstools/css-tokenizer': 2.2.3
+ dev: true
+
+ /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15):
+ resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss-selector-parser: ^6.0.13
+ dependencies:
+ postcss-selector-parser: 6.0.15
+ dev: true
+
+ /@ctrl/tinycolor@3.6.1:
+ resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
+ dev: false
+
+ /@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
+ dev: false
+
+ /@esbuild/aix-ppc64@0.19.11:
+ resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.19.11:
+ resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.19.11:
+ resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.19.11:
+ resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.19.11:
+ resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.19.11:
+ resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.19.11:
+ resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.19.11:
+ resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.19.11:
+ resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.19.11:
+ resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.19.11:
+ resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.19.11:
+ resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.19.11:
+ resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.19.11:
+ resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.19.11:
+ resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.19.11:
+ resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.19.11:
+ resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.19.11:
+ resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.19.11:
+ resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.19.11:
+ resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.19.11:
+ resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.19.11:
+ resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.19.11:
+ resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 7.32.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.10.0:
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@0.4.3:
+ resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 7.3.1
+ globals: 13.24.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ js-yaml: 3.14.1
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.0
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js@8.57.0:
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@exodus/schemasafe@1.3.0:
+ resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==}
+ dev: true
+
+ /@faker-js/faker@8.4.1:
+ resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'}
+ dev: true
+
+ /@humanwhocodes/config-array@0.11.14:
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.2
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/config-array@0.5.0:
+ resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 1.2.1
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema@1.2.1:
+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ dev: true
+
+ /@humanwhocodes/object-schema@2.0.2:
+ resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
+ dev: true
+
+ /@hutson/parse-repository-url@3.0.2:
+ resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@hutson/parse-repository-url@5.0.0:
+ resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /@iconify-json/ant-design@1.1.15:
+ resolution: {integrity: sha512-E8XLyDo2HWVeVT8ViNTxF2+0Vgcox8FC73G4v64AM+lvlWpERcY90g7jXoBOeykl1pQCf1awkQUwjkynZ8Xb7A==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ dev: true
+
+ /@iconify-json/ep@1.1.14:
+ resolution: {integrity: sha512-F5tuycil4mEYNLtKcHRcPVOFOiN9nT+9wjTSUm27aIH/ylrKEoZWmB6sBXSLa1IUvsqPOlWXgz3ohISzknSQ5A==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ dev: true
+
+ /@iconify/json@2.2.180:
+ resolution: {integrity: sha512-Kww6uD6fi+9qSeXAUGo6bQgTm5vprMEvTENVaZXL3qfa9KHICWZaGsVETpjn3WiTwcUPgN6P2/GXLzhuFulm7w==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ pathe: 1.1.2
+ dev: true
+
+ /@iconify/types@2.0.0:
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ /@iconify/utils@2.1.22:
+ resolution: {integrity: sha512-6UHVzTVXmvO8uS6xFF+L/QTSpTzA/JZxtgU+KYGFyDYMEObZ1bu/b5l+zNJjHy+0leWjHI+C0pXlzGvv3oXZMA==}
+ dependencies:
+ '@antfu/install-pkg': 0.1.1
+ '@antfu/utils': 0.7.7
+ '@iconify/types': 2.0.0
+ debug: 4.3.4
+ kolorist: 1.8.0
+ local-pkg: 0.5.0
+ mlly: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@iconify/vue@4.1.1(vue@3.4.19):
+ resolution: {integrity: sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg==}
+ peerDependencies:
+ vue: '>=3'
+ dependencies:
+ '@iconify/types': 2.0.0
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /@inquirer/confirm@3.0.0:
+ resolution: {integrity: sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/core': 7.0.0
+ '@inquirer/type': 1.2.0
+ dev: true
+
+ /@inquirer/core@7.0.0:
+ resolution: {integrity: sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/type': 1.2.0
+ '@types/mute-stream': 0.0.4
+ '@types/node': 20.11.16
+ '@types/wrap-ansi': 3.0.0
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-spinners: 2.9.2
+ cli-width: 4.1.0
+ figures: 3.2.0
+ mute-stream: 1.0.0
+ run-async: 3.0.0
+ signal-exit: 4.1.0
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ dev: true
+
+ /@inquirer/type@1.2.0:
+ resolution: {integrity: sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /@intlify/core-base@9.9.1:
+ resolution: {integrity: sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/message-compiler': 9.9.1
+ '@intlify/shared': 9.9.1
+ dev: false
+
+ /@intlify/message-compiler@9.9.1:
+ resolution: {integrity: sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/shared': 9.9.1
+ source-map-js: 1.0.2
+ dev: false
+
+ /@intlify/shared@9.9.1:
+ resolution: {integrity: sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==}
+ engines: {node: '>= 16'}
+ dev: false
+
+ /@isaacs/cliui@8.0.2:
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: /string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: /strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: /wrap-ansi@7.0.0
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.3:
+ resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@jridgewell/resolve-uri@3.1.1:
+ resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/set-array@1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/source-map@0.3.5:
+ resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ /@jridgewell/trace-mapping@0.3.22:
+ resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /@jridgewell/trace-mapping@0.3.9:
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /@mswjs/cookies@1.1.0:
+ resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /@mswjs/interceptors@0.25.16:
+ resolution: {integrity: sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@open-draft/deferred-promise': 2.2.0
+ '@open-draft/logger': 0.3.0
+ '@open-draft/until': 2.1.0
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ strict-event-emitter: 0.5.1
+ dev: true
+
+ /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
+ resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+ dependencies:
+ eslint-scope: 5.1.1
+ dev: true
+
+ /@nodelib/fs.scandir@2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat@2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /@nodelib/fs.walk@1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.16.0
+ dev: true
+
+ /@octokit/auth-token@4.0.0:
+ resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
+ engines: {node: '>= 18'}
+ dev: true
+
+ /@octokit/core@5.1.0:
+ resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/auth-token': 4.0.0
+ '@octokit/graphql': 7.0.2
+ '@octokit/request': 8.1.6
+ '@octokit/request-error': 5.0.1
+ '@octokit/types': 12.4.0
+ before-after-hook: 2.2.3
+ universal-user-agent: 6.0.1
+ dev: true
+
+ /@octokit/endpoint@9.0.4:
+ resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/types': 12.4.0
+ universal-user-agent: 6.0.1
+ dev: true
+
+ /@octokit/graphql@7.0.2:
+ resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/request': 8.1.6
+ '@octokit/types': 12.4.0
+ universal-user-agent: 6.0.1
+ dev: true
+
+ /@octokit/openapi-types@19.1.0:
+ resolution: {integrity: sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==}
+ dev: true
+
+ /@octokit/plugin-paginate-rest@9.1.5(@octokit/core@5.1.0):
+ resolution: {integrity: sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=5'
+ dependencies:
+ '@octokit/core': 5.1.0
+ '@octokit/types': 12.4.0
+ dev: true
+
+ /@octokit/plugin-request-log@4.0.0(@octokit/core@5.1.0):
+ resolution: {integrity: sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=5'
+ dependencies:
+ '@octokit/core': 5.1.0
+ dev: true
+
+ /@octokit/plugin-rest-endpoint-methods@10.2.0(@octokit/core@5.1.0):
+ resolution: {integrity: sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=5'
+ dependencies:
+ '@octokit/core': 5.1.0
+ '@octokit/types': 12.4.0
+ dev: true
+
+ /@octokit/request-error@5.0.1:
+ resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/types': 12.4.0
+ deprecation: 2.3.1
+ once: 1.4.0
+ dev: true
+
+ /@octokit/request@8.1.6:
+ resolution: {integrity: sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/endpoint': 9.0.4
+ '@octokit/request-error': 5.0.1
+ '@octokit/types': 12.4.0
+ universal-user-agent: 6.0.1
+ dev: true
+
+ /@octokit/rest@20.0.2:
+ resolution: {integrity: sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==}
+ engines: {node: '>= 18'}
+ dependencies:
+ '@octokit/core': 5.1.0
+ '@octokit/plugin-paginate-rest': 9.1.5(@octokit/core@5.1.0)
+ '@octokit/plugin-request-log': 4.0.0(@octokit/core@5.1.0)
+ '@octokit/plugin-rest-endpoint-methods': 10.2.0(@octokit/core@5.1.0)
+ dev: true
+
+ /@octokit/types@12.4.0:
+ resolution: {integrity: sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==}
+ dependencies:
+ '@octokit/openapi-types': 19.1.0
+ dev: true
+
+ /@open-draft/deferred-promise@2.2.0:
+ resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
+ dev: true
+
+ /@open-draft/logger@0.3.0:
+ resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==}
+ dependencies:
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ dev: true
+
+ /@open-draft/until@2.1.0:
+ resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ dev: true
+
+ /@pkgjs/parseargs@0.11.0:
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@pkgr/core@0.1.1:
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ dev: true
+
+ /@polka/url@1.0.0-next.24:
+ resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
+ dev: true
+
+ /@rollup/pluginutils@5.1.0:
+ resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ '@types/estree': 1.0.5
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /@rollup/rollup-android-arm-eabi@4.9.6:
+ resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-android-arm64@4.9.6:
+ resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-arm64@4.9.6:
+ resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-x64@4.9.6:
+ resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm-gnueabihf@4.9.6:
+ resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-gnu@4.9.6:
+ resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-musl@4.9.6:
+ resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-riscv64-gnu@4.9.6:
+ resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-gnu@4.9.6:
+ resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-musl@4.9.6:
+ resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-arm64-msvc@4.9.6:
+ resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-ia32-msvc@4.9.6:
+ resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-x64-msvc@4.9.6:
+ resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@simonwep/pickr@1.8.2:
+ resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
+ dependencies:
+ core-js: 3.36.0
+ nanopop: 2.4.1
+ dev: false
+
+ /@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39):
+ resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+ peerDependencies:
+ postcss: '>=7.0.0 || 5'
+ postcss-syntax: '>=0.36.2'
+ dependencies:
+ '@babel/core': 7.23.9
+ postcss: 7.0.39
+ postcss-syntax: 0.36.2(postcss-html@1.6.0)(postcss-less@6.0.0)(postcss@8.4.34)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@stylelint/postcss-markdown@0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39):
+ resolution: {integrity: sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==}
+ deprecated: 'Use the original unforked package instead: postcss-markdown'
+ peerDependencies:
+ postcss: '>=7.0.0 || 5'
+ postcss-syntax: '>=0.36.2'
+ dependencies:
+ postcss: 7.0.39
+ postcss-syntax: 0.36.2(postcss-html@1.6.0)(postcss-less@6.0.0)(postcss@8.4.34)
+ remark: 13.0.0
+ unist-util-find-all-after: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@tinymce/tinymce-vue@5.1.1(vue@3.4.19):
+ resolution: {integrity: sha512-iO57HOWesFOhsaqjA5Ea6sDvQBmJJH3/dq00Uvg7metlct2kLF+ctRgoDsetLt6gmeZ7COPftr814/XzqnJ/dg==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ tinymce: 6.8.3
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /@trysound/sax@0.2.0:
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /@tsconfig/node10@1.0.9:
+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
+ dev: true
+
+ /@tsconfig/node12@1.0.11:
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+ dev: true
+
+ /@tsconfig/node14@1.0.3:
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+ dev: true
+
+ /@tsconfig/node16@1.0.4:
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+ dev: true
+
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ dev: true
+
+ /@types/eslint@7.29.0:
+ resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
+ dev: true
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ dev: true
+
+ /@types/glob@7.2.0:
+ resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 20.11.16
+ dev: true
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ dev: true
+
+ /@types/json5@0.0.29:
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ dev: true
+
+ /@types/lodash-es@4.17.12:
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
+ dependencies:
+ '@types/lodash': 4.14.202
+ dev: true
+
+ /@types/lodash@4.14.202:
+ resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
+ dev: true
+
+ /@types/mdast@3.0.15:
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ dev: true
+
+ /@types/minimatch@5.1.2:
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ dev: true
+
+ /@types/minimist@1.2.5:
+ resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
+ dev: true
+
+ /@types/mute-stream@0.0.4:
+ resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
+ dependencies:
+ '@types/node': 20.11.16
+ dev: true
+
+ /@types/node@20.11.16:
+ resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==}
+ dependencies:
+ undici-types: 5.26.5
+ dev: true
+
+ /@types/normalize-package-data@2.4.4:
+ resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ dev: true
+
+ /@types/parse-json@4.0.2:
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+ dev: true
+
+ /@types/semver@7.5.6:
+ resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
+ dev: true
+
+ /@types/statuses@2.0.4:
+ resolution: {integrity: sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==}
+ dev: true
+
+ /@types/svgo@2.6.4:
+ resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
+ dependencies:
+ '@types/node': 20.11.16
+ dev: true
+
+ /@types/unist@2.0.10:
+ resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
+ dev: true
+
+ /@types/web-bluetooth@0.0.20:
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+ dev: false
+
+ /@types/wrap-ansi@3.0.0:
+ resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==}
+ dev: true
+
+ /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@4.9.5):
+ 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
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/type-utils': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 7.32.0
+ graphemer: 1.4.0
+ ignore: 5.3.0
+ natural-compare-lite: 1.4.0
+ semver: 7.6.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/eslint-plugin@7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^7.0.0
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/scope-manager': 7.0.2
+ '@typescript-eslint/type-utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ '@typescript-eslint/visitor-keys': 7.0.2
+ debug: 4.3.4
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.0
+ natural-compare: 1.4.0
+ semver: 7.5.4
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/experimental-utils@4.33.0(eslint@7.32.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ peerDependencies:
+ eslint: '*'
+ dependencies:
+ '@types/json-schema': 7.0.15
+ '@typescript-eslint/scope-manager': 4.33.0
+ '@typescript-eslint/types': 4.33.0
+ '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5)
+ eslint: 7.32.0
+ eslint-scope: 5.1.1
+ eslint-utils: 3.0.0(eslint@7.32.0)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@4.9.5):
+ 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
+ dependencies:
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 7.32.0
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 7.0.2
+ '@typescript-eslint/types': 7.0.2
+ '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3)
+ '@typescript-eslint/visitor-keys': 7.0.2
+ debug: 4.3.4
+ eslint: 8.57.0
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager@4.33.0:
+ resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==}
+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+ dependencies:
+ '@typescript-eslint/types': 4.33.0
+ '@typescript-eslint/visitor-keys': 4.33.0
+ dev: 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}
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ dev: true
+
+ /@typescript-eslint/scope-manager@7.0.2:
+ resolution: {integrity: sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 7.0.2
+ '@typescript-eslint/visitor-keys': 7.0.2
+ dev: true
+
+ /@typescript-eslint/type-utils@5.62.0(eslint@7.32.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ '@typescript-eslint/utils': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 7.32.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/type-utils@7.0.2(eslint@8.57.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3)
+ '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ debug: 4.3.4
+ eslint: 8.57.0
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types@4.33.0:
+ resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==}
+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+ dev: true
+
+ /@typescript-eslint/types@5.62.0:
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@typescript-eslint/types@7.0.2:
+ resolution: {integrity: sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5):
+ resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 4.33.0
+ '@typescript-eslint/visitor-keys': 4.33.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5):
+ 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
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/typescript-estree@7.0.2(typescript@5.3.3):
+ resolution: {integrity: sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 7.0.2
+ '@typescript-eslint/visitor-keys': 7.0.2
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.5.4
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils@5.62.0(eslint@7.32.0)(typescript@4.9.5):
+ 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
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.6
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ eslint: 7.32.0
+ eslint-scope: 5.1.1
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/utils@7.0.2(eslint@8.57.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.6
+ '@typescript-eslint/scope-manager': 7.0.2
+ '@typescript-eslint/types': 7.0.2
+ '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3)
+ eslint: 8.57.0
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys@4.33.0:
+ resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==}
+ engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
+ dependencies:
+ '@typescript-eslint/types': 4.33.0
+ eslint-visitor-keys: 2.1.0
+ dev: true
+
+ /@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}
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@typescript-eslint/visitor-keys@7.0.2:
+ resolution: {integrity: sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 7.0.2
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@umijs/fabric@2.14.1:
+ resolution: {integrity: sha512-fOyXcbViOB+/jW+g2rCiK9XjSZVn4OzFuMZpSCriCdR/KxhxLTokvJWFm3CzBEmg9vXfrBFQ4c/ykmqoVacHtw==}
+ hasBin: true
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/eslint-parser': 7.23.3(@babel/core@7.23.7)(eslint@7.32.0)
+ '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7)
+ '@babel/plugin-proposal-decorators': 7.23.7(@babel/core@7.23.7)
+ '@babel/preset-env': 7.23.9(@babel/core@7.23.7)
+ '@babel/preset-react': 7.23.3(@babel/core@7.23.7)
+ '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7)
+ '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/parser': 5.62.0(eslint@7.32.0)(typescript@4.9.5)
+ chalk: 4.1.2
+ eslint: 7.32.0
+ eslint-config-prettier: 8.10.0(eslint@7.32.0)
+ eslint-formatter-pretty: 4.1.0
+ eslint-plugin-babel: 5.3.1(eslint@7.32.0)
+ eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@7.32.0)(typescript@4.9.5)
+ eslint-plugin-promise: 6.1.1(eslint@7.32.0)
+ eslint-plugin-react: 7.33.2(eslint@7.32.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@7.32.0)
+ eslint-plugin-unicorn: 20.1.0(eslint@7.32.0)
+ fast-glob: 3.3.2
+ os-locale: 5.0.0
+ prettier: 2.8.8
+ prettier-plugin-packagejson: 2.3.0(prettier@2.8.8)
+ prettier-plugin-two-style-order: 1.0.1(prettier@2.8.8)
+ stylelint: 13.13.1
+ stylelint-config-css-modules: 2.3.0(stylelint@13.13.1)
+ stylelint-config-prettier: 8.0.2(stylelint@13.13.1)
+ stylelint-config-standard: 20.0.0(stylelint@13.13.1)
+ stylelint-declaration-block-no-ignored-properties: 2.8.0(stylelint@13.13.1)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - postcss-jsx
+ - postcss-markdown
+ - supports-color
+ dev: true
+
+ /@umijs/openapi@1.10.1:
+ resolution: {integrity: sha512-9wfTgJ9ByeOJ2IJVfObeTx1DjNZS/4iLooIv5SJO3pxCi9NUevKkEGkRU2WHmxRwJzkWiQXewnoNkBO/rXHPWw==}
+ dependencies:
+ '@umijs/fabric': 2.14.1
+ chalk: 4.1.2
+ dayjs: 1.11.10
+ glob: 7.2.3
+ lodash: 4.17.21
+ memoizee: 0.4.15
+ mock.js: 0.2.0
+ mockjs: 1.1.0
+ node-fetch: 2.7.0
+ nunjucks: 3.2.4
+ openapi3-ts: 2.0.2
+ prettier: 2.8.8
+ reserved-words: 0.1.2
+ rimraf: 3.0.2
+ swagger2openapi: 7.0.8
+ tiny-pinyin: 1.3.2
+ transitivePeerDependencies:
+ - chokidar
+ - encoding
+ - postcss-jsx
+ - postcss-markdown
+ - supports-color
+ dev: true
+
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ dev: true
+
+ /@unocss/astro@0.58.5(vite@5.1.4):
+ resolution: {integrity: sha512-LtuVnj8oFAK9663OVhQO8KpdJFiOyyPsYfnOZlDCOFK3gHb/2WMrzdBwr1w8LoQF3bDedkFMKirVF7gWjyZiaw==}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ peerDependenciesMeta:
+ vite:
+ optional: true
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/reset': 0.58.5
+ '@unocss/vite': 0.58.5(vite@5.1.4)
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /@unocss/cli@0.58.5:
+ resolution: {integrity: sha512-FzVVXO9ghsGtJpu9uR4o7JeM9gUfWNbVZZ/IfH+0WbDJuyx4rO/jwN55z0yA5QDkhvOz9DvzwPCBzLpTJ5q+Lw==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@rollup/pluginutils': 5.1.0
+ '@unocss/config': 0.58.5
+ '@unocss/core': 0.58.5
+ '@unocss/preset-uno': 0.58.5
+ cac: 6.7.14
+ chokidar: 3.5.3
+ colorette: 2.0.20
+ consola: 3.2.3
+ fast-glob: 3.3.2
+ magic-string: 0.30.7
+ pathe: 1.1.2
+ perfect-debounce: 1.0.0
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /@unocss/config@0.58.5:
+ resolution: {integrity: sha512-O1pLSeNXfG11QHaLSVwS9rJKvE4b9304IQ3UvOdbYN+7SAT4YTZ7JDU4ngO1KWyOFBO6RD0WspCR95pgqOqJiQ==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@unocss/core': 0.58.5
+ unconfig: 0.3.11
+ dev: true
+
+ /@unocss/core@0.58.5:
+ resolution: {integrity: sha512-qbPqL+46hf1/UelQOwUwpAuvm6buoss43DPYHOPdfNJ+NTWkSpATQMF0JKT04QE0QRQbHNSHdMe9ariG+IIlCw==}
+ dev: true
+
+ /@unocss/extractor-arbitrary-variants@0.58.5:
+ resolution: {integrity: sha512-KJQX0OJKzy4YjJo09h2la2Q+cn5IJ1JdyPVJJkzovHnv7jSBWzsfct+bj/6a+SJ4p4JBIqEJz3M/qxHv4EPJyA==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/inspector@0.58.5:
+ resolution: {integrity: sha512-cbJlIHEZ14puTtttf7sl+VZFDscV1DJiSseh9sSe0xJ/1NVBT9Bvkm09/1tnpLYAgF5gfa1CaCcjKmURgYzKrA==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ gzip-size: 6.0.0
+ sirv: 2.0.4
+ dev: true
+
+ /@unocss/postcss@0.58.5(postcss@8.4.34):
+ resolution: {integrity: sha512-m4L2YRdYfT6CV306Kl2VwEwbqa/92EpW4GE2Kqak1RuJyFJXBnWEEMJV4Uy6B1jWKLlCEWkuVUW33JUg7X6BxQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ postcss: ^8.4.21 || 5
+ dependencies:
+ '@unocss/config': 0.58.5
+ '@unocss/core': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ css-tree: 2.3.1
+ fast-glob: 3.3.2
+ magic-string: 0.30.7
+ postcss: 8.4.34
+ dev: true
+
+ /@unocss/preset-attributify@0.58.5:
+ resolution: {integrity: sha512-OR4gUHamHCb4/LB/zZHlibaraTyILfFvRIzgmJnEb6lITGApQUl86qaJcTbTyfTfLVRufLG/JVeuz2HLUBPRXw==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/preset-icons@0.58.5:
+ resolution: {integrity: sha512-LDNXavHtWaIvMvBezT9O8yiqHJChVCEfTRO6YFVY0yy+wo5jHiuMh6iKeHVcwbYdn3NqHYmpi7b/hrXPMtODzA==}
+ dependencies:
+ '@iconify/utils': 2.1.22
+ '@unocss/core': 0.58.5
+ ofetch: 1.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@unocss/preset-mini@0.58.5:
+ resolution: {integrity: sha512-WqD31fKUAN28OCUOyi1uremmLk0eTMqtCizjbbXsY/DP6RKYUT7trFAtppTcHWFhSQcknb4FURfAZppACsTVQQ==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/extractor-arbitrary-variants': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ dev: true
+
+ /@unocss/preset-tagify@0.58.5:
+ resolution: {integrity: sha512-UB9IXi8vA/SzmmRLMWR7bzeBpxpiRo7y9xk3ruvDddYlsyiwIeDIMwG23YtcA6q41FDQvkrmvTxUEH9LFlv6aA==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/preset-typography@0.58.5:
+ resolution: {integrity: sha512-rFny4a9yxgY34XOom5euCqQaOLV8PpbTg0Pn+5FelUMG4OfMevTwBCe9JttFJcUc3cNTL2enkzIdMa3l66114g==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/preset-mini': 0.58.5
+ dev: true
+
+ /@unocss/preset-uno@0.58.5:
+ resolution: {integrity: sha512-vgq/R4f7RDmdROy+pX+PeE38I3SgYKd4LL7Wb1HJUaVwz7PkF0XHCynOTbwrPXnK1kp1cnZYYEww7/RiYp+IQQ==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/preset-mini': 0.58.5
+ '@unocss/preset-wind': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ dev: true
+
+ /@unocss/preset-web-fonts@0.58.5:
+ resolution: {integrity: sha512-WKZ5raSClFXhqzfAhApef3+fuMq6cjKBxvhJ1FBIxFKcSOvN8e2czty2iGQVl02yMsxBWMv0Bpfm7np+cCoI1w==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ ofetch: 1.3.3
+ dev: true
+
+ /@unocss/preset-wind@0.58.5:
+ resolution: {integrity: sha512-54RkjLmlqMUlC8o8nDCVzB25D1zzK4eth+/3uQzt739qU0U92NxuZKY21ADj9Rp/mVhKBV5FKuXPjmYc6yTQRQ==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/preset-mini': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ dev: true
+
+ /@unocss/reset@0.58.5:
+ resolution: {integrity: sha512-2wMrkCj3SSb5hrx9TKs5jZa34QIRkHv9FotbJutAPo7o8hx+XXn56ogzdoUrcFPJZJUx2R2nyOVbSlGMIjtFtw==}
+ dev: true
+
+ /@unocss/rule-utils@0.58.5:
+ resolution: {integrity: sha512-w0sGJoeUGwMWLVFLEE9PDiv/fQcQqZnTIIQLYNCjTdqXDRlwTp9ACW0h47x/hAAIXdOtEOOBuTfjGD79GznUmA==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@unocss/core': 0.58.5
+ magic-string: 0.30.7
+ dev: true
+
+ /@unocss/scope@0.58.5:
+ resolution: {integrity: sha512-vSentagAwYTnThGRCjzZ6eNSSRuzdWBl21L1BbvVNM91Ss/FugQnZ1hd0m3TrVvvStYXnFVHMQ/MjCAEJ4cMYg==}
+ dev: true
+
+ /@unocss/transformer-attributify-jsx-babel@0.58.5:
+ resolution: {integrity: sha512-IAWSSKN3V0D87DE8bqaaPrZBWOdWQ06QNfi9vRuQJfRWOui87ezi9+NffjcnQw/ap9xMk1O6z74/WOW3zo6uYA==}
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9)
+ '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9)
+ '@unocss/core': 0.58.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@unocss/transformer-attributify-jsx@0.58.5:
+ resolution: {integrity: sha512-sItEALyvAt3PZLd9Q1tlIATjaj3kWbS/qI3otUVsYBdZjP4UudzJ3D1fcWNL2WPlgz8KtlVzRUuxob8TQ4ibZg==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/transformer-compile-class@0.58.5:
+ resolution: {integrity: sha512-4MaxjaZo1rf5uHvDGa2mbnXxAYVYoj1+oRNpL4fE3FoExS1Ka2CiNGQn/S4bHMF51vmXMSWtOzurJpPD4BaJUQ==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/transformer-directives@0.58.5:
+ resolution: {integrity: sha512-allspF5TlT1B2bJSZ1houHScXOTaTPlatLiEmgQKzr/m93rCvktokaO5J6qeN2VXQdpTIsxdA5B8//7UkfTuIA==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ '@unocss/rule-utils': 0.58.5
+ css-tree: 2.3.1
+ dev: true
+
+ /@unocss/transformer-variant-group@0.58.5:
+ resolution: {integrity: sha512-SjUwGzKK5CVqn7Gg+3v3hV47ZUll7GcGu0vR3RCLO4gqEfFlZWMTHml1Sl2sY1WAca2iVcDRu+dp0RLxRG/dUA==}
+ dependencies:
+ '@unocss/core': 0.58.5
+ dev: true
+
+ /@unocss/vite@0.58.5(vite@5.1.4):
+ resolution: {integrity: sha512-p4o1XNX1rvjmoUqSSdua8XyWNg/d+YUChDd2L/xEty+6j2qv0wUaohs3UQ87vWlv632/UmgdX+2MbrgtqthCtw==}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@rollup/pluginutils': 5.1.0
+ '@unocss/config': 0.58.5
+ '@unocss/core': 0.58.5
+ '@unocss/inspector': 0.58.5
+ '@unocss/scope': 0.58.5
+ '@unocss/transformer-directives': 0.58.5
+ chokidar: 3.5.3
+ fast-glob: 3.3.2
+ magic-string: 0.30.7
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /@vitejs/plugin-vue-jsx@3.1.0(vite@5.1.4)(vue@3.4.19):
+ 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
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7)
+ '@vue/babel-plugin-jsx': 1.2.0(@babel/core@7.23.7)
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ vue: 3.4.19(typescript@5.3.3)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vitejs/plugin-vue@5.0.4(vite@5.1.4)(vue@3.4.19):
+ resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ vue: 3.4.19(typescript@5.3.3)
+ dev: true
+
+ /@volar/language-core@1.11.1:
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
+ dependencies:
+ '@volar/source-map': 1.11.1
+ dev: true
+
+ /@volar/source-map@1.11.1:
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
+ dependencies:
+ muggle-string: 0.3.1
+ dev: true
+
+ /@volar/typescript@1.11.1:
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+ dev: true
+
+ /@vue/babel-helper-vue-transform-on@1.2.0:
+ resolution: {integrity: sha512-Zn6iRYAVvWl835GCcNsLUroy+jwNjH1yd83hvKNSgbiCkzeZwXvEFCC1u0lVKwoqL7z0IcrtY3dkBMuMxwB1fw==}
+ dev: true
+
+ /@vue/babel-plugin-jsx@1.2.0(@babel/core@7.23.7):
+ resolution: {integrity: sha512-z0t7fjk03TqncyWYoChKQ4rWx1LXJaw1kNEDrUU5tbPWI2zkCPv2imQJOYlJ8GyTDoQ6/nD82asFcSxDRJ8YgQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7)
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.7
+ '@babel/types': 7.23.6
+ '@vue/babel-helper-vue-transform-on': 1.2.0
+ '@vue/babel-plugin-resolve-type': 1.2.0-beta.0(@babel/core@7.23.7)
+ camelcase: 6.3.0
+ html-tags: 3.3.1
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vue/babel-plugin-resolve-type@1.2.0-beta.0(@babel/core@7.23.7):
+ resolution: {integrity: sha512-zG5nXU+89UjXHVvvf0yehU0MDF1caJssCUF+bU5HWevEoR5qoRLt7wX6rNTtG/ZKHFUvB8BibIKL62Ix167Wxg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/core': 7.23.7
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/parser': 7.23.6
+ '@vue/compiler-sfc': 3.4.19
+ dev: true
+
+ /@vue/compiler-core@3.4.19:
+ resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/shared': 3.4.19
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.0.2
+
+ /@vue/compiler-dom@3.4.19:
+ resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==}
+ dependencies:
+ '@vue/compiler-core': 3.4.19
+ '@vue/shared': 3.4.19
+
+ /@vue/compiler-sfc@3.4.19:
+ resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/compiler-core': 3.4.19
+ '@vue/compiler-dom': 3.4.19
+ '@vue/compiler-ssr': 3.4.19
+ '@vue/shared': 3.4.19
+ estree-walker: 2.0.2
+ magic-string: 0.30.7
+ postcss: 8.4.35
+ source-map-js: 1.0.2
+
+ /@vue/compiler-ssr@3.4.19:
+ resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==}
+ dependencies:
+ '@vue/compiler-dom': 3.4.19
+ '@vue/shared': 3.4.19
+
+ /@vue/devtools-api@6.5.1:
+ resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
+ dev: false
+
+ /@vue/language-core@1.8.27(typescript@5.3.3):
+ resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.4.19
+ '@vue/shared': 3.4.19
+ computeds: 0.0.1
+ minimatch: 9.0.3
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ typescript: 5.3.3
+ vue-template-compiler: 2.7.16
+ dev: true
+
+ /@vue/reactivity@3.4.19:
+ resolution: {integrity: sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==}
+ dependencies:
+ '@vue/shared': 3.4.19
+
+ /@vue/runtime-core@3.4.19:
+ resolution: {integrity: sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==}
+ dependencies:
+ '@vue/reactivity': 3.4.19
+ '@vue/shared': 3.4.19
+
+ /@vue/runtime-dom@3.4.19:
+ resolution: {integrity: sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==}
+ dependencies:
+ '@vue/runtime-core': 3.4.19
+ '@vue/shared': 3.4.19
+ csstype: 3.1.3
+
+ /@vue/server-renderer@3.4.19(vue@3.4.19):
+ resolution: {integrity: sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==}
+ peerDependencies:
+ vue: 3.4.19
+ dependencies:
+ '@vue/compiler-ssr': 3.4.19
+ '@vue/shared': 3.4.19
+ vue: 3.4.19(typescript@5.3.3)
+
+ /@vue/shared@3.4.19:
+ resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==}
+
+ /@vue/tsconfig@0.5.1:
+ resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
+ dev: true
+
+ /@vueuse/core@10.8.0(vue@3.4.19):
+ resolution: {integrity: sha512-G9Ok9fjx10TkNIPn8V1dJmK1NcdJCtYmDRyYiTMUyJ1p0Tywc1zmOoCQ2xhHYyz8ULBU4KjIJQ9n+Lrty74iVw==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.8.0
+ '@vueuse/shared': 10.8.0(vue@3.4.19)
+ vue-demi: 0.14.7(vue@3.4.19)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /@vueuse/metadata@10.8.0:
+ resolution: {integrity: sha512-Nim/Vle5OgXcXhAvGOgkJQXB1Yb+Kq/fMbLuv3YYDYbiQrwr39ljuD4k9fPeq4yUyokYRo2RaNQmbbIMWB/9+w==}
+ dev: false
+
+ /@vueuse/shared@10.8.0(vue@3.4.19):
+ resolution: {integrity: sha512-dUdy6zwHhULGxmr9YUg8e+EnB39gcM4Fe2oKBSrh3cOsV30JcMPtsyuspgFCUo5xxFNaeMf/W2yyKfST7Bg8oQ==}
+ dependencies:
+ vue-demi: 0.14.7(vue@3.4.19)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+ dev: true
+
+ /a-sync-waterfall@1.0.1:
+ resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==}
+ dev: true
+
+ /acorn-jsx@5.3.2(acorn@7.4.1):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 7.4.1
+ dev: true
+
+ /acorn-jsx@5.3.2(acorn@8.11.3):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.11.3
+ dev: true
+
+ /acorn-walk@8.3.2:
+ resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
+ /acorn@7.4.1:
+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /add-stream@1.0.0:
+ resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
+ dev: true
+
+ /adler-32@1.3.1:
+ resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /ajv@8.12.0:
+ resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /ansi-escapes@3.2.0:
+ resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
+ dev: true
+
+ /ansi-escapes@6.2.0:
+ resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ type-fest: 3.13.1
+ dev: true
+
+ /ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ansi-regex@3.0.1:
+ resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /ansi-styles@2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /ant-design-vue@4.1.2(vue@3.4.19):
+ resolution: {integrity: sha512-ynFkDJLlHgumeK6Hr1UZ7PvQNZ1uBcri/pmejBdS3kRqHeA5VRsxneYDwa8YxA+uYB5YfT2jpYsSHsiMiCjRGg==}
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ vue: '>=3.2.0'
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-vue': 7.0.1(vue@3.4.19)
+ '@babel/runtime': 7.23.8
+ '@ctrl/tinycolor': 3.6.1
+ '@emotion/hash': 0.9.1
+ '@emotion/unitless': 0.8.1
+ '@simonwep/pickr': 1.8.2
+ array-tree-filter: 2.1.0
+ async-validator: 4.2.5
+ csstype: 3.1.3
+ dayjs: 1.11.10
+ dom-align: 1.12.4
+ dom-scroll-into-view: 2.0.1
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ resize-observer-polyfill: 1.5.1
+ scroll-into-view-if-needed: 2.2.31
+ shallow-equal: 1.2.1
+ stylis: 4.3.1
+ throttle-debounce: 5.0.0
+ vue: 3.4.19(typescript@5.3.3)
+ vue-types: 3.0.2(vue@3.4.19)
+ warning: 4.0.3
+ dev: false
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+ dev: true
+
+ /argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ dependencies:
+ sprintf-js: 1.0.3
+ dev: true
+
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
+ /arr-diff@4.0.0:
+ resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /arr-flatten@1.1.0:
+ resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /arr-union@3.1.0:
+ resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /array-buffer-byte-length@1.0.0:
+ resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+ dependencies:
+ call-bind: 1.0.5
+ is-array-buffer: 3.0.2
+ dev: true
+
+ /array-ify@1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+ dev: true
+
+ /array-includes@3.1.7:
+ resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ is-string: 1.0.7
+ dev: true
+
+ /array-tree-filter@2.1.0:
+ resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==}
+ dev: false
+
+ /array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /array-unique@0.3.2:
+ resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /array.prototype.findlastindex@1.2.3:
+ resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /array.prototype.flat@1.3.2:
+ resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.flatmap@1.3.2:
+ resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.tosorted@1.1.2:
+ resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /arraybuffer.prototype.slice@1.0.2:
+ resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.0
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ is-array-buffer: 3.0.2
+ is-shared-array-buffer: 1.0.2
+ dev: true
+
+ /arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+ dev: true
+
+ /assign-symbols@1.0.0:
+ resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+ dev: false
+
+ /asynciterator.prototype@1.0.0:
+ resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /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'}
+ dev: true
+
+ /atob@2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+ dev: true
+
+ /autoprefixer@9.8.8:
+ resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==}
+ hasBin: true
+ dependencies:
+ browserslist: 4.22.2
+ caniuse-lite: 1.0.30001579
+ normalize-range: 0.1.2
+ num2fraction: 1.2.2
+ picocolors: 0.2.1
+ postcss: 7.0.39
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /available-typed-arrays@1.0.5:
+ resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /axios@1.6.7(debug@4.3.4):
+ resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==}
+ dependencies:
+ follow-redirects: 1.15.5(debug@4.3.4)
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.7):
+ resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.7
+ '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.7):
+ resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7)
+ core-js-compat: 3.35.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.7):
+ resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.7
+ '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /bail@1.0.5:
+ resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==}
+ dev: true
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /balanced-match@2.0.0:
+ resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+ dev: true
+
+ /base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ dev: true
+
+ /base@0.11.2:
+ resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ cache-base: 1.0.1
+ class-utils: 0.3.6
+ component-emitter: 1.3.1
+ define-property: 1.0.0
+ isobject: 3.0.1
+ mixin-deep: 1.3.2
+ pascalcase: 0.1.1
+ dev: true
+
+ /before-after-hook@2.2.3:
+ resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
+ dev: true
+
+ /big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+ dev: true
+
+ /binary-extensions@2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ dev: true
+
+ /boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
+ /braces@2.3.2:
+ resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-flatten: 1.1.0
+ array-unique: 0.3.2
+ extend-shallow: 2.0.1
+ fill-range: 4.0.0
+ isobject: 3.0.1
+ repeat-element: 1.1.4
+ snapdragon: 0.8.2
+ snapdragon-node: 2.1.1
+ split-string: 3.1.0
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist@4.22.2:
+ resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001579
+ electron-to-chromium: 1.4.640
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.22.2)
+ dev: true
+
+ /browserslist@4.23.0:
+ resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001588
+ electron-to-chromium: 1.4.679
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.23.0)
+ dev: true
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
+
+ /buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: true
+
+ /cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /cache-base@1.0.1:
+ resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ collection-visit: 1.0.0
+ component-emitter: 1.3.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
+ dev: true
+
+ /cachedir@2.3.0:
+ resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /call-bind@1.0.5:
+ resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+ dependencies:
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.2
+ set-function-length: 1.2.0
+
+ /call-me-maybe@1.0.2:
+ resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
+ dev: true
+
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /camelcase-keys@6.2.2:
+ resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ camelcase: 5.3.1
+ map-obj: 4.3.0
+ quick-lru: 4.0.1
+ dev: true
+
+ /camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /caniuse-lite@1.0.30001579:
+ resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==}
+ dev: true
+
+ /caniuse-lite@1.0.30001588:
+ resolution: {integrity: sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==}
+ dev: true
+
+ /cfb@1.2.2:
+ resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ adler-32: 1.3.1
+ crc-32: 1.2.2
+ dev: false
+
+ /chalk@1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+ dev: true
+
+ /chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
+ /character-entities-legacy@1.1.4:
+ resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+ dev: true
+
+ /character-entities@1.2.4:
+ resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+ dev: true
+
+ /character-reference-invalid@1.1.4:
+ resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+ dev: true
+
+ /chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /ci-info@2.0.0:
+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+ dev: true
+
+ /class-utils@0.3.6:
+ resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-union: 3.1.0
+ define-property: 0.2.5
+ isobject: 3.0.1
+ static-extend: 0.1.2
+ dev: true
+
+ /clean-regexp@1.0.0:
+ resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
+ engines: {node: '>=4'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /cli-cursor@2.1.0:
+ resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
+ engines: {node: '>=4'}
+ dependencies:
+ restore-cursor: 2.0.0
+ dev: true
+
+ /cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: true
+
+ /cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ restore-cursor: 4.0.0
+ dev: true
+
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.0.0
+ dev: true
+
+ /cli-width@2.2.1:
+ resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
+ dev: true
+
+ /cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /cliui@7.0.4:
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /clone-regexp@2.2.0:
+ resolution: {integrity: sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==}
+ engines: {node: '>=6'}
+ dependencies:
+ is-regexp: 2.1.0
+ dev: true
+
+ /clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /clone@2.1.2:
+ resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+ engines: {node: '>=0.8'}
+ dev: true
+
+ /codepage@1.15.0:
+ resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /collection-visit@1.0.0:
+ resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ map-visit: 1.0.0
+ object-visit: 1.0.1
+ dev: true
+
+ /color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: true
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: true
+
+ /colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+ dev: true
+
+ /colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+
+ /commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ dev: true
+
+ /commander@5.1.0:
+ resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /commitizen@4.3.0(@types/node@20.11.16)(typescript@5.3.3):
+ resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ dependencies:
+ cachedir: 2.3.0
+ cz-conventional-changelog: 3.3.0(@types/node@20.11.16)(typescript@5.3.3)
+ dedent: 0.7.0
+ detect-indent: 6.1.0
+ find-node-modules: 2.1.3
+ find-root: 1.1.0
+ fs-extra: 9.1.0
+ glob: 7.2.3
+ inquirer: 8.2.5
+ is-utf8: 0.2.1
+ lodash: 4.17.21
+ minimist: 1.2.7
+ strip-bom: 4.0.0
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+ dev: true
+
+ /compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+ dev: true
+
+ /component-emitter@1.3.1:
+ resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
+ dev: true
+
+ /compute-scroll-into-view@1.0.20:
+ resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
+ dev: false
+
+ /computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /concat-stream@2.0.0:
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ typedarray: 0.0.6
+ dev: true
+
+ /consola@3.2.3:
+ resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+ dev: true
+
+ /conventional-changelog-angular@5.0.13:
+ resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-angular@7.0.0:
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+ engines: {node: '>=16'}
+ dependencies:
+ compare-func: 2.0.0
+ dev: true
+
+ /conventional-changelog-atom@2.0.8:
+ resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-atom@4.0.0:
+ resolution: {integrity: sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-cli@4.1.0:
+ resolution: {integrity: sha512-MscvILWZ6nWOoC+p/3Nn3D2cVLkjeQjyZPUr0bQ+vUORE/SPrkClJh8BOoMNpS4yk+zFJ5LlgXACxH6XGQoRXA==}
+ engines: {node: '>=16'}
+ hasBin: true
+ dependencies:
+ add-stream: 1.0.0
+ conventional-changelog: 5.1.0
+ meow: 12.1.1
+ tempfile: 5.0.0
+ dev: true
+
+ /conventional-changelog-codemirror@2.0.8:
+ resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-codemirror@4.0.0:
+ resolution: {integrity: sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-config-spec@2.1.0:
+ resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==}
+ dev: true
+
+ /conventional-changelog-conventionalcommits@4.6.3:
+ resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ lodash: 4.17.21
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-conventionalcommits@7.0.2:
+ resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
+ engines: {node: '>=16'}
+ dependencies:
+ compare-func: 2.0.0
+ dev: true
+
+ /conventional-changelog-core@4.2.4:
+ resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ add-stream: 1.0.0
+ conventional-changelog-writer: 5.0.1
+ conventional-commits-parser: 3.2.4
+ dateformat: 3.0.3
+ get-pkg-repo: 4.2.1
+ git-raw-commits: 2.0.11
+ git-remote-origin-url: 2.0.0
+ git-semver-tags: 4.1.1
+ lodash: 4.17.21
+ normalize-package-data: 3.0.3
+ q: 1.5.1
+ read-pkg: 3.0.0
+ read-pkg-up: 3.0.0
+ through2: 4.0.2
+ dev: true
+
+ /conventional-changelog-core@7.0.0:
+ resolution: {integrity: sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==}
+ engines: {node: '>=16'}
+ dependencies:
+ '@hutson/parse-repository-url': 5.0.0
+ add-stream: 1.0.0
+ conventional-changelog-writer: 7.0.1
+ conventional-commits-parser: 5.0.0
+ git-raw-commits: 4.0.0
+ git-semver-tags: 7.0.1
+ hosted-git-info: 7.0.1
+ normalize-package-data: 6.0.0
+ read-pkg: 8.1.0
+ read-pkg-up: 10.1.0
+ dev: true
+
+ /conventional-changelog-ember@2.0.9:
+ resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-ember@4.0.0:
+ resolution: {integrity: sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-eslint@3.0.9:
+ resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-eslint@5.0.0:
+ resolution: {integrity: sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-express@2.0.6:
+ resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-express@4.0.0:
+ resolution: {integrity: sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-jquery@3.0.11:
+ resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==}
+ engines: {node: '>=10'}
+ dependencies:
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jquery@5.0.0:
+ resolution: {integrity: sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-jshint@2.0.9:
+ resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==}
+ engines: {node: '>=10'}
+ dependencies:
+ compare-func: 2.0.0
+ q: 1.5.1
+ dev: true
+
+ /conventional-changelog-jshint@4.0.0:
+ resolution: {integrity: sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==}
+ engines: {node: '>=16'}
+ dependencies:
+ compare-func: 2.0.0
+ dev: true
+
+ /conventional-changelog-preset-loader@2.3.4:
+ resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /conventional-changelog-preset-loader@4.1.0:
+ resolution: {integrity: sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-changelog-writer@5.0.1:
+ resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ conventional-commits-filter: 2.0.7
+ dateformat: 3.0.3
+ handlebars: 4.7.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
+ dev: true
+
+ /conventional-changelog-writer@7.0.1:
+ resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==}
+ engines: {node: '>=16'}
+ hasBin: true
+ dependencies:
+ conventional-commits-filter: 4.0.0
+ handlebars: 4.7.8
+ json-stringify-safe: 5.0.1
+ meow: 12.1.1
+ semver: 7.6.0
+ split2: 4.2.0
+ dev: true
+
+ /conventional-changelog@3.1.25:
+ resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ conventional-changelog-angular: 5.0.13
+ conventional-changelog-atom: 2.0.8
+ conventional-changelog-codemirror: 2.0.8
+ conventional-changelog-conventionalcommits: 4.6.3
+ conventional-changelog-core: 4.2.4
+ conventional-changelog-ember: 2.0.9
+ conventional-changelog-eslint: 3.0.9
+ conventional-changelog-express: 2.0.6
+ conventional-changelog-jquery: 3.0.11
+ conventional-changelog-jshint: 2.0.9
+ conventional-changelog-preset-loader: 2.3.4
+ dev: true
+
+ /conventional-changelog@5.1.0:
+ resolution: {integrity: sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==}
+ engines: {node: '>=16'}
+ dependencies:
+ conventional-changelog-angular: 7.0.0
+ conventional-changelog-atom: 4.0.0
+ conventional-changelog-codemirror: 4.0.0
+ conventional-changelog-conventionalcommits: 7.0.2
+ conventional-changelog-core: 7.0.0
+ conventional-changelog-ember: 4.0.0
+ conventional-changelog-eslint: 5.0.0
+ conventional-changelog-express: 4.0.0
+ conventional-changelog-jquery: 5.0.0
+ conventional-changelog-jshint: 4.0.0
+ conventional-changelog-preset-loader: 4.1.0
+ dev: true
+
+ /conventional-commit-types@3.0.0:
+ resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==}
+ dev: true
+
+ /conventional-commits-filter@2.0.7:
+ resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lodash.ismatch: 4.4.0
+ modify-values: 1.0.1
+ dev: true
+
+ /conventional-commits-filter@4.0.0:
+ resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /conventional-commits-parser@3.2.4:
+ resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 1.0.1
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
+ engines: {node: '>=16'}
+ hasBin: true
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
+ dev: true
+
+ /conventional-recommended-bump@6.1.0:
+ resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ concat-stream: 2.0.0
+ conventional-changelog-preset-loader: 2.3.4
+ conventional-commits-filter: 2.0.7
+ conventional-commits-parser: 3.2.4
+ git-raw-commits: 2.0.11
+ git-semver-tags: 4.1.1
+ meow: 8.1.2
+ q: 1.5.1
+ dev: true
+
+ /convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ dev: true
+
+ /cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /copy-anything@2.0.6:
+ resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
+ dependencies:
+ is-what: 3.14.1
+ dev: true
+
+ /copy-descriptor@0.1.1:
+ resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /core-js-compat@3.35.1:
+ resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==}
+ dependencies:
+ browserslist: 4.23.0
+ dev: true
+
+ /core-js@2.6.12:
+ resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
+ deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
+ requiresBuild: true
+ dev: false
+
+ /core-js@3.36.0:
+ resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==}
+ requiresBuild: true
+
+ /core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+ dev: true
+
+ /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.16)(cosmiconfig@8.3.6)(typescript@5.3.3):
+ resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==}
+ engines: {node: '>=v16'}
+ requiresBuild: true
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=8.2'
+ typescript: '>=4'
+ dependencies:
+ '@types/node': 20.11.16
+ cosmiconfig: 8.3.6(typescript@5.3.3)
+ jiti: 1.21.0
+ typescript: 5.3.3
+ dev: true
+
+ /cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+ dev: true
+
+ /cosmiconfig@8.3.6(typescript@5.3.3):
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ requiresBuild: true
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ typescript: 5.3.3
+ dev: true
+
+ /cosmiconfig@9.0.0(typescript@5.3.3):
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ typescript: 5.3.3
+ dev: true
+
+ /crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dev: false
+
+ /create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ dev: true
+
+ /cross-env@7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+ dependencies:
+ cross-spawn: 7.0.3
+ dev: true
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /css-functions-list@3.2.1:
+ resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==}
+ engines: {node: '>=12 || >=16'}
+ dev: true
+
+ /css-property-sort-order-smacss@2.2.0:
+ resolution: {integrity: sha512-nXutswsivIEBOrPo/OZw2KQjFPLvtg68aovJf6Kqrm3L6FmTvvFPaeDrk83hh0+pRJGuP3PeKJwMS0E6DFipdQ==}
+ dev: true
+
+ /css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+ dev: true
+
+ /css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+ dev: true
+
+ /css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.0.2
+ dev: true
+
+ /css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /csso@4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ css-tree: 1.1.3
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ /cz-conventional-changelog@3.3.0(@types/node@20.11.16)(typescript@5.3.3):
+ resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==}
+ engines: {node: '>= 10'}
+ dependencies:
+ chalk: 2.4.2
+ commitizen: 4.3.0(@types/node@20.11.16)(typescript@5.3.3)
+ conventional-commit-types: 3.0.0
+ lodash.map: 4.6.0
+ longest: 2.0.1
+ word-wrap: 1.2.5
+ optionalDependencies:
+ '@commitlint/load': 18.6.0(@types/node@20.11.16)(typescript@5.3.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+ dev: true
+
+ /cz-customizable@7.0.0:
+ resolution: {integrity: sha512-pQKkGSm+8SY9VY/yeJqDOla1MjrGaG7WG4EYLLEV4VNctGO7WdzdGtWEr2ydKSkrpmTs7f8fmBksg/FaTrUAyw==}
+ hasBin: true
+ dependencies:
+ editor: 1.0.0
+ find-config: 1.0.0
+ inquirer: 6.5.2
+ lodash: 4.17.21
+ temp: 0.9.4
+ word-wrap: 1.2.5
+ dev: true
+
+ /d@1.0.1:
+ resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
+ dependencies:
+ es5-ext: 0.10.62
+ type: 1.2.0
+ dev: true
+
+ /dargs@7.0.0:
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /dargs@8.1.0:
+ resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /dateformat@3.0.3:
+ resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
+ dev: true
+
+ /dayjs@1.11.10:
+ resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
+
+ /de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+
+ /decamelize-keys@1.1.1:
+ resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ decamelize: 1.2.0
+ map-obj: 1.0.1
+ dev: true
+
+ /decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /dedent@0.7.0:
+ resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
+ dev: true
+
+ /deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
+ /defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ dependencies:
+ clone: 1.0.4
+ dev: true
+
+ /define-data-property@1.1.1:
+ resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+
+ /define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ has-property-descriptors: 1.0.1
+ object-keys: 1.1.1
+ dev: true
+
+ /define-property@0.2.5:
+ resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 0.1.7
+ dev: true
+
+ /define-property@1.0.0:
+ resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 1.0.3
+ dev: true
+
+ /define-property@2.0.2:
+ resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-descriptor: 1.0.3
+ isobject: 3.0.1
+ dev: true
+
+ /defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ dev: true
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ /deprecation@2.3.1:
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+ dev: true
+
+ /destr@2.0.2:
+ resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==}
+ dev: true
+
+ /detect-file@1.0.0:
+ resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /detect-indent@6.1.0:
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+ dev: true
+
+ /detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+ dev: true
+
+ /dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /dom-align@1.12.4:
+ resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
+ dev: false
+
+ /dom-scroll-into-view@2.0.1:
+ resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==}
+ dev: false
+
+ /dom-serializer@0.2.2:
+ resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
+ dependencies:
+ domelementtype: 2.3.0
+ entities: 2.2.0
+ dev: true
+
+ /dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+ dev: true
+
+ /dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+
+ /domelementtype@1.3.1:
+ resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
+ dev: true
+
+ /domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler@2.4.2:
+ resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
+ dependencies:
+ domelementtype: 1.3.1
+ dev: true
+
+ /domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils@1.7.0:
+ resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
+ dependencies:
+ dom-serializer: 0.2.2
+ domelementtype: 1.3.1
+ dev: true
+
+ /domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ dev: true
+
+ /domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+
+ /dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-obj: 2.0.0
+ dev: true
+
+ /dotgitignore@2.1.0:
+ resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==}
+ engines: {node: '>=6'}
+ dependencies:
+ find-up: 3.0.0
+ minimatch: 3.1.2
+ dev: true
+
+ /duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+ dev: true
+
+ /eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ dev: true
+
+ /echarts@5.5.0:
+ resolution: {integrity: sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==}
+ dependencies:
+ tslib: 2.3.0
+ zrender: 5.5.0
+ dev: false
+
+ /editor@1.0.0:
+ resolution: {integrity: sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==}
+ dev: true
+
+ /electron-to-chromium@1.4.640:
+ resolution: {integrity: sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==}
+ dev: true
+
+ /electron-to-chromium@1.4.679:
+ resolution: {integrity: sha512-NhQMsz5k0d6m9z3qAxnsOR/ebal4NAGsrNVRwcDo4Kc/zQ7KdsTKZUxZoygHcVRb0QDW3waEDIcE3isZ79RP6g==}
+ dev: true
+
+ /emoji-regex@10.3.0:
+ resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
+ dev: true
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ dev: true
+
+ /emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+ dev: true
+
+ /enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /entities@1.1.2:
+ resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
+ dev: true
+
+ /entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+ dev: true
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ /env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /errno@0.1.8:
+ resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ prr: 1.0.1
+ dev: true
+ optional: true
+
+ /error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: true
+
+ /es-abstract@1.22.3:
+ resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.0
+ arraybuffer.prototype.slice: 1.0.2
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ es-set-tostringtag: 2.0.2
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.2
+ get-symbol-description: 1.0.0
+ globalthis: 1.0.3
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ hasown: 2.0.0
+ internal-slot: 1.0.6
+ is-array-buffer: 3.0.2
+ is-callable: 1.2.7
+ is-negative-zero: 2.0.2
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.2
+ is-string: 1.0.7
+ is-typed-array: 1.1.12
+ is-weakref: 1.0.2
+ object-inspect: 1.13.1
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.1
+ safe-array-concat: 1.1.0
+ safe-regex-test: 1.0.2
+ string.prototype.trim: 1.2.8
+ string.prototype.trimend: 1.0.7
+ string.prototype.trimstart: 1.0.7
+ typed-array-buffer: 1.0.0
+ typed-array-byte-length: 1.0.0
+ typed-array-byte-offset: 1.0.0
+ typed-array-length: 1.0.4
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.13
+ dev: true
+
+ /es-iterator-helpers@1.0.15:
+ resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
+ dependencies:
+ asynciterator.prototype: 1.0.0
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-set-tostringtag: 2.0.2
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.2
+ globalthis: 1.0.3
+ has-property-descriptors: 1.0.1
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ internal-slot: 1.0.6
+ iterator.prototype: 1.1.2
+ safe-array-concat: 1.1.0
+ dev: true
+
+ /es-set-tostringtag@2.0.2:
+ resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ has-tostringtag: 1.0.0
+ hasown: 2.0.0
+ dev: true
+
+ /es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+ dev: true
+
+ /es5-ext@0.10.62:
+ resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==}
+ engines: {node: '>=0.10'}
+ requiresBuild: true
+ dependencies:
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.3
+ next-tick: 1.1.0
+ dev: true
+
+ /es6-iterator@2.0.3:
+ resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
+ dependencies:
+ d: 1.0.1
+ es5-ext: 0.10.62
+ es6-symbol: 3.1.3
+ dev: true
+
+ /es6-promise@3.3.1:
+ resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
+ dev: true
+
+ /es6-symbol@3.1.3:
+ resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==}
+ dependencies:
+ d: 1.0.1
+ ext: 1.7.0
+ dev: true
+
+ /es6-weak-map@2.0.3:
+ resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==}
+ dependencies:
+ d: 1.0.1
+ es5-ext: 0.10.62
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.3
+ dev: true
+
+ /esbuild@0.19.11:
+ resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.11
+ '@esbuild/android-arm': 0.19.11
+ '@esbuild/android-arm64': 0.19.11
+ '@esbuild/android-x64': 0.19.11
+ '@esbuild/darwin-arm64': 0.19.11
+ '@esbuild/darwin-x64': 0.19.11
+ '@esbuild/freebsd-arm64': 0.19.11
+ '@esbuild/freebsd-x64': 0.19.11
+ '@esbuild/linux-arm': 0.19.11
+ '@esbuild/linux-arm64': 0.19.11
+ '@esbuild/linux-ia32': 0.19.11
+ '@esbuild/linux-loong64': 0.19.11
+ '@esbuild/linux-mips64el': 0.19.11
+ '@esbuild/linux-ppc64': 0.19.11
+ '@esbuild/linux-riscv64': 0.19.11
+ '@esbuild/linux-s390x': 0.19.11
+ '@esbuild/linux-x64': 0.19.11
+ '@esbuild/netbsd-x64': 0.19.11
+ '@esbuild/openbsd-x64': 0.19.11
+ '@esbuild/sunos-x64': 0.19.11
+ '@esbuild/win32-arm64': 0.19.11
+ '@esbuild/win32-ia32': 0.19.11
+ '@esbuild/win32-x64': 0.19.11
+ dev: true
+
+ /escalade@3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /eslint-ast-utils@1.1.0:
+ resolution: {integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==}
+ engines: {node: '>=4'}
+ dependencies:
+ lodash.get: 4.4.2
+ lodash.zip: 4.2.0
+ dev: true
+
+ /eslint-config-prettier@8.10.0(eslint@7.32.0):
+ resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 7.32.0
+ dev: true
+
+ /eslint-config-prettier@9.1.0(eslint@8.57.0):
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 8.57.0
+ dev: true
+
+ /eslint-define-config@2.1.0:
+ resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==}
+ engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'}
+ dev: true
+
+ /eslint-formatter-pretty@4.1.0:
+ resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/eslint': 7.29.0
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ eslint-rule-docs: 1.1.235
+ log-symbols: 4.1.0
+ plur: 4.0.0
+ string-width: 4.2.3
+ supports-hyperlinks: 2.3.0
+ dev: true
+
+ /eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ dependencies:
+ debug: 3.2.7
+ is-core-module: 2.13.1
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
+ resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ debug: 3.2.7
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-babel@5.3.1(eslint@7.32.0):
+ resolution: {integrity: sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: '>=4.0.0'
+ dependencies:
+ eslint: 7.32.0
+ eslint-rule-composer: 0.3.0
+ dev: true
+
+ /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.0.2)(eslint@8.57.0):
+ resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3)
+ array-includes: 3.1.7
+ array.prototype.findlastindex: 1.2.3
+ array.prototype.flat: 1.3.2
+ array.prototype.flatmap: 1.3.2
+ debug: 3.2.7
+ doctrine: 2.1.0
+ eslint: 8.57.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
+ hasown: 2.0.0
+ is-core-module: 2.13.1
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.fromentries: 2.0.7
+ object.groupby: 1.0.1
+ object.values: 1.1.7
+ semver: 6.3.1
+ tsconfig-paths: 3.15.0
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@7.32.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': '>= 4'
+ eslint: '>=5'
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@7.32.0)(typescript@4.9.5)
+ '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@4.9.5)
+ eslint: 7.32.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5):
+ resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ dependencies:
+ eslint: 8.57.0
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+ prettier: 3.2.5
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.8.8
+ dev: true
+
+ /eslint-plugin-promise@6.1.1(eslint@7.32.0):
+ resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ dependencies:
+ eslint: 7.32.0
+ dev: true
+
+ /eslint-plugin-react-hooks@4.6.0(eslint@7.32.0):
+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ dependencies:
+ eslint: 7.32.0
+ dev: true
+
+ /eslint-plugin-react@7.33.2(eslint@7.32.0):
+ resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ array-includes: 3.1.7
+ array.prototype.flatmap: 1.3.2
+ array.prototype.tosorted: 1.1.2
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.0.15
+ eslint: 7.32.0
+ estraverse: 5.3.0
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.7
+ object.fromentries: 2.0.7
+ object.hasown: 1.1.3
+ object.values: 1.1.7
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.10
+ dev: true
+
+ /eslint-plugin-unicorn@20.1.0(eslint@7.32.0):
+ resolution: {integrity: sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ ci-info: 2.0.0
+ clean-regexp: 1.0.0
+ eslint: 7.32.0
+ eslint-ast-utils: 1.1.0
+ eslint-template-visitor: 2.3.2(eslint@7.32.0)
+ eslint-utils: 2.1.0
+ import-modules: 2.1.0
+ lodash: 4.17.21
+ pluralize: 8.0.0
+ read-pkg-up: 7.0.1
+ regexp-tree: 0.1.27
+ reserved-words: 0.1.2
+ safe-regex: 2.1.1
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-vue@9.22.0(eslint@8.57.0):
+ resolution: {integrity: sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ eslint: 8.57.0
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 6.0.15
+ semver: 7.6.0
+ vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-rule-composer@0.3.0:
+ resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
+ /eslint-rule-docs@1.1.235:
+ resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==}
+ dev: true
+
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: true
+
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-template-visitor@2.3.2(eslint@7.32.0):
+ resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==}
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/eslint-parser': 7.23.3(@babel/core@7.23.9)(eslint@7.32.0)
+ eslint: 7.32.0
+ eslint-visitor-keys: 2.1.0
+ esquery: 1.5.0
+ multimap: 1.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-utils@2.1.0:
+ resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
+ engines: {node: '>=6'}
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+ dev: true
+
+ /eslint-utils@3.0.0(eslint@7.32.0):
+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+ peerDependencies:
+ eslint: '>=5'
+ dependencies:
+ eslint: 7.32.0
+ eslint-visitor-keys: 2.1.0
+ dev: true
+
+ /eslint-visitor-keys@1.3.0:
+ resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /eslint-visitor-keys@2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint@7.32.0:
+ resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ hasBin: true
+ dependencies:
+ '@babel/code-frame': 7.12.11
+ '@eslint/eslintrc': 0.4.3
+ '@humanwhocodes/config-array': 0.5.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ enquirer: 2.4.1
+ escape-string-regexp: 4.0.0
+ eslint-scope: 5.1.1
+ eslint-utils: 2.1.0
+ eslint-visitor-keys: 2.1.0
+ espree: 7.3.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ functional-red-black-tree: 1.0.1
+ glob-parent: 5.1.2
+ globals: 13.24.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ js-yaml: 3.14.1
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.3
+ progress: 2.0.3
+ regexpp: 3.2.0
+ semver: 7.6.0
+ strip-ansi: 6.0.1
+ strip-json-comments: 3.1.1
+ table: 6.8.1
+ text-table: 0.2.0
+ v8-compile-cache: 2.4.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.3
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@7.3.1:
+ resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ acorn: 7.4.1
+ acorn-jsx: 5.3.2(acorn@7.4.1)
+ eslint-visitor-keys: 1.3.0
+ dev: true
+
+ /espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ /esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /event-emitter@0.3.5:
+ resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
+ dependencies:
+ d: 1.0.1
+ es5-ext: 0.10.62
+ dev: true
+
+ /eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ dev: true
+
+ /execa@4.1.0:
+ resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 5.2.0
+ human-signals: 1.1.1
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.2.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /execall@2.0.0:
+ resolution: {integrity: sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==}
+ engines: {node: '>=8'}
+ dependencies:
+ clone-regexp: 2.2.0
+ dev: true
+
+ /expand-brackets@2.1.4:
+ resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ posix-character-classes: 0.1.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /expand-tilde@2.0.2:
+ resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: true
+
+ /ext@1.7.0:
+ resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
+ dependencies:
+ type: 2.7.2
+ dev: true
+
+ /extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extendable: 0.1.1
+ dev: true
+
+ /extend-shallow@3.0.2:
+ resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ assign-symbols: 1.0.0
+ is-extendable: 1.0.1
+ dev: true
+
+ /extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ dev: true
+
+ /external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+
+ /extglob@2.0.4:
+ resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ array-unique: 0.3.2
+ define-property: 1.0.0
+ expand-brackets: 2.1.4
+ extend-shallow: 2.0.1
+ fragment-cache: 0.2.1
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fast-safe-stringify@2.1.1:
+ resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
+ dev: true
+
+ /fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+ dev: true
+
+ /fastq@1.16.0:
+ resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==}
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /figures@2.0.0:
+ resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==}
+ engines: {node: '>=4'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.2.0
+ dev: true
+
+ /file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ flat-cache: 4.0.0
+ dev: true
+
+ /file-saver@2.0.5:
+ resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
+ dev: false
+
+ /fill-range@4.0.0:
+ resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 2.0.1
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ to-regex-range: 2.1.1
+ dev: true
+
+ /fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /find-config@1.0.0:
+ resolution: {integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==}
+ engines: {node: '>= 0.12'}
+ dependencies:
+ user-home: 2.0.0
+ dev: true
+
+ /find-node-modules@2.1.3:
+ resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==}
+ dependencies:
+ findup-sync: 4.0.0
+ merge: 2.1.1
+ dev: true
+
+ /find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+ dev: true
+
+ /find-up@2.1.0:
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ locate-path: 2.0.0
+ dev: true
+
+ /find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+ dependencies:
+ locate-path: 3.0.0
+ dev: true
+
+ /find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /find-up@6.3.0:
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ dev: true
+
+ /findup-sync@4.0.0:
+ resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==}
+ engines: {node: '>= 8'}
+ dependencies:
+ detect-file: 1.0.0
+ is-glob: 4.0.3
+ micromatch: 4.0.5
+ resolve-dir: 1.0.1
+ dev: true
+
+ /flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.2.9
+ keyv: 4.5.4
+ rimraf: 3.0.2
+ dev: true
+
+ /flat-cache@4.0.0:
+ resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==}
+ engines: {node: '>=16'}
+ dependencies:
+ flatted: 3.2.9
+ keyv: 4.5.4
+ rimraf: 5.0.5
+ dev: true
+
+ /flatted@3.2.9:
+ resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+ dev: true
+
+ /follow-redirects@1.15.5(debug@4.3.4):
+ resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dependencies:
+ debug: 4.3.4
+
+ /for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.7
+ dev: true
+
+ /for-in@1.0.2:
+ resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /foreground-child@3.1.1:
+ resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
+ engines: {node: '>=14'}
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+ dev: true
+
+ /form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ /frac@1.1.2:
+ resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /fragment-cache@0.2.1:
+ resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ map-cache: 0.2.2
+ dev: true
+
+ /fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ /function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ functions-have-names: 1.2.3
+ dev: true
+
+ /functional-red-black-tree@1.0.1:
+ resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
+ dev: true
+
+ /functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: true
+
+ /gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
+ /get-east-asian-width@1.2.0:
+ resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /get-intrinsic@1.2.2:
+ resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+ dependencies:
+ function-bind: 1.1.2
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ hasown: 2.0.0
+
+ /get-pkg-repo@4.2.1:
+ resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
+ engines: {node: '>=6.9.0'}
+ hasBin: true
+ dependencies:
+ '@hutson/parse-repository-url': 3.0.2
+ hosted-git-info: 4.1.0
+ through2: 2.0.5
+ yargs: 16.2.0
+ dev: true
+
+ /get-stdin@8.0.0:
+ resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+ dependencies:
+ pump: 3.0.0
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /get-symbol-description@1.0.0:
+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /get-value@2.0.6:
+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /git-hooks-list@1.0.3:
+ resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==}
+ dev: true
+
+ /git-raw-commits@2.0.11:
+ resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ dargs: 7.0.0
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+ dev: true
+
+ /git-raw-commits@4.0.0:
+ resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
+ engines: {node: '>=16'}
+ hasBin: true
+ dependencies:
+ dargs: 8.1.0
+ meow: 12.1.1
+ split2: 4.2.0
+ dev: true
+
+ /git-remote-origin-url@2.0.0:
+ resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
+ engines: {node: '>=4'}
+ dependencies:
+ gitconfiglocal: 1.0.0
+ pify: 2.3.0
+ dev: true
+
+ /git-semver-tags@4.1.1:
+ resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ meow: 8.1.2
+ semver: 6.3.1
+ dev: true
+
+ /git-semver-tags@7.0.1:
+ resolution: {integrity: sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==}
+ engines: {node: '>=16'}
+ hasBin: true
+ dependencies:
+ meow: 12.1.1
+ semver: 7.6.0
+ dev: true
+
+ /gitconfiglocal@1.0.0:
+ resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
+ dependencies:
+ ini: 1.3.8
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob@10.3.10:
+ resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 2.3.6
+ minimatch: 9.0.3
+ minipass: 7.0.4
+ path-scurry: 1.10.1
+ dev: true
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /global-dirs@0.1.1:
+ resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
+ engines: {node: '>=4'}
+ dependencies:
+ ini: 1.3.8
+ dev: true
+
+ /global-modules@1.0.0:
+ resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ global-prefix: 1.0.2
+ is-windows: 1.0.2
+ resolve-dir: 1.0.1
+ dev: true
+
+ /global-modules@2.0.0:
+ resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
+ engines: {node: '>=6'}
+ dependencies:
+ global-prefix: 3.0.0
+ dev: true
+
+ /global-prefix@1.0.2:
+ resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ homedir-polyfill: 1.0.3
+ ini: 1.3.8
+ is-windows: 1.0.2
+ which: 1.3.1
+ dev: true
+
+ /global-prefix@3.0.0:
+ resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
+ engines: {node: '>=6'}
+ dependencies:
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
+ dev: true
+
+ /globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globalthis@1.0.3:
+ resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-properties: 1.2.1
+ dev: true
+
+ /globby@10.0.0:
+ resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/glob': 7.2.0
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ glob: 7.2.3
+ ignore: 5.3.0
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.0
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /globjoin@0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
+ dev: true
+
+ /gonzales-pe@4.3.0:
+ resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==}
+ engines: {node: '>=0.6.0'}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.2
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ dev: true
+
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ dev: true
+
+ /graphql@16.8.1:
+ resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+ dev: true
+
+ /gzip-size@6.0.0:
+ resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ duplexer: 0.1.2
+ dev: true
+
+ /handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.17.4
+ dev: true
+
+ /hard-rejection@2.1.0:
+ resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /has-ansi@2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-regex: 2.1.1
+ dev: true
+
+ /has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: true
+
+ /has-flag@1.0.0:
+ resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /has-property-descriptors@1.0.1:
+ resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+ dependencies:
+ get-intrinsic: 1.2.2
+
+ /has-proto@1.0.1:
+ resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+ engines: {node: '>= 0.4'}
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag@1.0.0:
+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /has-value@0.3.1:
+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+ dev: true
+
+ /has-value@1.0.0:
+ resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ get-value: 2.0.6
+ has-values: 1.0.0
+ isobject: 3.0.1
+ dev: true
+
+ /has-values@0.1.4:
+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /has-values@1.0.0:
+ resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-number: 3.0.0
+ kind-of: 4.0.0
+ dev: true
+
+ /hasown@2.0.0:
+ resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
+ /headers-polyfill@4.0.2:
+ resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==}
+ dev: true
+
+ /homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: true
+
+ /hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ dev: true
+
+ /hosted-git-info@4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /hosted-git-info@7.0.1:
+ resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ dependencies:
+ lru-cache: 10.1.0
+ dev: true
+
+ /html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /htmlparser2@3.10.1:
+ resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
+ dependencies:
+ domelementtype: 1.3.1
+ domhandler: 2.4.2
+ domutils: 1.7.0
+ entities: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+ dev: true
+
+ /http2-client@1.3.5:
+ resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==}
+ dev: true
+
+ /human-signals@1.1.1:
+ resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
+ engines: {node: '>=8.12.0'}
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+ dev: true
+
+ /husky@9.0.10:
+ resolution: {integrity: sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==}
+ engines: {node: '>=18'}
+ hasBin: true
+ dev: true
+
+ /iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+
+ /iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ optional: true
+
+ /ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ dev: true
+
+ /ignore@4.0.6:
+ resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /ignore@5.3.0:
+ resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /image-size@0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dev: true
+
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+
+ /import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /import-modules@2.1.0:
+ resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: true
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
+ /inquirer@6.5.2:
+ resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ ansi-escapes: 3.2.0
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-width: 2.2.1
+ external-editor: 3.1.0
+ figures: 2.0.0
+ lodash: 4.17.21
+ mute-stream: 0.0.7
+ run-async: 2.4.1
+ rxjs: 6.6.7
+ string-width: 2.1.1
+ strip-ansi: 5.2.0
+ through: 2.3.8
+ dev: true
+
+ /inquirer@8.2.5:
+ resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.1
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /internal-slot@1.0.6:
+ resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ hasown: 2.0.0
+ side-channel: 1.0.4
+ dev: true
+
+ /invert-kv@3.0.1:
+ resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /irregular-plurals@3.5.0:
+ resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-accessor-descriptor@1.0.1:
+ resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /is-alphabetical@1.0.4:
+ resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+ dev: true
+
+ /is-alphanumerical@1.0.4:
+ resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+ dependencies:
+ is-alphabetical: 1.0.4
+ is-decimal: 1.0.4
+ dev: true
+
+ /is-array-buffer@3.0.2:
+ resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-typed-array: 1.1.12
+ dev: true
+
+ /is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: true
+
+ /is-async-function@2.0.0:
+ resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+
+ /is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+ dev: true
+
+ /is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /is-data-descriptor@1.0.1:
+ resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-decimal@1.0.4:
+ resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+ dev: true
+
+ /is-descriptor@0.1.7:
+ resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+ dev: true
+
+ /is-descriptor@1.0.3:
+ resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-accessor-descriptor: 1.0.1
+ is-data-descriptor: 1.0.1
+ dev: true
+
+ /is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-extendable@1.0.1:
+ resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-plain-object: 2.0.4
+ dev: true
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-finalizationregistry@1.0.2:
+ resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-fullwidth-code-point@2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+ dependencies:
+ get-east-asian-width: 1.2.0
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-hexadecimal@1.0.4:
+ resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+ dev: true
+
+ /is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-map@2.0.2:
+ resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+ dev: true
+
+ /is-negative-zero@2.0.2:
+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-node-process@1.2.0:
+ resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
+ dev: true
+
+ /is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-number@3.0.0:
+ resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-plain-obj@1.1.0:
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /is-plain-object@3.0.1:
+ resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ /is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+ dev: true
+
+ /is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-regexp@2.1.0:
+ resolution: {integrity: sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /is-set@2.0.2:
+ resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+ dev: true
+
+ /is-shared-array-buffer@1.0.2:
+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /is-text-path@1.0.1:
+ resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ text-extensions: 1.9.0
+ dev: true
+
+ /is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ engines: {node: '>=8'}
+ dependencies:
+ text-extensions: 2.4.0
+ dev: true
+
+ /is-typed-array@1.1.12:
+ resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ which-typed-array: 1.1.13
+ dev: true
+
+ /is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+ dev: true
+
+ /is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /is-utf8@0.2.1:
+ resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
+ dev: true
+
+ /is-weakmap@2.0.1:
+ resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+ dev: true
+
+ /is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-weakset@2.0.2:
+ resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /is-what@3.14.1:
+ resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
+ dev: true
+
+ /is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: true
+
+ /isobject@2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isarray: 1.0.0
+ dev: true
+
+ /isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /iterator.prototype@1.1.2:
+ resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+ dependencies:
+ define-properties: 1.2.1
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ reflect.getprototypeof: 1.0.4
+ set-function-name: 2.0.1
+ dev: true
+
+ /jackspeak@2.3.6:
+ resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+ dev: true
+
+ /jiti@1.21.0:
+ resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+ hasBin: true
+ dev: true
+
+ /js-base64@2.6.4:
+ resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
+ dev: true
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ /js-tokens@8.0.2:
+ resolution: {integrity: sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==}
+ dev: true
+
+ /js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+ dev: true
+
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+ dev: true
+
+ /jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-parse-better-errors@1.0.2:
+ resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
+ dev: true
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: true
+
+ /json-parse-even-better-errors@3.0.1:
+ resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ dev: true
+
+ /json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
+ /jsonc-parser@3.2.0:
+ resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+ dev: true
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+ dev: true
+
+ /jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ array-includes: 3.1.7
+ array.prototype.flat: 1.3.2
+ object.assign: 4.1.5
+ object.values: 1.1.7
+ dev: true
+
+ /keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
+
+ /kind-of@3.2.2:
+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+
+ /kind-of@4.0.0:
+ resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-buffer: 1.1.6
+ dev: true
+
+ /kind-of@5.1.0:
+ resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /known-css-properties@0.21.0:
+ resolution: {integrity: sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==}
+ dev: true
+
+ /known-css-properties@0.29.0:
+ resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==}
+ dev: true
+
+ /kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ dev: true
+
+ /lcid@3.1.1:
+ resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==}
+ engines: {node: '>=8'}
+ dependencies:
+ invert-kv: 3.0.1
+ dev: true
+
+ /less@4.2.0:
+ resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dependencies:
+ copy-anything: 2.0.6
+ parse-node-version: 1.0.1
+ tslib: 2.6.2
+ optionalDependencies:
+ errno: 0.1.8
+ graceful-fs: 4.2.11
+ image-size: 0.5.5
+ make-dir: 2.1.0
+ mime: 1.6.0
+ needle: 3.3.1
+ source-map: 0.6.1
+ dev: true
+
+ /levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /lightningcss-darwin-arm64@1.24.0:
+ resolution: {integrity: sha512-rTNPkEiynOu4CfGdd5ZfVOQe2gd2idfQd4EfX1l2ZUUwd+2SwSdbb7cG4rlwfnZckbzCAygm85xkpekRE5/wFw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-darwin-x64@1.24.0:
+ resolution: {integrity: sha512-4KCeF2RJjzp9xdGY8zIH68CUtptEg8uz8PfkHvsIdrP4t9t5CIgfDBhiB8AmuO75N6SofdmZexDZIKdy9vA7Ww==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-freebsd-x64@1.24.0:
+ resolution: {integrity: sha512-FJAYlek1wXuVTsncNU0C6YD41q126dXcIUm97KAccMn9C4s/JfLSqGWT2gIzAblavPFkyGG2gIADTWp3uWfN1g==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-linux-arm-gnueabihf@1.24.0:
+ resolution: {integrity: sha512-N55K6JqzMx7C0hYUu1YmWqhkHwzEJlkQRMA6phY65noO0I1LOAvP4wBIoFWrzRE+O6zL0RmXJ2xppqyTbk3sYw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-linux-arm64-gnu@1.24.0:
+ resolution: {integrity: sha512-MqqUB2TpYtFWeBvvf5KExDdClU3YGLW5bHKs50uKKootcvG9KoS7wYwd5UichS+W3mYLc5yXUPGD1DNWbLiYKw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-linux-arm64-musl@1.24.0:
+ resolution: {integrity: sha512-5wn4d9tFwa5bS1ao9mLexYVJdh3nn09HNIipsII6ZF7z9ZA5J4dOEhMgKoeCl891axTGTUYd8Kxn+Hn3XUSYRQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-linux-x64-gnu@1.24.0:
+ resolution: {integrity: sha512-3j5MdTh+LSDF3o6uDwRjRUgw4J+IfDCVtdkUrJvKxL79qBLUujXY7CTe5X3IQDDLKEe/3wu49r8JKgxr0MfjbQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-linux-x64-musl@1.24.0:
+ resolution: {integrity: sha512-HI+rNnvaLz0o36z6Ki0gyG5igVGrJmzczxA5fznr6eFTj3cHORoR/j2q8ivMzNFR4UKJDkTWUH5LMhacwOHWBA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss-win32-x64-msvc@1.24.0:
+ resolution: {integrity: sha512-oeije/t7OZ5N9vSs6amyW/34wIYoBCpE6HUlsSKcP2SR1CVgx9oKEM00GtQmtqNnYiMIfsSm7+ppMb4NLtD5vg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /lightningcss@1.24.0:
+ resolution: {integrity: sha512-y36QEEDVx4IM7/yIZNsZJMRREIu26WzTsauIysf5s76YeCmlSbRZS7aC97IGPuoFRnyZ5Wx43OBsQBFB5Ne7ng==}
+ engines: {node: '>= 12.0.0'}
+ dependencies:
+ detect-libc: 1.0.3
+ optionalDependencies:
+ lightningcss-darwin-arm64: 1.24.0
+ lightningcss-darwin-x64: 1.24.0
+ lightningcss-freebsd-x64: 1.24.0
+ lightningcss-linux-arm-gnueabihf: 1.24.0
+ lightningcss-linux-arm64-gnu: 1.24.0
+ lightningcss-linux-arm64-musl: 1.24.0
+ lightningcss-linux-x64-gnu: 1.24.0
+ lightningcss-linux-x64-musl: 1.24.0
+ lightningcss-win32-x64-msvc: 1.24.0
+ dev: true
+
+ /lilconfig@3.0.0:
+ resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
+ engines: {node: '>=14'}
+ dev: true
+
+ /lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ dev: true
+
+ /lines-and-columns@2.0.4:
+ resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /lint-staged@15.2.2:
+ resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ dependencies:
+ chalk: 5.3.0
+ commander: 11.1.0
+ debug: 4.3.4
+ execa: 8.0.1
+ lilconfig: 3.0.0
+ listr2: 8.0.1
+ micromatch: 4.0.5
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /listr2@8.0.1:
+ resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.0.0
+ rfdc: 1.3.1
+ wrap-ansi: 9.0.0
+ dev: true
+
+ /load-json-file@4.0.0:
+ resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+ engines: {node: '>=4'}
+ dependencies:
+ graceful-fs: 4.2.11
+ parse-json: 4.0.0
+ pify: 3.0.0
+ strip-bom: 3.0.0
+ dev: true
+
+ /loader-utils@1.4.2:
+ resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 1.0.2
+ dev: true
+
+ /local-pkg@0.4.3:
+ resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
+ engines: {node: '>=14'}
+ dev: true
+
+ /local-pkg@0.5.0:
+ resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ engines: {node: '>=14'}
+ dependencies:
+ mlly: 1.5.0
+ pkg-types: 1.0.3
+ dev: true
+
+ /locate-path@2.0.0:
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-locate: 2.0.0
+ path-exists: 3.0.0
+ dev: true
+
+ /locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+ dev: true
+
+ /locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-locate: 4.1.0
+ dev: true
+
+ /locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
+ /locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ p-locate: 6.0.0
+ dev: true
+
+ /lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ dev: false
+
+ /lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+ dev: true
+
+ /lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ dev: true
+
+ /lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ dev: true
+
+ /lodash.isfunction@3.0.9:
+ resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
+ dev: true
+
+ /lodash.ismatch@4.4.0:
+ resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
+ dev: true
+
+ /lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+ requiresBuild: true
+ dev: true
+
+ /lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+ dev: true
+
+ /lodash.map@4.6.0:
+ resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
+ dev: true
+
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+ requiresBuild: true
+ dev: true
+
+ /lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+ dev: true
+
+ /lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ dev: true
+
+ /lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+ dev: true
+
+ /lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+ requiresBuild: true
+ dev: true
+
+ /lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+ dev: true
+
+ /lodash.zip@4.2.0:
+ resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==}
+ dev: true
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ /log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+ dev: true
+
+ /log-update@6.0.0:
+ resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-escapes: 6.2.0
+ cli-cursor: 4.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+ dev: true
+
+ /longest-streak@2.0.4:
+ resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==}
+ dev: true
+
+ /longest@2.0.1:
+ resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+
+ /lru-cache@10.1.0:
+ resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
+ engines: {node: 14 || >=16.14}
+ dev: true
+
+ /lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: true
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /lru-queue@0.1.0:
+ resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==}
+ dependencies:
+ es5-ext: 0.10.62
+ dev: true
+
+ /magic-string@0.30.5:
+ resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /magic-string@0.30.7:
+ resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ /make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.2
+ dev: true
+ optional: true
+
+ /make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ dev: true
+
+ /map-age-cleaner@0.1.3:
+ resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-defer: 1.0.0
+ dev: true
+
+ /map-cache@0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /map-obj@1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /map-obj@4.3.0:
+ resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /map-visit@1.0.0:
+ resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ object-visit: 1.0.1
+ dev: true
+
+ /mathml-tag-names@2.1.3:
+ resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
+ dev: true
+
+ /mdast-util-from-markdown@0.8.5:
+ resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==}
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-string: 2.0.0
+ micromark: 2.11.4
+ parse-entities: 2.0.0
+ unist-util-stringify-position: 2.0.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /mdast-util-to-markdown@0.6.5:
+ resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ longest-streak: 2.0.4
+ mdast-util-to-string: 2.0.0
+ parse-entities: 2.0.0
+ repeat-string: 1.6.1
+ zwitch: 1.0.5
+ dev: true
+
+ /mdast-util-to-string@2.0.0:
+ resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
+ dev: true
+
+ /mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+ dev: true
+
+ /mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+ dev: true
+
+ /mem@5.1.1:
+ resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==}
+ engines: {node: '>=8'}
+ dependencies:
+ map-age-cleaner: 0.1.3
+ mimic-fn: 2.1.0
+ p-is-promise: 2.1.0
+ dev: true
+
+ /memoizee@0.4.15:
+ resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==}
+ dependencies:
+ d: 1.0.1
+ es5-ext: 0.10.62
+ es6-weak-map: 2.0.3
+ event-emitter: 0.3.5
+ is-promise: 2.2.2
+ lru-queue: 0.1.0
+ next-tick: 1.1.0
+ timers-ext: 0.1.7
+ dev: true
+
+ /meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
+ engines: {node: '>=16.10'}
+ dev: true
+
+ /meow@13.1.0:
+ resolution: {integrity: sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /meow@8.1.2:
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
+ 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
+ dev: true
+
+ /meow@9.0.0:
+ resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/minimist': 1.2.5
+ camelcase-keys: 6.2.2
+ decamelize: 1.2.0
+ decamelize-keys: 1.1.1
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+ dev: true
+
+ /merge-options@1.0.1:
+ resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-plain-obj: 1.1.0
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ dev: true
+
+ /merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /merge@2.1.1:
+ resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
+ dev: true
+
+ /micromark@2.11.4:
+ resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
+ dependencies:
+ debug: 4.3.4
+ parse-entities: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /micromatch@3.1.0:
+ resolution: {integrity: sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ braces: 2.3.2
+ define-property: 1.0.0
+ extend-shallow: 2.0.1
+ extglob: 2.0.4
+ fragment-cache: 0.2.1
+ kind-of: 5.1.0
+ nanomatch: 1.2.13
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+
+ /mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /mimic-fn@1.2.0:
+ resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /minimatch@9.0.3:
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimist-options@4.1.0:
+ resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+ engines: {node: '>= 6'}
+ dependencies:
+ arrify: 1.0.1
+ is-plain-obj: 1.1.0
+ kind-of: 6.0.3
+ dev: true
+
+ /minimist@1.2.7:
+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+ dev: true
+
+ /minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ dev: true
+
+ /minipass@7.0.4:
+ resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dev: true
+
+ /mitt@2.1.0:
+ resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==}
+ dev: false
+
+ /mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+ dev: false
+
+ /mixin-deep@1.3.2:
+ resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ for-in: 1.0.2
+ is-extendable: 1.0.1
+ dev: true
+
+ /mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /mlly@1.5.0:
+ resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==}
+ dependencies:
+ acorn: 8.11.3
+ pathe: 1.1.2
+ pkg-types: 1.0.3
+ ufo: 1.3.2
+ dev: true
+
+ /mock.js@0.2.0:
+ resolution: {integrity: sha512-DKI8Rh/h7Mma+fg+6aD0uUvwn0QXAjKG6q3s+lTaCboCQ/kvQMBN9IXRBzgEaz4aPiYoRnKU9jVsfZp0mHpWrQ==}
+ dev: true
+
+ /mockjs@1.1.0:
+ resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==}
+ hasBin: true
+ dependencies:
+ commander: 11.1.0
+ dev: true
+
+ /modify-values@1.0.1:
+ resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: true
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /msw@2.2.1(typescript@5.3.3):
+ resolution: {integrity: sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w==}
+ engines: {node: '>=18'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ typescript: '>= 4.7.x <= 5.3.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@bundled-es-modules/cookie': 2.0.0
+ '@bundled-es-modules/statuses': 1.0.1
+ '@inquirer/confirm': 3.0.0
+ '@mswjs/cookies': 1.1.0
+ '@mswjs/interceptors': 0.25.16
+ '@open-draft/until': 2.1.0
+ '@types/cookie': 0.6.0
+ '@types/statuses': 2.0.4
+ chalk: 4.1.2
+ graphql: 16.8.1
+ headers-polyfill: 4.0.2
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ path-to-regexp: 6.2.1
+ strict-event-emitter: 0.5.1
+ type-fest: 4.9.0
+ typescript: 5.3.3
+ yargs: 17.7.2
+ dev: true
+
+ /muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
+ dev: true
+
+ /multimap@1.1.0:
+ resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==}
+ dev: true
+
+ /mute-stream@0.0.7:
+ resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==}
+ dev: true
+
+ /mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+ dev: true
+
+ /mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /nanomatch@1.2.13:
+ resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-diff: 4.0.0
+ array-unique: 0.3.2
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ fragment-cache: 0.2.1
+ is-windows: 1.0.2
+ kind-of: 6.0.3
+ object.pick: 1.3.0
+ regex-not: 1.0.2
+ snapdragon: 0.8.2
+ to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /nanopop@2.4.1:
+ resolution: {integrity: sha512-hhtYHTaQPmclHHCWmh2EJpWQ9FCA47kj2r/vXqI0ACeMi/qR9qFYDQRSx+luami7qw1OkBR4luJqS6ADoC3FPQ==}
+ dev: false
+
+ /natural-compare-lite@1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+ dev: true
+
+ /natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
+ /needle@3.3.1:
+ resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ iconv-lite: 0.6.3
+ sax: 1.3.0
+ dev: true
+ optional: true
+
+ /neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ dev: true
+
+ /next-tick@1.1.0:
+ resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
+ dev: true
+
+ /node-fetch-h2@2.3.0:
+ resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==}
+ engines: {node: 4.x || >=6.0.0}
+ dependencies:
+ http2-client: 1.3.5
+ dev: true
+
+ /node-fetch-native@1.6.1:
+ resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==}
+ dev: true
+
+ /node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: true
+
+ /node-readfiles@0.2.0:
+ resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==}
+ dependencies:
+ es6-promise: 3.3.1
+ dev: true
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ dev: true
+
+ /normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.8
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-package-data@3.0.3:
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
+ dependencies:
+ hosted-git-info: 4.1.0
+ is-core-module: 2.13.1
+ semver: 7.6.0
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-package-data@6.0.0:
+ resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ dependencies:
+ hosted-git-info: 7.0.1
+ is-core-module: 2.13.1
+ semver: 7.6.0
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /normalize-selector@0.2.0:
+ resolution: {integrity: sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==}
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /npm-run-path@5.2.0:
+ resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ path-key: 4.0.0
+ dev: true
+
+ /nprogress@1.0.0-1:
+ resolution: {integrity: sha512-Gr/Km0nIMbR7hOB0fjGx7nR0oRjTy9M61dXiQL5bfTBq0cQ+hNgt6gxE062j7Bxm+L/IjNVOr41iu2hrDeuedw==}
+ dev: false
+
+ /nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /num2fraction@1.2.2:
+ resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==}
+ dev: true
+
+ /nunjucks@3.2.4:
+ resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==}
+ engines: {node: '>= 6.9.0'}
+ hasBin: true
+ peerDependencies:
+ chokidar: ^3.3.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+ dependencies:
+ a-sync-waterfall: 1.0.1
+ asap: 2.0.6
+ commander: 5.1.0
+ dev: true
+
+ /oas-kit-common@1.0.8:
+ resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==}
+ dependencies:
+ fast-safe-stringify: 2.1.1
+ dev: true
+
+ /oas-linter@3.2.2:
+ resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==}
+ dependencies:
+ '@exodus/schemasafe': 1.3.0
+ should: 13.2.3
+ yaml: 1.10.2
+ dev: true
+
+ /oas-resolver@2.5.6:
+ resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==}
+ hasBin: true
+ dependencies:
+ node-fetch-h2: 2.3.0
+ oas-kit-common: 1.0.8
+ reftools: 1.1.9
+ yaml: 1.10.2
+ yargs: 17.7.2
+ dev: true
+
+ /oas-schema-walker@1.1.5:
+ resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==}
+ dev: true
+
+ /oas-validator@5.0.8:
+ resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==}
+ dependencies:
+ call-me-maybe: 1.0.2
+ oas-kit-common: 1.0.8
+ oas-linter: 3.2.2
+ oas-resolver: 2.5.6
+ oas-schema-walker: 1.1.5
+ reftools: 1.1.9
+ should: 13.2.3
+ yaml: 1.10.2
+ dev: true
+
+ /object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /object-copy@0.1.0:
+ resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ copy-descriptor: 0.1.1
+ define-property: 0.2.5
+ kind-of: 3.2.2
+ dev: true
+
+ /object-inspect@1.13.1:
+ resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+
+ /object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /object-visit@1.0.1:
+ resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: true
+
+ /object.entries@1.1.7:
+ resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.fromentries@2.0.7:
+ resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.groupby@1.0.1:
+ resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /object.hasown@1.1.3:
+ resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.pick@1.3.0:
+ resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /object.values@1.1.7:
+ resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /ofetch@1.3.3:
+ resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==}
+ dependencies:
+ destr: 2.0.2
+ node-fetch-native: 1.6.1
+ ufo: 1.3.2
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@2.0.1:
+ resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ mimic-fn: 1.2.0
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ mimic-fn: 4.0.0
+ dev: true
+
+ /openapi3-ts@2.0.2:
+ resolution: {integrity: sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==}
+ dependencies:
+ yaml: 1.10.2
+ dev: true
+
+ /optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ '@aashutoshrathi/word-wrap': 1.2.6
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
+ /os-homedir@1.0.2:
+ resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /os-locale@5.0.0:
+ resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==}
+ engines: {node: '>=10'}
+ dependencies:
+ execa: 4.1.0
+ lcid: 3.1.1
+ mem: 5.1.1
+ dev: true
+
+ /os-tmpdir@1.0.2:
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /outvariant@1.4.2:
+ resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==}
+ dev: true
+
+ /p-defer@1.0.0:
+ resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-is-promise@2.1.0:
+ resolution: {integrity: sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /p-limit@1.3.0:
+ resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-try: 1.0.0
+ dev: true
+
+ /p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-try: 2.2.0
+ dev: true
+
+ /p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ yocto-queue: 1.0.0
+ dev: true
+
+ /p-locate@2.0.0:
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+ engines: {node: '>=4'}
+ dependencies:
+ p-limit: 1.3.0
+ dev: true
+
+ /p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-limit: 2.3.0
+ dev: true
+
+ /p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-limit: 2.3.0
+ dev: true
+
+ /p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ p-limit: 4.0.0
+ dev: true
+
+ /p-try@1.0.0:
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+
+ /parse-entities@2.0.0:
+ resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+ dependencies:
+ character-entities: 1.2.4
+ character-entities-legacy: 1.1.4
+ character-reference-invalid: 1.1.4
+ is-alphanumerical: 1.0.4
+ is-decimal: 1.0.4
+ is-hexadecimal: 1.0.4
+ dev: true
+
+ /parse-json@4.0.0:
+ resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+ engines: {node: '>=4'}
+ dependencies:
+ error-ex: 1.3.2
+ json-parse-better-errors: 1.0.2
+ dev: true
+
+ /parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: true
+
+ /parse-json@7.1.1:
+ resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==}
+ engines: {node: '>=16'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 3.0.1
+ lines-and-columns: 2.0.4
+ type-fest: 3.13.1
+ dev: true
+
+ /parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /parse-passwd@1.0.0:
+ resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /pascalcase@0.1.1:
+ resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+ dev: true
+
+ /path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ dev: true
+
+ /path-scurry@1.10.1:
+ resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ lru-cache: 10.1.0
+ minipass: 7.0.4
+ dev: true
+
+ /path-to-regexp@6.2.1:
+ resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
+ dev: true
+
+ /path-type@3.0.0:
+ resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 3.0.0
+ dev: true
+
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /pathe@0.2.0:
+ resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
+ dev: true
+
+ /pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ dev: true
+
+ /perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+ dev: true
+
+ /picocolors@0.2.1:
+ resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
+ dev: true
+
+ /picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /picomatch@3.0.1:
+ resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+ dev: true
+
+ /pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /pify@3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /pinia@2.1.7(typescript@5.3.3)(vue@3.4.19):
+ resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==}
+ peerDependencies:
+ '@vue/composition-api': ^1.4.0
+ typescript: '>=4.4.4'
+ vue: ^2.6.14 || ^3.3.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': 6.5.1
+ typescript: 5.3.3
+ vue: 3.4.19(typescript@5.3.3)
+ vue-demi: 0.14.6(vue@3.4.19)
+ dev: false
+
+ /pkg-types@1.0.3:
+ resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
+ dependencies:
+ jsonc-parser: 3.2.0
+ mlly: 1.5.0
+ pathe: 1.1.2
+ dev: true
+
+ /plur@4.0.0:
+ resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==}
+ engines: {node: '>=10'}
+ dependencies:
+ irregular-plurals: 3.5.0
+ dev: true
+
+ /pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /posix-character-classes@0.1.1:
+ resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /postcss-html@0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39):
+ resolution: {integrity: sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==}
+ peerDependencies:
+ postcss: '>=5.0.0 || 5'
+ postcss-syntax: '>=0.36.0'
+ dependencies:
+ htmlparser2: 3.10.1
+ postcss: 7.0.39
+ postcss-syntax: 0.36.2(postcss-html@1.6.0)(postcss-less@6.0.0)(postcss@8.4.34)
+ dev: true
+
+ /postcss-html@1.6.0:
+ resolution: {integrity: sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==}
+ engines: {node: ^12 || >=14}
+ dependencies:
+ htmlparser2: 8.0.2
+ js-tokens: 8.0.2
+ postcss: 8.4.34
+ postcss-safe-parser: 6.0.0(postcss@8.4.34)
+ dev: true
+
+ /postcss-less@3.1.4:
+ resolution: {integrity: sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==}
+ engines: {node: '>=6.14.4'}
+ dependencies:
+ postcss: 7.0.39
+ dev: true
+
+ /postcss-less@4.0.1:
+ resolution: {integrity: sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==}
+ engines: {node: '>=10'}
+ dependencies:
+ postcss: 8.4.35
+ dev: true
+
+ /postcss-less@6.0.0(postcss@8.4.34):
+ resolution: {integrity: sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ postcss: ^8.3.5 || 5
+ dependencies:
+ postcss: 8.4.34
+ dev: true
+
+ /postcss-media-query-parser@0.2.3:
+ resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
+ dev: true
+
+ /postcss-prefix-selector@1.16.0(postcss@5.2.18):
+ resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==}
+ peerDependencies:
+ postcss: '>4 <9 || 5'
+ dependencies:
+ postcss: 5.2.18
+ dev: true
+
+ /postcss-resolve-nested-selector@0.1.1:
+ resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==}
+ dev: true
+
+ /postcss-safe-parser@4.0.2:
+ resolution: {integrity: sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ postcss: 7.0.39
+ dev: true
+
+ /postcss-safe-parser@6.0.0(postcss@8.4.34):
+ resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.3.3 || 5
+ dependencies:
+ postcss: 8.4.34
+ dev: true
+
+ /postcss-safe-parser@7.0.0(postcss@8.4.34):
+ resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==}
+ engines: {node: '>=18.0'}
+ peerDependencies:
+ postcss: ^8.4.31 || 5
+ dependencies:
+ postcss: 8.4.34
+ dev: true
+
+ /postcss-sass@0.4.4:
+ resolution: {integrity: sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==}
+ dependencies:
+ gonzales-pe: 4.3.0
+ postcss: 7.0.39
+ dev: true
+
+ /postcss-scss@2.1.1:
+ resolution: {integrity: sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ postcss: 7.0.39
+ dev: true
+
+ /postcss-selector-parser@6.0.15:
+ resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==}
+ engines: {node: '>=4'}
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /postcss-sorting@6.0.0(postcss@8.4.35):
+ resolution: {integrity: sha512-bYJ0vgAiGbjCBKi7B07CzsBc9eM84nLEbavUmwNp8rAa+PNyrgdH+6PpnqTtciLuUs99c4rFQQmCaYgeBQYmSQ==}
+ peerDependencies:
+ postcss: ^8.0.4 || 5
+ dependencies:
+ lodash: 4.17.21
+ postcss: 8.4.35
+ dev: true
+
+ /postcss-sorting@8.0.2(postcss@8.4.34):
+ resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==}
+ peerDependencies:
+ postcss: ^8.4.20 || 5
+ dependencies:
+ postcss: 8.4.34
+ dev: true
+
+ /postcss-syntax@0.36.2(postcss-html@1.6.0)(postcss-less@6.0.0)(postcss@8.4.34):
+ resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==}
+ peerDependencies:
+ postcss: '>=5.0.0 || 5'
+ postcss-html: '*'
+ postcss-jsx: '*'
+ postcss-less: '*'
+ postcss-markdown: '*'
+ postcss-scss: '*'
+ peerDependenciesMeta:
+ postcss-html:
+ optional: true
+ postcss-jsx:
+ optional: true
+ postcss-less:
+ optional: true
+ postcss-markdown:
+ optional: true
+ postcss-scss:
+ optional: true
+ dependencies:
+ postcss: 8.4.34
+ postcss-html: 1.6.0
+ postcss-less: 6.0.0(postcss@8.4.34)
+ dev: true
+
+ /postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ dev: true
+
+ /postcss@5.2.18:
+ resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
+ engines: {node: '>=0.12'}
+ dependencies:
+ chalk: 1.1.3
+ js-base64: 2.6.4
+ source-map: 0.5.7
+ supports-color: 3.2.3
+ dev: true
+
+ /postcss@7.0.39:
+ resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ picocolors: 0.2.1
+ source-map: 0.6.1
+ dev: true
+
+ /postcss@8.4.34:
+ resolution: {integrity: sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+ dev: true
+
+ /postcss@8.4.35:
+ resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+
+ /posthtml-parser@0.2.1:
+ resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
+ dependencies:
+ htmlparser2: 3.10.1
+ isobject: 2.1.0
+ dev: true
+
+ /posthtml-rename-id@1.0.12:
+ resolution: {integrity: sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
+ /posthtml-render@1.4.0:
+ resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /posthtml-svg-mode@1.0.3:
+ resolution: {integrity: sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==}
+ dependencies:
+ merge-options: 1.0.1
+ posthtml: 0.9.2
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+ dev: true
+
+ /posthtml@0.9.2:
+ resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ posthtml-parser: 0.2.1
+ posthtml-render: 1.4.0
+ dev: true
+
+ /prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ fast-diff: 1.3.0
+ dev: true
+
+ /prettier-plugin-packagejson@2.3.0(prettier@2.8.8):
+ resolution: {integrity: sha512-2SAPMMk1UDkqsB7DifWKcwCm6VC52JXMrzLHfbcQHJRWhRCj9zziOy+s+2XOyPBeyqFqS+A/1IKzOrxKFTo6pw==}
+ peerDependencies:
+ prettier: '>= 1.16.0'
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+ dependencies:
+ prettier: 2.8.8
+ sort-package-json: 1.57.0
+ dev: true
+
+ /prettier-plugin-two-style-order@1.0.1(prettier@2.8.8):
+ resolution: {integrity: sha512-ETltO2FRR/Pxc7bsgz2XwuzWSPwafl7/v5+5Rria4S579CTas7dya+xsmbkix0q1tYQiuRjVVdfGnCKlH/aOuQ==}
+ peerDependencies:
+ prettier: '>= 2.0.0'
+ dependencies:
+ postcss: 8.4.35
+ postcss-less: 4.0.1
+ postcss-sorting: 6.0.0(postcss@8.4.35)
+ prettier: 2.8.8
+ dev: true
+
+ /prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dev: true
+
+ /prettier@3.2.5:
+ resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /pretty-quick@4.0.0(prettier@3.2.5):
+ resolution: {integrity: sha512-M+2MmeufXb/M7Xw3Afh1gxcYpj+sK0AxEfnfF958ktFeAyi5MsKY5brymVURQLgPLV1QaF5P4pb2oFJ54H3yzQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ prettier: ^3.0.0
+ dependencies:
+ execa: 5.1.1
+ find-up: 5.0.0
+ ignore: 5.3.0
+ mri: 1.2.0
+ picocolors: 1.0.0
+ picomatch: 3.0.1
+ prettier: 3.2.5
+ tslib: 2.6.2
+ dev: true
+
+ /process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
+ /prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+ dev: true
+
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ /prr@1.0.1:
+ resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /pump@3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /q@1.5.1:
+ resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ dev: true
+
+ /qiniu-js@3.4.2:
+ resolution: {integrity: sha512-Gu94/4adN2FnM9VpTgLsgvS3KN+2ZV9gCxlmrKICMI7VqcAwTsy3+9eBLLk8WueMYwniyg8rELjdxNf0wABUHg==}
+ dependencies:
+ '@babel/runtime-corejs2': 7.23.8
+ querystring: 0.2.1
+ spark-md5: 3.0.2
+ dev: false
+
+ /qs@6.11.2:
+ resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: false
+
+ /query-string@4.3.4:
+ resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ object-assign: 4.1.1
+ strict-uri-encode: 1.1.0
+ dev: true
+
+ /querystring@0.2.1:
+ resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==}
+ engines: {node: '>=0.4.x'}
+ deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
+ dev: false
+
+ /queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ dev: true
+
+ /quick-lru@4.0.1:
+ resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ dev: true
+
+ /read-pkg-up@10.1.0:
+ resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==}
+ engines: {node: '>=16'}
+ dependencies:
+ find-up: 6.3.0
+ read-pkg: 8.1.0
+ type-fest: 4.9.0
+ dev: true
+
+ /read-pkg-up@3.0.0:
+ resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
+ engines: {node: '>=4'}
+ dependencies:
+ find-up: 2.1.0
+ read-pkg: 3.0.0
+ dev: true
+
+ /read-pkg-up@7.0.1:
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+ dev: true
+
+ /read-pkg@3.0.0:
+ resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+ engines: {node: '>=4'}
+ dependencies:
+ load-json-file: 4.0.0
+ normalize-package-data: 2.5.0
+ path-type: 3.0.0
+ dev: true
+
+ /read-pkg@5.2.0:
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/normalize-package-data': 2.4.4
+ normalize-package-data: 2.5.0
+ parse-json: 5.2.0
+ type-fest: 0.6.0
+ dev: true
+
+ /read-pkg@8.1.0:
+ resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==}
+ engines: {node: '>=16'}
+ dependencies:
+ '@types/normalize-package-data': 2.4.4
+ normalize-package-data: 6.0.0
+ parse-json: 7.1.1
+ type-fest: 4.9.0
+ dev: true
+
+ /readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+ dev: true
+
+ /reflect.getprototypeof@1.0.4:
+ resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ globalthis: 1.0.3
+ which-builtin-type: 1.1.3
+ dev: true
+
+ /reftools@1.1.9:
+ resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==}
+ dev: true
+
+ /regenerate-unicode-properties@10.1.1:
+ resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ regenerate: 1.4.2
+ dev: true
+
+ /regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+ dev: true
+
+ /regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ /regenerator-transform@0.15.2:
+ resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+ dependencies:
+ '@babel/runtime': 7.23.8
+ dev: true
+
+ /regex-not@1.0.2:
+ resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 3.0.2
+ safe-regex: 1.1.0
+ dev: true
+
+ /regexp-tree@0.1.27:
+ resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
+ hasBin: true
+ dev: true
+
+ /regexp.prototype.flags@1.5.1:
+ resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ set-function-name: 2.0.1
+ dev: true
+
+ /regexpp@3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /regexpu-core@5.3.2:
+ resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ '@babel/regjsgen': 0.8.0
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.1.1
+ regjsparser: 0.9.1
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.1.0
+ dev: true
+
+ /regjsparser@0.9.1:
+ resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+ hasBin: true
+ dependencies:
+ jsesc: 0.5.0
+ dev: true
+
+ /remark-parse@9.0.0:
+ resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==}
+ dependencies:
+ mdast-util-from-markdown: 0.8.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /remark-stringify@9.0.1:
+ resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==}
+ dependencies:
+ mdast-util-to-markdown: 0.6.5
+ dev: true
+
+ /remark@13.0.0:
+ resolution: {integrity: sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==}
+ dependencies:
+ remark-parse: 9.0.0
+ remark-stringify: 9.0.1
+ unified: 9.2.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /repeat-element@1.1.4:
+ resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /repeat-string@1.6.1:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /reserved-words@0.1.2:
+ resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==}
+ dev: true
+
+ /resize-detector@0.3.0:
+ resolution: {integrity: sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==}
+ dev: false
+
+ /resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+ dev: false
+
+ /resolve-dir@1.0.1:
+ resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ expand-tilde: 2.0.2
+ global-modules: 1.0.0
+ dev: true
+
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /resolve-global@1.0.0:
+ resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
+ engines: {node: '>=8'}
+ dependencies:
+ global-dirs: 0.1.1
+ dev: true
+
+ /resolve-url@0.2.1:
+ resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
+ deprecated: https://github.com/lydell/resolve-url#deprecated
+ dev: true
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /restore-cursor@2.0.0:
+ resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.7
+ dev: true
+
+ /restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
+ /restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
+ /ret@0.1.15:
+ resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
+ engines: {node: '>=0.12'}
+ dev: true
+
+ /reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ /rfdc@1.3.1:
+ resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
+ dev: true
+
+ /rimraf@2.6.3:
+ resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /rimraf@5.0.5:
+ resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ glob: 10.3.10
+ dev: true
+
+ /rollup@4.9.6:
+ resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.9.6
+ '@rollup/rollup-android-arm64': 4.9.6
+ '@rollup/rollup-darwin-arm64': 4.9.6
+ '@rollup/rollup-darwin-x64': 4.9.6
+ '@rollup/rollup-linux-arm-gnueabihf': 4.9.6
+ '@rollup/rollup-linux-arm64-gnu': 4.9.6
+ '@rollup/rollup-linux-arm64-musl': 4.9.6
+ '@rollup/rollup-linux-riscv64-gnu': 4.9.6
+ '@rollup/rollup-linux-x64-gnu': 4.9.6
+ '@rollup/rollup-linux-x64-musl': 4.9.6
+ '@rollup/rollup-win32-arm64-msvc': 4.9.6
+ '@rollup/rollup-win32-ia32-msvc': 4.9.6
+ '@rollup/rollup-win32-x64-msvc': 4.9.6
+ fsevents: 2.3.3
+ dev: true
+
+ /run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /rxjs@6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+ dependencies:
+ tslib: 1.14.1
+ dev: true
+
+ /rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
+ /safe-array-concat@1.1.0:
+ resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==}
+ engines: {node: '>=0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+ dev: true
+
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ dev: true
+
+ /safe-regex-test@1.0.2:
+ resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-regex: 1.1.4
+ dev: true
+
+ /safe-regex@1.1.0:
+ resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==}
+ dependencies:
+ ret: 0.1.15
+ dev: true
+
+ /safe-regex@2.1.1:
+ resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==}
+ dependencies:
+ regexp-tree: 0.1.27
+ dev: true
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: true
+
+ /sax@1.3.0:
+ resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /scroll-into-view-if-needed@2.2.31:
+ resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
+ dependencies:
+ compute-scroll-into-view: 1.0.20
+ dev: false
+
+ /semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+ dev: true
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /set-function-length@1.2.0:
+ resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.2
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+
+ /set-function-name@2.0.1:
+ resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.1
+ dev: true
+
+ /set-value@2.0.1:
+ resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 2.0.1
+ is-extendable: 0.1.1
+ is-plain-object: 2.0.4
+ split-string: 3.1.0
+ dev: true
+
+ /shallow-equal@1.2.1:
+ resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
+ dev: false
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /should-equal@2.0.0:
+ resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==}
+ dependencies:
+ should-type: 1.4.0
+ dev: true
+
+ /should-format@3.0.3:
+ resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==}
+ dependencies:
+ should-type: 1.4.0
+ should-type-adaptors: 1.1.0
+ dev: true
+
+ /should-type-adaptors@1.1.0:
+ resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==}
+ dependencies:
+ should-type: 1.4.0
+ should-util: 1.0.1
+ dev: true
+
+ /should-type@1.4.0:
+ resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==}
+ dev: true
+
+ /should-util@1.0.1:
+ resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==}
+ dev: true
+
+ /should@13.2.3:
+ resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==}
+ dependencies:
+ should-equal: 2.0.0
+ should-format: 3.0.3
+ should-type: 1.4.0
+ should-type-adaptors: 1.1.0
+ should-util: 1.0.1
+ dev: true
+
+ /side-channel@1.0.4:
+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ object-inspect: 1.13.1
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+ dev: true
+
+ /sirv@2.0.4:
+ resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
+ engines: {node: '>= 10'}
+ dependencies:
+ '@polka/url': 1.0.0-next.24
+ mrmime: 2.0.0
+ totalist: 3.0.1
+ dev: true
+
+ /slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: true
+
+ /slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+ dev: true
+
+ /slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+ dev: true
+
+ /snapdragon-node@2.1.1:
+ resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 1.0.0
+ isobject: 3.0.1
+ snapdragon-util: 3.0.1
+ dev: true
+
+ /snapdragon-util@3.0.1:
+ resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /snapdragon@0.8.2:
+ resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ base: 0.11.2
+ debug: 2.6.9
+ define-property: 0.2.5
+ extend-shallow: 2.0.1
+ map-cache: 0.2.2
+ source-map: 0.5.7
+ source-map-resolve: 0.5.3
+ use: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /sort-object-keys@1.1.3:
+ resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==}
+ dev: true
+
+ /sort-package-json@1.57.0:
+ resolution: {integrity: sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==}
+ hasBin: true
+ dependencies:
+ detect-indent: 6.1.0
+ detect-newline: 3.1.0
+ git-hooks-list: 1.0.3
+ globby: 10.0.0
+ is-plain-obj: 2.1.0
+ sort-object-keys: 1.1.3
+ dev: true
+
+ /sortablejs@1.15.2:
+ resolution: {integrity: sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==}
+ dev: false
+
+ /source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-resolve@0.5.3:
+ resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+ resolve-url: 0.2.1
+ source-map-url: 0.4.1
+ urix: 0.1.0
+ dev: true
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map-url@0.4.1:
+ resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
+ deprecated: See https://github.com/lydell/source-map-url#deprecated
+ dev: true
+
+ /source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /spark-md5@3.0.2:
+ resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==}
+ dev: false
+
+ /spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.16
+ dev: true
+
+ /spdx-exceptions@2.3.0:
+ resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+ dev: true
+
+ /spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.16
+ dev: true
+
+ /spdx-license-ids@3.0.16:
+ resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
+ dev: true
+
+ /specificity@0.4.1:
+ resolution: {integrity: sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==}
+ hasBin: true
+ dev: true
+
+ /split-string@3.1.0:
+ resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ extend-shallow: 3.0.2
+ dev: true
+
+ /split2@3.2.2:
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
+ /split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+ dev: true
+
+ /split@1.0.1:
+ resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+ dependencies:
+ through: 2.3.8
+ dev: true
+
+ /sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ dev: true
+
+ /ssf@0.11.2:
+ resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ frac: 1.1.2
+ dev: false
+
+ /stable@0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+ dev: true
+
+ /standard-version@9.5.0:
+ resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ chalk: 2.4.2
+ conventional-changelog: 3.1.25
+ conventional-changelog-config-spec: 2.1.0
+ conventional-changelog-conventionalcommits: 4.6.3
+ conventional-recommended-bump: 6.1.0
+ detect-indent: 6.1.0
+ detect-newline: 3.1.0
+ dotgitignore: 2.1.0
+ figures: 3.2.0
+ find-up: 5.0.0
+ git-semver-tags: 4.1.1
+ semver: 7.6.0
+ stringify-package: 1.0.1
+ yargs: 16.2.0
+ dev: true
+
+ /static-extend@0.1.2:
+ resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 0.2.5
+ object-copy: 0.1.0
+ dev: true
+
+ /statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /strict-event-emitter@0.5.1:
+ resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
+ dev: true
+
+ /strict-uri-encode@1.1.0:
+ resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+ dev: true
+
+ /string-width@2.1.1:
+ resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 4.0.0
+ dev: true
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /string-width@7.0.0:
+ resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==}
+ engines: {node: '>=18'}
+ dependencies:
+ emoji-regex: 10.3.0
+ get-east-asian-width: 1.2.0
+ strip-ansi: 7.1.0
+ dev: true
+
+ /string.prototype.matchall@4.0.10:
+ resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ internal-slot: 1.0.6
+ regexp.prototype.flags: 1.5.1
+ set-function-name: 2.0.1
+ side-channel: 1.0.4
+ dev: true
+
+ /string.prototype.trim@1.2.8:
+ resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /string.prototype.trimend@1.0.7:
+ resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /string.prototype.trimstart@1.0.7:
+ resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /stringify-package@1.0.1:
+ resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==}
+ deprecated: This module is not used anymore, and has been replaced by @npmcli/package-json
+ dev: true
+
+ /strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ ansi-regex: 2.1.1
+ dev: true
+
+ /strip-ansi@4.0.0:
+ resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-regex: 3.0.1
+ dev: true
+
+ /strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+ dependencies:
+ ansi-regex: 4.1.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.0.1
+ dev: true
+
+ /strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ min-indent: 1.0.1
+ dev: true
+
+ /strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /style-search@0.1.0:
+ resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
+ dev: true
+
+ /stylelint-config-css-modules@2.3.0(stylelint@13.13.1):
+ resolution: {integrity: sha512-nSxwaJMv9wBrTAi+O4qXubyi1AR9eB36tJpY0uaFhKgEc3fwWGUzUK1Edl8AQHAoU7wmUeKtsuYjblyRP/V7rw==}
+ peerDependencies:
+ stylelint: 11.x - 14.x
+ dependencies:
+ stylelint: 13.13.1
+ dev: true
+
+ /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.2.1):
+ resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
+ engines: {node: ^12 || >=14}
+ peerDependencies:
+ postcss-html: ^1.0.0
+ stylelint: '>=14.0.0'
+ dependencies:
+ postcss-html: 1.6.0
+ stylelint: 16.2.1(typescript@5.3.3)
+ dev: true
+
+ /stylelint-config-prettier@8.0.2(stylelint@13.13.1):
+ resolution: {integrity: sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A==}
+ engines: {node: '>= 10', npm: '>= 5'}
+ hasBin: true
+ peerDependencies:
+ stylelint: '>=11.0.0'
+ dependencies:
+ stylelint: 13.13.1
+ dev: true
+
+ /stylelint-config-property-sort-order-smacss@10.0.0(stylelint@16.2.1):
+ resolution: {integrity: sha512-NuiTgyqD8UdYY1IpTBIodBbrWKwaib5r8sq5kGHQ52UrmT8O7Fa8ZWYGipSZw6k9tGoljl9Hng2jtH+wBTMa1Q==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ css-property-sort-order-smacss: 2.2.0
+ stylelint: 16.2.1(typescript@5.3.3)
+ stylelint-order: 6.0.4(stylelint@16.2.1)
+ dev: true
+
+ /stylelint-config-recommended-vue@1.5.0(postcss-html@1.6.0)(stylelint@16.2.1):
+ resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==}
+ engines: {node: ^12 || >=14}
+ peerDependencies:
+ postcss-html: ^1.0.0
+ stylelint: '>=14.0.0'
+ dependencies:
+ postcss-html: 1.6.0
+ semver: 7.5.4
+ stylelint: 16.2.1(typescript@5.3.3)
+ stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.2.1)
+ stylelint-config-recommended: 14.0.0(stylelint@16.2.1)
+ dev: true
+
+ /stylelint-config-recommended@14.0.0(stylelint@16.2.1):
+ resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.0.0
+ dependencies:
+ stylelint: 16.2.1(typescript@5.3.3)
+ dev: true
+
+ /stylelint-config-recommended@3.0.0(stylelint@13.13.1):
+ resolution: {integrity: sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==}
+ peerDependencies:
+ stylelint: '>=10.1.0'
+ dependencies:
+ stylelint: 13.13.1
+ dev: true
+
+ /stylelint-config-standard@20.0.0(stylelint@13.13.1):
+ resolution: {integrity: sha512-IB2iFdzOTA/zS4jSVav6z+wGtin08qfj+YyExHB3LF9lnouQht//YyB0KZq9gGz5HNPkddHOzcY8HsUey6ZUlA==}
+ peerDependencies:
+ stylelint: '>=10.1.0'
+ dependencies:
+ stylelint: 13.13.1
+ stylelint-config-recommended: 3.0.0(stylelint@13.13.1)
+ dev: true
+
+ /stylelint-config-standard@36.0.0(stylelint@16.2.1):
+ resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ stylelint: ^16.1.0
+ dependencies:
+ stylelint: 16.2.1(typescript@5.3.3)
+ stylelint-config-recommended: 14.0.0(stylelint@16.2.1)
+ dev: true
+
+ /stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@13.13.1):
+ resolution: {integrity: sha512-Ws8Cav7Y+SPN0JsV407LrnNXWOrqGjxShf+37GBtnU/C58Syve9c0+I/xpLcFOosST3ternykn3Lp77f3ITnFw==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ stylelint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ stylelint: 13.13.1
+ dev: true
+
+ /stylelint-order@6.0.4(stylelint@16.2.1):
+ resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==}
+ peerDependencies:
+ stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1
+ dependencies:
+ postcss: 8.4.34
+ postcss-sorting: 8.0.2(postcss@8.4.34)
+ stylelint: 16.2.1(typescript@5.3.3)
+ dev: true
+
+ /stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.2.1):
+ resolution: {integrity: sha512-RHfSlRJIsaVg5Br94gZVdWlz/rBTyQzZflNE6dXvSxt/GthWMY3gEHsWZEBaVGg7GM+XrtVSp4RznFlB7i0oyw==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ prettier: '>=3.0.0'
+ stylelint: '>=16.0.0'
+ dependencies:
+ prettier: 3.2.5
+ prettier-linter-helpers: 1.0.0
+ stylelint: 16.2.1(typescript@5.3.3)
+ dev: true
+
+ /stylelint@13.13.1:
+ resolution: {integrity: sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dependencies:
+ '@stylelint/postcss-css-in-js': 0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39)
+ '@stylelint/postcss-markdown': 0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39)
+ autoprefixer: 9.8.8
+ balanced-match: 2.0.0
+ chalk: 4.1.2
+ cosmiconfig: 7.1.0
+ debug: 4.3.4
+ execall: 2.0.0
+ fast-glob: 3.3.2
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 6.0.1
+ get-stdin: 8.0.0
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.3.1
+ ignore: 5.3.0
+ import-lazy: 4.0.0
+ imurmurhash: 0.1.4
+ known-css-properties: 0.21.0
+ lodash: 4.17.21
+ log-symbols: 4.1.0
+ mathml-tag-names: 2.1.3
+ meow: 9.0.0
+ micromatch: 4.0.5
+ normalize-selector: 0.2.0
+ postcss: 7.0.39
+ postcss-html: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39)
+ postcss-less: 3.1.4
+ postcss-media-query-parser: 0.2.3
+ postcss-resolve-nested-selector: 0.1.1
+ postcss-safe-parser: 4.0.2
+ postcss-sass: 0.4.4
+ postcss-scss: 2.1.1
+ postcss-selector-parser: 6.0.15
+ postcss-syntax: 0.36.2(postcss-html@1.6.0)(postcss-less@6.0.0)(postcss@8.4.34)
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ slash: 3.0.0
+ specificity: 0.4.1
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ style-search: 0.1.0
+ sugarss: 2.0.0
+ svg-tags: 1.0.0
+ table: 6.8.1
+ v8-compile-cache: 2.4.0
+ write-file-atomic: 3.0.3
+ transitivePeerDependencies:
+ - postcss-jsx
+ - postcss-markdown
+ - supports-color
+ dev: true
+
+ /stylelint@16.2.1(typescript@5.3.3):
+ resolution: {integrity: sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ dependencies:
+ '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3)
+ '@csstools/css-tokenizer': 2.2.3
+ '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3)
+ '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15)
+ balanced-match: 2.0.0
+ colord: 2.9.3
+ cosmiconfig: 9.0.0(typescript@5.3.3)
+ css-functions-list: 3.2.1
+ css-tree: 2.3.1
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 8.0.0
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.3.1
+ ignore: 5.3.0
+ imurmurhash: 0.1.4
+ is-plain-object: 5.0.0
+ known-css-properties: 0.29.0
+ mathml-tag-names: 2.1.3
+ meow: 13.1.0
+ micromatch: 4.0.5
+ normalize-path: 3.0.0
+ picocolors: 1.0.0
+ postcss: 8.4.34
+ postcss-resolve-nested-selector: 0.1.1
+ postcss-safe-parser: 7.0.0(postcss@8.4.34)
+ postcss-selector-parser: 6.0.15
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ string-width: 4.2.3
+ strip-ansi: 7.1.0
+ supports-hyperlinks: 3.0.0
+ svg-tags: 1.0.0
+ table: 6.8.1
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /stylis@4.3.1:
+ resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==}
+ dev: false
+
+ /sugarss@2.0.0:
+ resolution: {integrity: sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==}
+ dependencies:
+ postcss: 7.0.39
+ dev: true
+
+ /supports-color@2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /supports-color@3.2.3:
+ resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ has-flag: 1.0.0
+ dev: true
+
+ /supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-hyperlinks@2.3.0:
+ resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+ dev: true
+
+ /supports-hyperlinks@3.0.0:
+ resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==}
+ engines: {node: '>=14.18'}
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+ dev: true
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /svg-baker@1.7.0:
+ resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==}
+ dependencies:
+ bluebird: 3.7.2
+ clone: 2.1.2
+ he: 1.2.0
+ image-size: 0.5.5
+ loader-utils: 1.4.2
+ merge-options: 1.0.1
+ micromatch: 3.1.0
+ postcss: 5.2.18
+ postcss-prefix-selector: 1.16.0(postcss@5.2.18)
+ posthtml-rename-id: 1.0.12
+ posthtml-svg-mode: 1.0.3
+ query-string: 4.3.4
+ traverse: 0.6.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+ dev: true
+
+ /svgo@2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.0.0
+ stable: 0.1.8
+ dev: true
+
+ /swagger2openapi@7.0.8:
+ resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==}
+ hasBin: true
+ dependencies:
+ call-me-maybe: 1.0.2
+ node-fetch: 2.7.0
+ node-fetch-h2: 2.3.0
+ node-readfiles: 0.2.0
+ oas-kit-common: 1.0.8
+ oas-resolver: 2.5.6
+ oas-schema-walker: 1.1.5
+ oas-validator: 5.0.8
+ reftools: 1.1.9
+ yaml: 1.10.2
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /synckit@0.8.8:
+ resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.6.2
+ dev: true
+
+ /table@6.8.1:
+ resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
+ engines: {node: '>=10.0.0'}
+ dependencies:
+ ajv: 8.12.0
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /temp-dir@3.0.0:
+ resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /temp@0.9.4:
+ resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ mkdirp: 0.5.6
+ rimraf: 2.6.3
+ dev: true
+
+ /tempfile@5.0.0:
+ resolution: {integrity: sha512-bX655WZI/F7EoTDw9JvQURqAXiPHi8o8+yFxPF2lWYyz1aHnmMRuXWqL6YB6GmeO0o4DIYWHLgGNi/X64T+X4Q==}
+ engines: {node: '>=14.18'}
+ dependencies:
+ temp-dir: 3.0.0
+ dev: true
+
+ /terser@5.28.1:
+ resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.5
+ acorn: 8.11.3
+ commander: 2.20.3
+ source-map-support: 0.5.21
+ dev: true
+
+ /text-extensions@1.9.0:
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
+ dev: true
+
+ /text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /throttle-debounce@5.0.0:
+ resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==}
+ engines: {node: '>=12.22'}
+ dev: false
+
+ /through2@2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+ dev: true
+
+ /through2@4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ dependencies:
+ readable-stream: 3.6.2
+ dev: true
+
+ /through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ dev: true
+
+ /timers-ext@0.1.7:
+ resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==}
+ dependencies:
+ es5-ext: 0.10.62
+ next-tick: 1.1.0
+ dev: true
+
+ /tiny-invariant@1.3.1:
+ resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
+ dev: true
+
+ /tiny-pinyin@1.3.2:
+ resolution: {integrity: sha512-uHNGu4evFt/8eNLldazeAM1M8JrMc1jshhJJfVRARTN3yT8HEEibofeQ7QETWQ5ISBjd6fKtTVBCC/+mGS6FpA==}
+ dev: true
+
+ /tinymce@6.8.3:
+ resolution: {integrity: sha512-3fCHKAeqT+xNwBVESf6iDbDV0VNwZNmfrkx9c/6Gz5iB8piMfaO6s7FvoiTrj1hf1gVbfyLTnz1DooI6DhgINQ==}
+ dev: false
+
+ /tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+ dependencies:
+ os-tmpdir: 1.0.2
+ dev: true
+
+ /to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ /to-object-path@0.3.0:
+ resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ kind-of: 3.2.2
+ dev: true
+
+ /to-regex-range@2.1.1:
+ resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-number: 3.0.0
+ repeat-string: 1.6.1
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /to-regex@3.0.2:
+ resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ define-property: 2.0.2
+ extend-shallow: 3.0.2
+ regex-not: 1.0.2
+ safe-regex: 1.1.0
+ dev: true
+
+ /totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: true
+
+ /traverse@0.6.8:
+ resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /trim-newlines@3.0.1:
+ resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /trough@1.0.5:
+ resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==}
+ dev: true
+
+ /ts-api-utils@1.0.3(typescript@5.3.3):
+ resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
+ engines: {node: '>=16.13.0'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+ dependencies:
+ typescript: 5.3.3
+ dev: true
+
+ /ts-node@10.9.2(@types/node@20.11.16)(typescript@5.3.3):
+ 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
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.11.16
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.3.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
+ /tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ dev: true
+
+ /tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: true
+
+ /tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+ dev: false
+
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ dev: true
+
+ /tsutils@3.21.0(typescript@4.9.5):
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ dependencies:
+ tslib: 1.14.1
+ typescript: 4.9.5
+ dev: true
+
+ /type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest@0.18.1:
+ resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest@0.6.0:
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest@0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest@3.13.1:
+ resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /type-fest@4.9.0:
+ resolution: {integrity: sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==}
+ engines: {node: '>=16'}
+ dev: true
+
+ /type@1.2.0:
+ resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
+ dev: true
+
+ /type@2.7.2:
+ resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
+ dev: true
+
+ /typed-array-buffer@1.0.0:
+ resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-byte-length@1.0.0:
+ resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ has-proto: 1.0.1
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-byte-offset@1.0.0:
+ resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ has-proto: 1.0.1
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-length@1.0.4:
+ resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+ dependencies:
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typedarray-to-buffer@3.1.5:
+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+ dependencies:
+ is-typedarray: 1.0.0
+ dev: true
+
+ /typedarray@0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ dev: true
+
+ /typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+ dev: true
+
+ /typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ /ufo@1.3.2:
+ resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
+ dev: true
+
+ /uglify-js@3.17.4:
+ resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.5
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+ dev: true
+
+ /unconfig@0.3.11:
+ resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==}
+ dependencies:
+ '@antfu/utils': 0.7.7
+ defu: 6.1.4
+ jiti: 1.21.0
+ mlly: 1.5.0
+ dev: true
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+ dev: true
+
+ /unicode-canonical-property-names-ecmascript@2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.1.0
+ dev: true
+
+ /unicode-match-property-value-ecmascript@2.1.0:
+ resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /unified@9.2.2:
+ resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ bail: 1.0.5
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 2.1.0
+ trough: 1.0.5
+ vfile: 4.2.1
+ dev: true
+
+ /union-value@1.0.1:
+ resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ arr-union: 3.1.0
+ get-value: 2.0.6
+ is-extendable: 0.1.1
+ set-value: 2.0.1
+ dev: true
+
+ /unist-util-find-all-after@3.0.2:
+ resolution: {integrity: sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==}
+ dependencies:
+ unist-util-is: 4.1.0
+ dev: true
+
+ /unist-util-is@4.1.0:
+ resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
+ dev: true
+
+ /unist-util-stringify-position@2.0.3:
+ resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
+ dependencies:
+ '@types/unist': 2.0.10
+ dev: true
+
+ /universal-user-agent@6.0.1:
+ resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
+ dev: true
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /unocss@0.58.5(postcss@8.4.34)(vite@5.1.4):
+ resolution: {integrity: sha512-0g4P6jLgRRNnhscxw7nQ9RHGrKJ1UPPiHPet+YT3TXUcmy4mTiYgo9+kGQf5bjyrzsELJ10cT6Qz2y6g9Tls4g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@unocss/webpack': 0.58.5
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
+ peerDependenciesMeta:
+ '@unocss/webpack':
+ optional: true
+ vite:
+ optional: true
+ dependencies:
+ '@unocss/astro': 0.58.5(vite@5.1.4)
+ '@unocss/cli': 0.58.5
+ '@unocss/core': 0.58.5
+ '@unocss/extractor-arbitrary-variants': 0.58.5
+ '@unocss/postcss': 0.58.5(postcss@8.4.34)
+ '@unocss/preset-attributify': 0.58.5
+ '@unocss/preset-icons': 0.58.5
+ '@unocss/preset-mini': 0.58.5
+ '@unocss/preset-tagify': 0.58.5
+ '@unocss/preset-typography': 0.58.5
+ '@unocss/preset-uno': 0.58.5
+ '@unocss/preset-web-fonts': 0.58.5
+ '@unocss/preset-wind': 0.58.5
+ '@unocss/reset': 0.58.5
+ '@unocss/transformer-attributify-jsx': 0.58.5
+ '@unocss/transformer-attributify-jsx-babel': 0.58.5
+ '@unocss/transformer-compile-class': 0.58.5
+ '@unocss/transformer-directives': 0.58.5
+ '@unocss/transformer-variant-group': 0.58.5
+ '@unocss/vite': 0.58.5(vite@5.1.4)
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ transitivePeerDependencies:
+ - postcss
+ - rollup
+ - supports-color
+ dev: true
+
+ /unplugin-vue-components@0.26.0(vue@3.4.19):
+ resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==}
+ 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
+ dependencies:
+ '@antfu/utils': 0.7.7
+ '@rollup/pluginutils': 5.1.0
+ chokidar: 3.5.3
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ local-pkg: 0.4.3
+ magic-string: 0.30.5
+ minimatch: 9.0.3
+ resolve: 1.22.8
+ unplugin: 1.6.0
+ vue: 3.4.19(typescript@5.3.3)
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /unplugin@1.6.0:
+ resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==}
+ dependencies:
+ acorn: 8.11.3
+ chokidar: 3.5.3
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.6.1
+ dev: true
+
+ /unset-value@1.0.0:
+ resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+ dev: true
+
+ /update-browserslist-db@1.0.13(browserslist@4.22.2):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.2
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /update-browserslist-db@1.0.13(browserslist@4.23.0):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.23.0
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+ dev: true
+
+ /urix@0.1.0:
+ resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
+ deprecated: Please see https://github.com/lydell/urix#deprecated
+ dev: true
+
+ /use@3.1.1:
+ resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /user-home@2.0.0:
+ resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ os-homedir: 1.0.2
+ dev: true
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ dev: true
+
+ /v8-compile-cache@2.4.0:
+ resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
+ dev: true
+
+ /validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+ dev: true
+
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /vfile-message@2.0.4:
+ resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ unist-util-stringify-position: 2.0.3
+ dev: true
+
+ /vfile@4.2.1:
+ resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==}
+ dependencies:
+ '@types/unist': 2.0.10
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 2.0.3
+ vfile-message: 2.0.4
+ dev: true
+
+ /vite-plugin-checker@0.6.4(eslint@8.57.0)(stylelint@16.2.1)(typescript@5.3.3)(vite@5.1.4)(vue-tsc@1.8.27):
+ resolution: {integrity: sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==}
+ engines: {node: '>=14.16'}
+ peerDependencies:
+ eslint: '>=7'
+ meow: ^9.0.0
+ optionator: ^0.9.1
+ stylelint: '>=13'
+ typescript: '*'
+ vite: '>=2.0.0'
+ vls: '*'
+ vti: '*'
+ vue-tsc: '>=1.3.9'
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+ meow:
+ optional: true
+ optionator:
+ optional: true
+ stylelint:
+ optional: true
+ typescript:
+ optional: true
+ vls:
+ optional: true
+ vti:
+ optional: true
+ vue-tsc:
+ optional: true
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ chokidar: 3.5.3
+ commander: 8.3.0
+ eslint: 8.57.0
+ fast-glob: 3.3.2
+ fs-extra: 11.2.0
+ npm-run-path: 4.0.1
+ semver: 7.5.4
+ strip-ansi: 6.0.1
+ stylelint: 16.2.1(typescript@5.3.3)
+ tiny-invariant: 1.3.1
+ typescript: 5.3.3
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ vscode-languageclient: 7.0.0
+ vscode-languageserver: 7.0.0
+ vscode-languageserver-textdocument: 1.0.11
+ vscode-uri: 3.0.8
+ vue-tsc: 1.8.27(typescript@5.3.3)
+ dev: true
+
+ /vite-plugin-mkcert@1.17.3(vite@5.1.4):
+ resolution: {integrity: sha512-C8iLz4Su4kEyJb1GdlGIMfKkYMqfH5qvhqVP1x/hrc+1mo9GOzqU88mevvP5epgoqawkhVpcQVQ+HTFXsRuC0g==}
+ engines: {node: '>=v16.7.0'}
+ peerDependencies:
+ vite: '>=3'
+ dependencies:
+ '@octokit/rest': 20.0.2
+ axios: 1.6.7(debug@4.3.4)
+ debug: 4.3.4
+ picocolors: 1.0.0
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite-plugin-svg-icons@2.0.1(vite@5.1.4):
+ resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
+ peerDependencies:
+ vite: '>=2.0.0'
+ dependencies:
+ '@types/svgo': 2.6.4
+ cors: 2.8.5
+ debug: 4.3.4
+ etag: 1.8.1
+ fs-extra: 10.1.0
+ pathe: 0.2.0
+ svg-baker: 1.7.0
+ svgo: 2.8.0
+ vite: 5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite@5.1.4(@types/node@20.11.16)(less@4.2.0)(lightningcss@1.24.0)(terser@5.28.1):
+ resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ '@types/node': 20.11.16
+ esbuild: 0.19.11
+ less: 4.2.0
+ lightningcss: 1.24.0
+ postcss: 8.4.35
+ rollup: 4.9.6
+ terser: 5.28.1
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vscode-jsonrpc@6.0.0:
+ resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==}
+ engines: {node: '>=8.0.0 || >=10.0.0'}
+ dev: true
+
+ /vscode-languageclient@7.0.0:
+ resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==}
+ engines: {vscode: ^1.52.0}
+ dependencies:
+ minimatch: 3.1.2
+ semver: 7.5.4
+ vscode-languageserver-protocol: 3.16.0
+ dev: true
+
+ /vscode-languageserver-protocol@3.16.0:
+ resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==}
+ dependencies:
+ vscode-jsonrpc: 6.0.0
+ vscode-languageserver-types: 3.16.0
+ dev: true
+
+ /vscode-languageserver-textdocument@1.0.11:
+ resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==}
+ dev: true
+
+ /vscode-languageserver-types@3.16.0:
+ resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==}
+ dev: true
+
+ /vscode-languageserver@7.0.0:
+ resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==}
+ hasBin: true
+ dependencies:
+ vscode-languageserver-protocol: 3.16.0
+ dev: true
+
+ /vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+ dev: true
+
+ /vue-demi@0.13.11(vue@3.4.19):
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-demi@0.14.6(vue@3.4.19):
+ resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-demi@0.14.7(vue@3.4.19):
+ resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-echarts@6.6.9(echarts@5.5.0)(vue@3.4.19):
+ resolution: {integrity: sha512-mojIq3ZvsjabeVmDthhAUDV8Kgf2Rr/X4lV4da7gEFd1fP05gcSJ0j7wa7HQkW5LlFmF2gdCJ8p4Chas6NNIQQ==}
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.5
+ '@vue/runtime-core': ^3.0.0
+ echarts: ^5.4.1
+ vue: ^2.6.12 || ^3.1.1
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ '@vue/runtime-core':
+ optional: true
+ dependencies:
+ echarts: 5.5.0
+ resize-detector: 0.3.0
+ vue: 3.4.19(typescript@5.3.3)
+ vue-demi: 0.13.11(vue@3.4.19)
+ dev: false
+
+ /vue-eslint-parser@9.4.2(eslint@8.57.0):
+ resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.57.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ lodash: 4.17.21
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vue-i18n@9.9.1(vue@3.4.19):
+ resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@intlify/core-base': 9.9.1
+ '@intlify/shared': 9.9.1
+ '@vue/devtools-api': 6.5.1
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-observe-visibility@2.0.0-alpha.1(vue@3.4.19):
+ resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-resize@2.0.0-alpha.1(vue@3.4.19):
+ resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-router@4.3.0(vue@3.4.19):
+ resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@vue/devtools-api': 6.5.1
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /vue-tsc@1.8.27(typescript@5.3.3):
+ resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.27(typescript@5.3.3)
+ semver: 7.5.4
+ typescript: 5.3.3
+ dev: true
+
+ /vue-types@3.0.2(vue@3.4.19):
+ resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
+ engines: {node: '>=10.15.0'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ is-plain-object: 3.0.1
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-types@5.1.1(vue@3.4.19):
+ resolution: {integrity: sha512-FMY/JCLWePXgGIcMDqYdJsQm1G0CDxEjq6W0+tZMJZlX37q/61eSGSIa/XFRwa9T7kkKXuxxl94/2kgxyWQqKw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ vue: ^2.0.0 || ^3.0.0
+ peerDependenciesMeta:
+ vue:
+ optional: true
+ dependencies:
+ is-plain-object: 5.0.0
+ vue: 3.4.19(typescript@5.3.3)
+ dev: false
+
+ /vue-virtual-scroller@2.0.0-beta.8(vue@3.4.19):
+ resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ mitt: 2.1.0
+ vue: 3.4.19(typescript@5.3.3)
+ vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.19)
+ vue-resize: 2.0.0-alpha.1(vue@3.4.19)
+ dev: false
+
+ /vue@3.4.19(typescript@5.3.3):
+ resolution: {integrity: sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/compiler-dom': 3.4.19
+ '@vue/compiler-sfc': 3.4.19
+ '@vue/runtime-dom': 3.4.19
+ '@vue/server-renderer': 3.4.19(vue@3.4.19)
+ '@vue/shared': 3.4.19
+ typescript: 5.3.3
+
+ /warning@4.0.3:
+ resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ dependencies:
+ defaults: 1.0.4
+ dev: true
+
+ /webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: true
+
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /webpack-virtual-modules@0.6.1:
+ resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
+ dev: true
+
+ /whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: true
+
+ /which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+ dev: true
+
+ /which-builtin-type@1.1.3:
+ resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function.prototype.name: 1.1.6
+ has-tostringtag: 1.0.0
+ is-async-function: 2.0.0
+ is-date-object: 1.0.5
+ is-finalizationregistry: 1.0.2
+ is-generator-function: 1.0.10
+ is-regex: 1.1.4
+ is-weakref: 1.0.2
+ isarray: 2.0.5
+ which-boxed-primitive: 1.0.2
+ which-collection: 1.0.1
+ which-typed-array: 1.1.13
+ dev: true
+
+ /which-collection@1.0.1:
+ resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+ dependencies:
+ is-map: 2.0.2
+ is-set: 2.0.2
+ is-weakmap: 2.0.1
+ is-weakset: 2.0.2
+ dev: true
+
+ /which-typed-array@1.1.13:
+ resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wmf@1.0.2:
+ resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /word@0.3.0:
+ resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ dev: true
+
+ /wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.0.0
+ strip-ansi: 7.1.0
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /write-file-atomic@3.0.3:
+ resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
+ dependencies:
+ imurmurhash: 0.1.4
+ is-typedarray: 1.0.0
+ signal-exit: 3.0.7
+ typedarray-to-buffer: 3.1.5
+ dev: true
+
+ /write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+ dev: true
+
+ /xlsx@0.18.5:
+ resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+ 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
+ dev: false
+
+ /xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+ dev: true
+
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: true
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /yaml@2.3.4:
+ resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
+ engines: {node: '>= 14'}
+ dev: true
+
+ /yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@16.2.0:
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
+ dependencies:
+ cliui: 7.0.4
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 20.2.9
+ dev: true
+
+ /yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /yocto-queue@1.0.0:
+ resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
+ engines: {node: '>=12.20'}
+ dev: true
+
+ /zrender@5.5.0:
+ resolution: {integrity: sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==}
+ dependencies:
+ tslib: 2.3.0
+ dev: false
+
+ /zwitch@1.0.5:
+ resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
+ dev: true
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000..201d98d
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,13 @@
+/**
+ * @type {import('prettier').Config}
+ */
+module.exports = {
+ printWidth: 100,
+ semi: true,
+ vueIndentScriptAndStyle: true,
+ singleQuote: true,
+ trailingComma: 'all',
+ proseWrap: 'never',
+ htmlWhitespaceSensitivity: 'strict',
+ endOfLine: 'auto',
+};
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..be997ac
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/iconfont.js b/public/iconfont.js
new file mode 100644
index 0000000..37aff3d
--- /dev/null
+++ b/public/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_2184398='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],h=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var v,o,i,m,z,t=function(a,h){h.parentNode.insertBefore(a,h)};if(h&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}v=function(){var a,h=document.createElement("div");h.innerHTML=l._iconfont_svg_string_2184398,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(a=document.body).firstChild?t(h,a.firstChild):a.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(v,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),v()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=v,m=l.document,z=!1,s(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,n())})}function n(){z||(z=!0,i())}function s(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}n()}}(window);
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..c322889
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/backend/api/account.ts b/src/api/backend/api/account.ts
new file mode 100644
index 0000000..5912682
--- /dev/null
+++ b/src/api/backend/api/account.ts
@@ -0,0 +1,59 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 账户登出 GET /api/account/logout */
+export async function accountLogout(options?: RequestOptions) {
+ return request('/api/account/logout', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 获取菜单列表 GET /api/account/menus */
+export async function accountMenu(options?: RequestOptions) {
+ return request('/api/account/menus', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 更改账户密码 POST /api/account/password */
+export async function accountPassword(body: API.PasswordUpdateDto, options?: RequestOptions) {
+ return request('/api/account/password', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取权限列表 GET /api/account/permissions */
+export async function accountPermissions(options?: RequestOptions) {
+ return request('/api/account/permissions', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 获取账户资料 GET /api/account/profile */
+export async function accountProfile(options?: RequestOptions) {
+ return request('/api/account/profile', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 更改账户资料 PUT /api/account/update */
+export async function accountUpdate(body: API.AccountUpdateDto, options?: RequestOptions) {
+ return request('/api/account/update', {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/auth.ts b/src/api/backend/api/auth.ts
new file mode 100644
index 0000000..8dafcbf
--- /dev/null
+++ b/src/api/backend/api/auth.ts
@@ -0,0 +1,27 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 登录 POST /api/auth/login */
+export async function authLogin(body: API.LoginDto, options?: RequestOptions) {
+ return request('/api/auth/login', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 注册 POST /api/auth/register */
+export async function authRegister(body: API.RegisterDto, options?: RequestOptions) {
+ return request('/api/auth/register', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/authEmail.ts b/src/api/backend/api/authEmail.ts
new file mode 100644
index 0000000..3a7c9b9
--- /dev/null
+++ b/src/api/backend/api/authEmail.ts
@@ -0,0 +1,15 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 发送邮箱验证码 POST /api/auth/email/send */
+export async function emailSendEmailCode(body: API.SendEmailCodeDto, options?: RequestOptions) {
+ return request('/api/auth/email/send', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/businessTodo.ts b/src/api/backend/api/businessTodo.ts
new file mode 100644
index 0000000..d0f5ea9
--- /dev/null
+++ b/src/api/backend/api/businessTodo.ts
@@ -0,0 +1,82 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取Todo列表 GET /api/todos */
+export async function todoList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TodoListParams,
+ options?: RequestOptions,
+) {
+ return request('/api/todos', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 创建Todo POST /api/todos */
+export async function todoCreate(body: API.TodoDto, options?: RequestOptions) {
+ return request('/api/todos', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 获取Todo详情 GET /api/todos/${param0} */
+export async function todoInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TodoInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/todos/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新Todo PUT /api/todos/${param0} */
+export async function todoUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TodoUpdateParams,
+ body: API.TodoUpdateDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/todos/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除Todo DELETE /api/todos/${param0} */
+export async function todoDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TodoDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/todos/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
diff --git a/src/api/backend/api/captcha.ts b/src/api/backend/api/captcha.ts
new file mode 100644
index 0000000..f3b115d
--- /dev/null
+++ b/src/api/backend/api/captcha.ts
@@ -0,0 +1,22 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取登录图片验证码 GET /api/auth/captcha/img */
+export async function captchaCaptchaByImg(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.CaptchaCaptchaByImgParams,
+ options?: RequestOptions,
+) {
+ return request('/api/auth/captcha/img', {
+ method: 'GET',
+ params: {
+ // width has a default value: 100
+ width: '100',
+ // height has a default value: 50
+ height: '50',
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/health.ts b/src/api/backend/api/health.ts
new file mode 100644
index 0000000..25325ac
--- /dev/null
+++ b/src/api/backend/api/health.ts
@@ -0,0 +1,68 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 此处后端没有提供注释 GET /api/health/database */
+export async function healthCheckDatabase(options?: RequestOptions) {
+ return request<{
+ status?: string;
+ info?: Record;
+ error?: Record;
+ details?: Record;
+ }>('/api/health/database', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 此处后端没有提供注释 GET /api/health/disk */
+export async function healthCheckDisk(options?: RequestOptions) {
+ return request<{
+ status?: string;
+ info?: Record;
+ error?: Record;
+ details?: Record;
+ }>('/api/health/disk', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 此处后端没有提供注释 GET /api/health/memory-heap */
+export async function healthCheckMemoryHeap(options?: RequestOptions) {
+ return request<{
+ status?: string;
+ info?: Record;
+ error?: Record;
+ details?: Record;
+ }>('/api/health/memory-heap', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 此处后端没有提供注释 GET /api/health/memory-rss */
+export async function healthCheckMemoryRss(options?: RequestOptions) {
+ return request<{
+ status?: string;
+ info?: Record;
+ error?: Record;
+ details?: Record;
+ }>('/api/health/memory-rss', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
+
+/** 此处后端没有提供注释 GET /api/health/network */
+export async function healthCheckNetwork(options?: RequestOptions) {
+ return request<{
+ status?: string;
+ info?: Record;
+ error?: Record;
+ details?: Record;
+ }>('/api/health/network', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/index.ts b/src/api/backend/api/index.ts
new file mode 100644
index 0000000..4f4b7e1
--- /dev/null
+++ b/src/api/backend/api/index.ts
@@ -0,0 +1,52 @@
+// @ts-ignore
+/* eslint-disable */
+// API 更新时间:
+// API 唯一标识:
+import * as auth from './auth';
+import * as account from './account';
+import * as captcha from './captcha';
+import * as authEmail from './authEmail';
+import * as systemUser from './systemUser';
+import * as systemRole from './systemRole';
+import * as systemMenu from './systemMenu';
+import * as systemParamConfig from './systemParamConfig';
+import * as systemLog from './systemLog';
+import * as systemDept from './systemDept';
+import * as systemDictType from './systemDictType';
+import * as systemDictItem from './systemDictItem';
+import * as systemTask from './systemTask';
+import * as systemOnline from './systemOnline';
+import * as systemServe from './systemServe';
+import * as toolsStorage from './toolsStorage';
+import * as systemEmail from './systemEmail';
+import * as toolsUpload from './toolsUpload';
+import * as health from './health';
+import * as systemSse from './systemSse';
+import * as netDiskManage from './netDiskManage';
+import * as netDiskOverview from './netDiskOverview';
+import * as businessTodo from './businessTodo';
+export default {
+ auth,
+ account,
+ captcha,
+ authEmail,
+ systemUser,
+ systemRole,
+ systemMenu,
+ systemParamConfig,
+ systemLog,
+ systemDept,
+ systemDictType,
+ systemDictItem,
+ systemTask,
+ systemOnline,
+ systemServe,
+ toolsStorage,
+ systemEmail,
+ toolsUpload,
+ health,
+ systemSse,
+ netDiskManage,
+ netDiskOverview,
+ businessTodo,
+};
diff --git a/src/api/backend/api/netDiskManage.ts b/src/api/backend/api/netDiskManage.ts
new file mode 100644
index 0000000..948e197
--- /dev/null
+++ b/src/api/backend/api/netDiskManage.ts
@@ -0,0 +1,128 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 复制文件或文件夹,支持批量 POST /api/netdisk/manage/copy */
+export async function netDiskManageCopy(body: API.FileOpDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/copy', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 剪切文件或文件夹,支持批量 POST /api/netdisk/manage/cut */
+export async function netDiskManageCut(body: API.FileOpDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/cut', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 删除文件或文件夹 POST /api/netdisk/manage/delete */
+export async function netDiskManageDelete(body: API.DeleteDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/delete', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 获取下载链接,不支持下载文件夹 GET /api/netdisk/manage/download */
+export async function netDiskManageDownload(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.NetDiskManageDownloadParams,
+ options?: RequestOptions,
+) {
+ return request('/api/netdisk/manage/download', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 获取文件详细信息 GET /api/netdisk/manage/info */
+export async function netDiskManageInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.NetDiskManageInfoParams,
+ options?: RequestOptions,
+) {
+ return request('/api/netdisk/manage/info', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 获取文件列表 GET /api/netdisk/manage/list */
+export async function netDiskManageList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.NetDiskManageListParams,
+ options?: RequestOptions,
+) {
+ return request('/api/netdisk/manage/list', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 添加文件备注 POST /api/netdisk/manage/mark */
+export async function netDiskManageMark(body: API.MarkFileDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/mark', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 创建文件夹,支持多级 POST /api/netdisk/manage/mkdir */
+export async function netDiskManageMkdir(body: API.MKDirDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/mkdir', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 重命名文件或文件夹 POST /api/netdisk/manage/rename */
+export async function netDiskManageRename(body: API.RenameDto, options?: RequestOptions) {
+ return request('/api/netdisk/manage/rename', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取上传Token,无Token前端无法上传 GET /api/netdisk/manage/token */
+export async function netDiskManageToken(options?: RequestOptions) {
+ return request('/api/netdisk/manage/token', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/netDiskOverview.ts b/src/api/backend/api/netDiskOverview.ts
new file mode 100644
index 0000000..d52a7c8
--- /dev/null
+++ b/src/api/backend/api/netDiskOverview.ts
@@ -0,0 +1,11 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取网盘空间数据统计 GET /api/netdisk/overview/desc */
+export async function netDiskOverviewSpace(options?: RequestOptions) {
+ return request('/api/netdisk/overview/desc', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemDept.ts b/src/api/backend/api/systemDept.ts
new file mode 100644
index 0000000..ecd636c
--- /dev/null
+++ b/src/api/backend/api/systemDept.ts
@@ -0,0 +1,77 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取部门列表 GET /api/system/depts */
+export async function deptList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DeptListParams,
+ options?: RequestOptions,
+) {
+ return request('/api/system/depts', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 创建部门 POST /api/system/depts */
+export async function deptCreate(body: API.DeptDto, options?: RequestOptions) {
+ return request('/api/system/depts', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 查询部门信息 GET /api/system/depts/${param0} */
+export async function deptInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DeptInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/depts/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新部门 PUT /api/system/depts/${param0} */
+export async function deptUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DeptUpdateParams,
+ body: API.DeptDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/depts/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除部门 DELETE /api/system/depts/${param0} */
+export async function deptDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DeptDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/depts/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
diff --git a/src/api/backend/api/systemDictItem.ts b/src/api/backend/api/systemDictItem.ts
new file mode 100644
index 0000000..76ad096
--- /dev/null
+++ b/src/api/backend/api/systemDictItem.ts
@@ -0,0 +1,91 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取字典项列表 GET /api/system/dict-item */
+export async function dictItemList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictItemListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.DictItemEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/dict-item', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增字典项 POST /api/system/dict-item */
+export async function dictItemCreate(body: API.DictItemDto, options?: RequestOptions) {
+ return request('/api/system/dict-item', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 查询字典项信息 GET /api/system/dict-item/${param0} */
+export async function dictItemInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictItemInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-item/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新字典项 POST /api/system/dict-item/${param0} */
+export async function dictItemUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictItemUpdateParams,
+ body: API.DictItemDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-item/${param0}`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除指定的字典项 DELETE /api/system/dict-item/${param0} */
+export async function dictItemDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictItemDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-item/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
diff --git a/src/api/backend/api/systemDictType.ts b/src/api/backend/api/systemDictType.ts
new file mode 100644
index 0000000..47c22bd
--- /dev/null
+++ b/src/api/backend/api/systemDictType.ts
@@ -0,0 +1,99 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取字典类型列表 GET /api/system/dict-type */
+export async function dictTypeList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictTypeListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.DictTypeEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/dict-type', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增字典类型 POST /api/system/dict-type */
+export async function dictTypeCreate(body: API.DictTypeDto, options?: RequestOptions) {
+ return request('/api/system/dict-type', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 查询字典类型信息 GET /api/system/dict-type/${param0} */
+export async function dictTypeInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictTypeInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-type/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新字典类型 POST /api/system/dict-type/${param0} */
+export async function dictTypeUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictTypeUpdateParams,
+ body: API.DictTypeDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-type/${param0}`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除指定的字典类型 DELETE /api/system/dict-type/${param0} */
+export async function dictTypeDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.DictTypeDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/dict-type/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 一次性获取所有的字典类型(不分页) GET /api/system/dict-type/select-options */
+export async function dictTypeGetAll(options?: RequestOptions) {
+ return request('/api/system/dict-type/select-options', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemEmail.ts b/src/api/backend/api/systemEmail.ts
new file mode 100644
index 0000000..10a5946
--- /dev/null
+++ b/src/api/backend/api/systemEmail.ts
@@ -0,0 +1,15 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 发送邮件 POST /api/tools/email/send */
+export async function emailSend(body: API.EmailSendDto, options?: RequestOptions) {
+ return request('/api/tools/email/send', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemLog.ts b/src/api/backend/api/systemLog.ts
new file mode 100644
index 0000000..b02c82d
--- /dev/null
+++ b/src/api/backend/api/systemLog.ts
@@ -0,0 +1,90 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 查询验证码日志列表 GET /api/system/log/captcha/list */
+export async function logCaptchaList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.LogCaptchaListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.CaptchaLogEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/log/captcha/list', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 查询登录日志列表 GET /api/system/log/login/list */
+export async function logLoginLogPage(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.LogLoginLogPageParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.LoginLogInfo[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/log/login/list', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 查询任务日志列表 GET /api/system/log/task/list */
+export async function logTaskList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.LogTaskListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.TaskLogEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/log/task/list', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemMenu.ts b/src/api/backend/api/systemMenu.ts
new file mode 100644
index 0000000..64b2bed
--- /dev/null
+++ b/src/api/backend/api/systemMenu.ts
@@ -0,0 +1,95 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取所有菜单列表 GET /api/system/menus */
+export async function menuList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.MenuListParams,
+ options?: RequestOptions,
+) {
+ return request('/api/system/menus', {
+ method: 'GET',
+ params: {
+ // extOpenMode has a default value: 1
+ extOpenMode: '1',
+ // show has a default value: 1
+ show: '1',
+
+ // keepAlive has a default value: 1
+ keepAlive: '1',
+ // status has a default value: 1
+ status: '1',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增菜单或权限 POST /api/system/menus */
+export async function menuCreate(body: API.MenuDto, options?: RequestOptions) {
+ return request('/api/system/menus', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 获取菜单或权限信息 GET /api/system/menus/${param0} */
+export async function menuInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.MenuInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/menus/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新菜单或权限 PUT /api/system/menus/${param0} */
+export async function menuUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.MenuUpdateParams,
+ body: API.MenuUpdateDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/menus/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除菜单或权限 DELETE /api/system/menus/${param0} */
+export async function menuDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.MenuDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/menus/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 获取后端定义的所有权限集 GET /api/system/menus/permissions */
+export async function menuGetPermissions(options?: RequestOptions) {
+ return request('/api/system/menus/permissions', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemOnline.ts b/src/api/backend/api/systemOnline.ts
new file mode 100644
index 0000000..a29d77e
--- /dev/null
+++ b/src/api/backend/api/systemOnline.ts
@@ -0,0 +1,23 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 下线指定在线用户 POST /api/system/online/kick */
+export async function onlineKick(body: API.KickDto, options?: RequestOptions) {
+ return request('/api/system/online/kick', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 查询当前在线用户 GET /api/system/online/list */
+export async function onlineList(options?: RequestOptions) {
+ return request('/api/system/online/list', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemParamConfig.ts b/src/api/backend/api/systemParamConfig.ts
new file mode 100644
index 0000000..579e209
--- /dev/null
+++ b/src/api/backend/api/systemParamConfig.ts
@@ -0,0 +1,91 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取参数配置列表 GET /api/system/param-config */
+export async function paramConfigList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.ParamConfigListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.ParamConfigEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/param-config', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增参数配置 POST /api/system/param-config */
+export async function paramConfigCreate(body: API.ParamConfigDto, options?: RequestOptions) {
+ return request('/api/system/param-config', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 查询参数配置信息 GET /api/system/param-config/${param0} */
+export async function paramConfigInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.ParamConfigInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/param-config/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新参数配置 POST /api/system/param-config/${param0} */
+export async function paramConfigUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.ParamConfigUpdateParams,
+ body: API.ParamConfigDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/param-config/${param0}`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除指定的参数配置 DELETE /api/system/param-config/${param0} */
+export async function paramConfigDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.ParamConfigDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/param-config/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
diff --git a/src/api/backend/api/systemRole.ts b/src/api/backend/api/systemRole.ts
new file mode 100644
index 0000000..b4e1ff4
--- /dev/null
+++ b/src/api/backend/api/systemRole.ts
@@ -0,0 +1,91 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取角色列表 GET /api/system/roles */
+export async function roleList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.RoleListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.RoleEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/roles', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增角色 POST /api/system/roles */
+export async function roleCreate(body: API.RoleDto, options?: RequestOptions) {
+ return request('/api/system/roles', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 获取角色信息 GET /api/system/roles/${param0} */
+export async function roleInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.RoleInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/roles/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新角色 PUT /api/system/roles/${param0} */
+export async function roleUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.RoleUpdateParams,
+ body: API.RoleUpdateDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/roles/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除角色 DELETE /api/system/roles/${param0} */
+export async function roleDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.RoleDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/roles/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
diff --git a/src/api/backend/api/systemServe.ts b/src/api/backend/api/systemServe.ts
new file mode 100644
index 0000000..eec48dd
--- /dev/null
+++ b/src/api/backend/api/systemServe.ts
@@ -0,0 +1,11 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取服务器运行信息 GET /api/system/serve/stat */
+export async function serveStat(options?: RequestOptions) {
+ return request('/api/system/serve/stat', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemSse.ts b/src/api/backend/api/systemSse.ts
new file mode 100644
index 0000000..722faf7
--- /dev/null
+++ b/src/api/backend/api/systemSse.ts
@@ -0,0 +1,17 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 此处后端没有提供注释 GET /api/sse/${param0} */
+export async function sseSse(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.SseSseParams,
+ options?: RequestOptions,
+) {
+ const { uid: param0, ...queryParams } = params;
+ return request>(`/api/sse/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemTask.ts b/src/api/backend/api/systemTask.ts
new file mode 100644
index 0000000..80a5611
--- /dev/null
+++ b/src/api/backend/api/systemTask.ts
@@ -0,0 +1,136 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取任务列表 GET /api/system/tasks */
+export async function taskList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.TaskEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/tasks', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ // limit has a default value: -1
+ limit: '-1',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 添加任务 POST /api/system/tasks */
+export async function taskCreate(body: API.TaskDto, options?: RequestOptions) {
+ return request('/api/system/tasks', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 查询任务详细信息 GET /api/system/tasks/${param0} */
+export async function taskInfo(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskInfoParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新任务 PUT /api/system/tasks/${param0} */
+export async function taskUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskUpdateParams,
+ body: API.TaskUpdateDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除任务 DELETE /api/system/tasks/${param0} */
+export async function taskDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 手动执行一次任务 PUT /api/system/tasks/${param0}/once */
+export async function taskOnce(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskOnceParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}/once`, {
+ method: 'PUT',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 启动任务 PUT /api/system/tasks/${param0}/start */
+export async function taskStart(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskStartParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}/start`, {
+ method: 'PUT',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 停止任务 PUT /api/system/tasks/${param0}/stop */
+export async function taskStop(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.TaskStopParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/tasks/${param0}/stop`, {
+ method: 'PUT',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/systemUser.ts b/src/api/backend/api/systemUser.ts
new file mode 100644
index 0000000..96eb203
--- /dev/null
+++ b/src/api/backend/api/systemUser.ts
@@ -0,0 +1,110 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 获取用户列表 GET /api/system/users */
+export async function userList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.UserListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.UserEntity[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/system/users', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 新增用户 POST /api/system/users */
+export async function userCreate(body: API.UserDto, options?: RequestOptions) {
+ return request('/api/system/users', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '创建成功' }),
+ });
+}
+
+/** 查询用户 GET /api/system/users/${param0} */
+export async function userRead(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.UserReadParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/users/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
+/** 更新用户 PUT /api/system/users/${param0} */
+export async function userUpdate(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.UserUpdateParams,
+ body: API.UserUpdateDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/users/${param0}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || { successMsg: '更新成功' }),
+ });
+}
+
+/** 删除用户 DELETE /api/system/users/${param0} */
+export async function userDelete(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.UserDeleteParams,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/users/${param0}`, {
+ method: 'DELETE',
+ params: { ...queryParams },
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 更改用户密码 POST /api/system/users/${param0}/password */
+export async function userPassword(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.UserPasswordParams,
+ body: API.UserPasswordDto,
+ options?: RequestOptions,
+) {
+ const { id: param0, ...queryParams } = params;
+ return request(`/api/system/users/${param0}/password`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ params: { ...queryParams },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/toolsStorage.ts b/src/api/backend/api/toolsStorage.ts
new file mode 100644
index 0000000..c22e97b
--- /dev/null
+++ b/src/api/backend/api/toolsStorage.ts
@@ -0,0 +1,44 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 删除文件 POST /api/tools/storage/delete */
+export async function storageDelete(body: API.StorageDeleteDto, options?: RequestOptions) {
+ return request('/api/tools/storage/delete', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || { successMsg: '删除成功' }),
+ });
+}
+
+/** 获取本地存储列表 GET /api/tools/storage/list */
+export async function storageList(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.StorageListParams,
+ options?: RequestOptions,
+) {
+ return request<{
+ items?: API.StorageInfo[];
+ meta?: {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+ }>('/api/tools/storage/list', {
+ method: 'GET',
+ params: {
+ // page has a default value: 1
+ page: '1',
+ // pageSize has a default value: 10
+ pageSize: '10',
+
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/toolsUpload.ts b/src/api/backend/api/toolsUpload.ts
new file mode 100644
index 0000000..950d49e
--- /dev/null
+++ b/src/api/backend/api/toolsUpload.ts
@@ -0,0 +1,35 @@
+// @ts-ignore
+/* eslint-disable */
+import { request, type RequestOptions } from '@/utils/request';
+
+/** 上传 POST /api/tools/upload */
+export async function uploadUpload(body: API.FileUploadDto, file?: File, options?: RequestOptions) {
+ const formData = new FormData();
+
+ if (file) {
+ formData.append('file', file);
+ }
+
+ Object.keys(body).forEach((ele) => {
+ const item = (body as any)[ele];
+
+ if (item !== undefined && item !== null) {
+ if (typeof item === 'object' && !(item instanceof File)) {
+ if (item instanceof Array) {
+ item.forEach((f) => formData.append(ele, f || ''));
+ } else {
+ formData.append(ele, JSON.stringify(item));
+ }
+ } else {
+ formData.append(ele, item);
+ }
+ }
+ });
+
+ return request('/api/tools/upload', {
+ method: 'POST',
+ data: formData,
+ requestType: 'form',
+ ...(options || {}),
+ });
+}
diff --git a/src/api/backend/api/typings.d.ts b/src/api/backend/api/typings.d.ts
new file mode 100644
index 0000000..aaf506d
--- /dev/null
+++ b/src/api/backend/api/typings.d.ts
@@ -0,0 +1,1271 @@
+declare namespace API {
+ type AccessTokenEntity = {
+ id: string;
+ value: string;
+ expired_at: string;
+ created_at: string;
+ refreshToken: RefreshTokenEntity;
+ user: UserEntity;
+ };
+
+ type AccountInfo = {
+ /** 用户名 */
+ username: string;
+ /** 昵称 */
+ nickname: string;
+ /** 邮箱 */
+ email: string;
+ /** 手机号 */
+ phone: string;
+ /** 备注 */
+ remark: string;
+ /** 头像 */
+ avatar: string;
+ };
+
+ type AccountMenus = {
+ meta: MenuMeta;
+ id: number;
+ path: string;
+ name: string;
+ component: string;
+ };
+
+ type AccountUpdateDto = {
+ /** 用户呢称 */
+ nickname: string;
+ /** 用户邮箱 */
+ email: string;
+ /** 用户QQ */
+ qq: string;
+ /** 用户手机号 */
+ phone: string;
+ /** 用户头像 */
+ avatar: string;
+ /** 用户备注 */
+ remark: string;
+ };
+
+ type Buffer = {};
+
+ type CaptchaCaptchaByImgParams = {
+ /** 验证码宽度 */
+ width?: number;
+ /** 验证码宽度 */
+ height?: number;
+ };
+
+ type CaptchaLogEntity = {
+ /** 用户ID */
+ userId: number;
+ /** 账号 */
+ account: string;
+ /** 验证码 */
+ code: string;
+ /** 验证码提供方 */
+ provider: Record;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type CommonEntity = {
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type CoreLoad = {
+ /** 当前CPU资源消耗 */
+ rawLoad: number;
+ /** 当前空闲CPU资源 */
+ rawLoadIdle: number;
+ };
+
+ type Cpu = {
+ /** 制造商 */
+ manufacturer: string;
+ /** 品牌 */
+ brand: string;
+ /** 物理核心数 */
+ physicalCores: number;
+ /** 型号 */
+ model: string;
+ /** 速度 in GHz */
+ speed: number;
+ /** CPU资源消耗 原始滴答 */
+ rawCurrentLoad: number;
+ /** 空闲CPU资源 原始滴答 */
+ rawCurrentLoadIdle: number;
+ /** cpu资源消耗 */
+ coresLoad: CoreLoad[];
+ };
+
+ type DeleteDto = {
+ /** 需要操作的文件或文件夹 */
+ files: FileOpItem[];
+ /** 所在目录 */
+ path: string;
+ };
+
+ type DeptDeleteParams = {
+ id: number;
+ };
+
+ type DeptDto = {
+ /** 部门名称 */
+ name: string;
+ /** 父级部门id */
+ parentId: number;
+ /** 排序编号 */
+ orderNo?: number;
+ };
+
+ type DeptEntity = {
+ /** 部门名称 */
+ name: string;
+ /** 排序 */
+ orderNo: number;
+ children: DeptEntity[];
+ parent?: DeptEntity;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type DeptInfoParams = {
+ id: number;
+ };
+
+ type DeptListParams = {
+ /** 部门名称 */
+ name?: string;
+ };
+
+ type DeptUpdateParams = {
+ id: number;
+ };
+
+ type DictItemDeleteParams = {
+ id: number;
+ };
+
+ type DictItemDto = {
+ /** 创建者 */
+ creator?: string;
+ /** 更新者 */
+ updater?: string;
+ /** 字典项键名 */
+ label?: string;
+ /** 字典项值 */
+ value?: string;
+ /** 状态 */
+ status?: number;
+ /** 备注 */
+ remark?: string;
+ /** 字典类型 ID */
+ typeId: number;
+ id?: number;
+ createdAt?: string;
+ updatedAt?: string;
+ type?: DictTypeEntity;
+ orderNo?: number;
+ };
+
+ type DictItemEntity = {
+ /** 创建者 */
+ creator: string;
+ /** 更新者 */
+ updater: string;
+ /** 字典项键名 */
+ label: string;
+ /** 字典项值 */
+ value: string;
+ /** 状态 */
+ status: number;
+ /** 备注 */
+ remark: string;
+ type: DictTypeEntity;
+ orderNo: number;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type DictItemInfoParams = {
+ id: number;
+ };
+
+ type DictItemListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 字典类型 ID */
+ typeId: number;
+ /** 字典项键名 */
+ label?: string;
+ /** 字典项值 */
+ value?: string;
+ _t?: number;
+ };
+
+ type DictItemUpdateParams = {
+ id: number;
+ };
+
+ type DictTypeDeleteParams = {
+ id: number;
+ };
+
+ type DictTypeDto = {
+ /** 创建者 */
+ creator?: string;
+ /** 更新者 */
+ updater?: string;
+ /** 字典类型名称 */
+ name?: string;
+ /** 字典类型code */
+ code?: string;
+ /** 状态 */
+ status?: number;
+ /** 备注 */
+ remark?: string;
+ id?: number;
+ createdAt?: string;
+ updatedAt?: string;
+ };
+
+ type DictTypeEntity = {
+ /** 创建者 */
+ creator: string;
+ /** 更新者 */
+ updater: string;
+ /** 字典名称 */
+ name: string;
+ /** 字典类型 */
+ code: string;
+ /** 状态 */
+ status: number;
+ /** 备注 */
+ remark: string;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type DictTypeInfoParams = {
+ id: number;
+ };
+
+ type DictTypeListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 字典类型名称 */
+ name: string;
+ /** 字典类型code */
+ code: string;
+ _t?: number;
+ };
+
+ type DictTypeUpdateParams = {
+ id: number;
+ };
+
+ type Disk = {
+ /** 磁盘空间大小 (bytes) */
+ size: number;
+ /** 已使用磁盘空间 (bytes) */
+ used: number;
+ /** 可用磁盘空间 (bytes) */
+ available: number;
+ };
+
+ type EmailSendDto = {
+ /** 收件人邮箱 */
+ to: string;
+ /** 标题 */
+ subject: string;
+ /** 正文 */
+ content: string;
+ };
+
+ type FileOpDto = {
+ /** 需要操作的文件或文件夹 */
+ files: FileOpItem[];
+ /** 操作前的目录 */
+ originPath: string;
+ /** 操作后的目录 */
+ toPath: string;
+ };
+
+ type FileOpItem = {
+ /** 文件类型 */
+ type: 'file' | 'dir';
+ /** 文件名称 */
+ name: string;
+ };
+
+ type FileUploadDto = {
+ /** 文件 */
+ file: Buffer;
+ };
+
+ type FlowInfo = {
+ /** 当月的X号 */
+ times: number[];
+ /** 对应天数的耗费流量 */
+ datas: number[];
+ };
+
+ type ImageCaptcha = {
+ /** base64格式的svg图片 */
+ img: string;
+ /** 验证码对应的唯一ID */
+ id: string;
+ };
+
+ type KickDto = {
+ /** 需要下线的角色ID */
+ id: number;
+ };
+
+ type LogCaptchaListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 用户名 */
+ username: string;
+ /** 验证码 */
+ code?: string;
+ /** 发送时间 */
+ time?: string[];
+ _t?: number;
+ };
+
+ type LoginDto = {
+ /** 手机号/邮箱 */
+ username: string;
+ /** 密码 */
+ password: string;
+ /** 验证码标识 */
+ captchaId: string;
+ /** 用户输入的验证码 */
+ verifyCode: string;
+ };
+
+ type LoginLogInfo = {
+ /** 日志编号 */
+ id: number;
+ /** 登录ip */
+ ip: string;
+ /** 登录地址 */
+ address: string;
+ /** 系统 */
+ os: string;
+ /** 浏览器 */
+ browser: string;
+ /** 登录用户名 */
+ username: string;
+ /** 登录时间 */
+ time: string;
+ };
+
+ type LoginToken = {
+ /** JWT身份Token */
+ token: string;
+ };
+
+ type LogLoginLogPageParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 用户名 */
+ username: string;
+ /** 登录IP */
+ ip?: string;
+ /** 登录地点 */
+ address?: string;
+ /** 登录时间 */
+ time?: string[];
+ _t?: number;
+ };
+
+ type LogTaskListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 用户名 */
+ username: string;
+ /** 登录IP */
+ ip?: string;
+ /** 登录时间 */
+ time?: string[];
+ _t?: number;
+ };
+
+ type MarkFileDto = {
+ /** 文件名 */
+ name: string;
+ /** 文件所在路径 */
+ path: string;
+ /** 备注信息 */
+ mark: string;
+ };
+
+ type Memory = {
+ /** total memory in bytes */
+ total: number;
+ /** 可用内存 */
+ available: number;
+ };
+
+ type MenuDeleteParams = {
+ id: number;
+ };
+
+ type MenuDto = {
+ /** 菜单类型 */
+ type: 0 | 1 | 2;
+ /** 父级菜单 */
+ parentId: number;
+ /** 菜单或权限名称 */
+ name: string;
+ /** 排序 */
+ orderNo: number;
+ /** 前端路由地址 */
+ path: string;
+ /** 是否外链 */
+ isExt: boolean;
+ /** 外链打开方式 */
+ extOpenMode: 1 | 2;
+ /** 菜单是否显示 */
+ show: 0 | 1;
+ /** 设置当前路由高亮的菜单项,一般用于详情页 */
+ activeMenu?: string;
+ /** 是否开启页面缓存 */
+ keepAlive: 0 | 1;
+ /** 状态 */
+ status: 0 | 1;
+ /** 菜单图标 */
+ icon?: string;
+ /** 对应权限 */
+ permission: string;
+ /** 菜单路由路径或外链 */
+ component?: string;
+ };
+
+ type MenuEntity = {
+ parentId: number;
+ name: string;
+ path: string;
+ permission: string;
+ type: number;
+ icon: string;
+ orderNo: number;
+ component: string;
+ isExt: boolean;
+ extOpenMode: number;
+ keepAlive: number;
+ show: number;
+ activeMenu: string;
+ status: number;
+ roles: RoleEntity[];
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type MenuInfoParams = {
+ id: number;
+ };
+
+ type MenuItemInfo = {
+ children: MenuItemInfo[];
+ parentId: number;
+ name: string;
+ path: string;
+ permission: string;
+ type: number;
+ icon: string;
+ orderNo: number;
+ component: string;
+ isExt: boolean;
+ extOpenMode: number;
+ keepAlive: number;
+ show: number;
+ activeMenu: string;
+ status: number;
+ roles: RoleEntity[];
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type MenuListParams = {
+ /** 菜单类型 */
+ type?: 0 | 1 | 2;
+ /** 父级菜单 */
+ parentId?: number;
+ /** 菜单或权限名称 */
+ name?: string;
+ /** 排序 */
+ orderNo?: number;
+ /** 前端路由地址 */
+ path?: string;
+ /** 是否外链 */
+ isExt?: boolean;
+ /** 外链打开方式 */
+ extOpenMode?: 1 | 2;
+ /** 菜单是否显示 */
+ show?: 0 | 1;
+ /** 设置当前路由高亮的菜单项,一般用于详情页 */
+ activeMenu?: string;
+ /** 是否开启页面缓存 */
+ keepAlive?: 0 | 1;
+ /** 状态 */
+ status?: 0 | 1;
+ /** 菜单图标 */
+ icon?: string;
+ /** 对应权限 */
+ permission?: string;
+ /** 菜单路由路径或外链 */
+ component?: string;
+ };
+
+ type MenuMeta = {
+ title: string;
+ permission?: string;
+ type?: number;
+ icon?: string;
+ orderNo?: number;
+ component?: string;
+ isExt?: boolean;
+ extOpenMode?: number;
+ keepAlive?: number;
+ show?: number;
+ activeMenu?: string;
+ status?: number;
+ };
+
+ type MenuUpdateDto = {
+ /** 菜单类型 */
+ type?: 0 | 1 | 2;
+ /** 父级菜单 */
+ parentId?: number;
+ /** 菜单或权限名称 */
+ name?: string;
+ /** 排序 */
+ orderNo?: number;
+ /** 前端路由地址 */
+ path?: string;
+ /** 是否外链 */
+ isExt?: boolean;
+ /** 外链打开方式 */
+ extOpenMode?: 1 | 2;
+ /** 菜单是否显示 */
+ show?: 0 | 1;
+ /** 设置当前路由高亮的菜单项,一般用于详情页 */
+ activeMenu?: string;
+ /** 是否开启页面缓存 */
+ keepAlive?: 0 | 1;
+ /** 状态 */
+ status?: 0 | 1;
+ /** 菜单图标 */
+ icon?: string;
+ /** 对应权限 */
+ permission?: string;
+ /** 菜单路由路径或外链 */
+ component?: string;
+ };
+
+ type MenuUpdateParams = {
+ id: number;
+ };
+
+ type MKDirDto = {
+ /** 文件夹名称 */
+ dirName: string;
+ /** 所属路径 */
+ path: string;
+ };
+
+ type NetDiskManageDownloadParams = {
+ /** 文件名 */
+ name: string;
+ /** 文件所在路径 */
+ path: string;
+ };
+
+ type NetDiskManageInfoParams = {
+ /** 文件名 */
+ name: string;
+ /** 文件所在路径 */
+ path: string;
+ };
+
+ type NetDiskManageListParams = {
+ /** 分页标识 */
+ marker: string;
+ /** 当前路径 */
+ path: string;
+ /** 搜索关键字 */
+ key?: string;
+ };
+
+ type OnlineUserInfo = {
+ /** 最近的一条登录日志ID */
+ id: number;
+ /** 登录IP */
+ ip: string;
+ /** 登录地点 */
+ address: string;
+ /** 用户名 */
+ username: string;
+ /** 是否当前 */
+ isCurrent: boolean;
+ /** 系统 */
+ os: string;
+ /** 浏览器 */
+ browser: string;
+ /** 是否禁用 */
+ disable: boolean;
+ };
+
+ type OverviewSpaceInfo = {
+ /** 当前使用容量 */
+ spaceSize: number;
+ /** 当前文件数量 */
+ fileSize: number;
+ /** 当天使用流量 */
+ flowSize: number;
+ /** 当天请求次数 */
+ hitSize: number;
+ /** 流量趋势,从当月1号开始计算 */
+ flowTrend: FlowInfo;
+ /** 容量趋势,从当月1号开始计算 */
+ sizeTrend: SpaceInfo;
+ };
+
+ type Pagination = {};
+
+ type ParamConfigDeleteParams = {
+ id: number;
+ };
+
+ type ParamConfigDto = {
+ /** 参数名称 */
+ name: string;
+ /** 参数键名 */
+ key: string;
+ /** 参数值 */
+ value: string;
+ /** 备注 */
+ remark?: string;
+ };
+
+ type ParamConfigEntity = {
+ /** 配置名 */
+ name: string;
+ /** 配置键名 */
+ key: string;
+ /** 配置值 */
+ value: string;
+ /** 配置描述 */
+ remark: string;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type ParamConfigInfoParams = {
+ id: number;
+ };
+
+ type ParamConfigListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 参数名称 */
+ name: string;
+ _t?: number;
+ };
+
+ type ParamConfigUpdateParams = {
+ id: number;
+ };
+
+ type PasswordUpdateDto = {
+ /** 旧密码 */
+ oldPassword: string;
+ /** 新密码 */
+ newPassword: string;
+ };
+
+ type RefreshTokenEntity = {
+ id: string;
+ value: string;
+ expired_at: string;
+ created_at: string;
+ accessToken: AccessTokenEntity;
+ };
+
+ type RegisterDto = {
+ /** 账号 */
+ username: string;
+ /** 密码 */
+ password: string;
+ /** 语言 */
+ lang: string;
+ };
+
+ type RenameDto = {
+ /** 文件类型 */
+ type: string;
+ /** 更改的名称 */
+ toName: string;
+ /** 原来的名称 */
+ name: string;
+ /** 路径 */
+ path: string;
+ };
+
+ type ResOp = {
+ data: Record;
+ code: number;
+ message: string;
+ };
+
+ type RoleDeleteParams = {
+ id: number;
+ };
+
+ type RoleDto = {
+ /** 角色名称 */
+ name: string;
+ /** 角色值 */
+ value: string;
+ /** 角色备注 */
+ remark?: string;
+ /** 状态 */
+ status: 0 | 1;
+ /** 关联菜单、权限编号 */
+ menuIds?: number[];
+ };
+
+ type RoleEntity = {
+ /** 角色名 */
+ name: string;
+ /** 角色标识 */
+ value: string;
+ /** 角色描述 */
+ remark: string;
+ /** 状态:1启用,0禁用 */
+ status: number;
+ /** 是否默认用户 */
+ default: boolean;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type RoleInfo = {
+ /** 角色名 */
+ name: string;
+ /** 角色标识 */
+ value: string;
+ /** 角色描述 */
+ remark: string;
+ /** 状态:1启用,0禁用 */
+ status: number;
+ /** 是否默认用户 */
+ default: boolean;
+ menuIds: number[];
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type RoleInfoParams = {
+ id: number;
+ };
+
+ type RoleListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ _t?: number;
+ };
+
+ type RoleUpdateDto = {
+ /** 角色名称 */
+ name?: string;
+ /** 角色值 */
+ value?: string;
+ /** 角色备注 */
+ remark?: string;
+ /** 状态 */
+ status?: 0 | 1;
+ /** 关联菜单、权限编号 */
+ menuIds?: number[];
+ };
+
+ type RoleUpdateParams = {
+ id: number;
+ };
+
+ type Runtime = {
+ /** 系统 */
+ os: string;
+ /** 服务器架构 */
+ arch: string;
+ /** Node版本 */
+ nodeVersion: string;
+ /** Npm版本 */
+ npmVersion: string;
+ };
+
+ type SendEmailCodeDto = {
+ /** 邮箱 */
+ email: string;
+ };
+
+ type ServeStatInfo = {
+ /** 运行环境 */
+ runtime: Runtime;
+ /** CPU信息 */
+ cpu: Cpu;
+ /** 磁盘信息 */
+ disk: Disk;
+ /** 内存信息 */
+ memory: Memory;
+ };
+
+ type SFileInfo = {
+ /** 文件id */
+ id: string;
+ /** 文件类型 */
+ type: 'file' | 'dir';
+ /** 文件名称 */
+ name: string;
+ /** 存入时间 */
+ putTime: string;
+ /** 文件大小, byte单位 */
+ fsize: string;
+ /** 文件的mime-type */
+ mimeType: string;
+ /** 所属目录 */
+ belongTo: string;
+ };
+
+ type SFileInfoDetail = {
+ /** 文件大小,int64类型,单位为字节(Byte) */
+ fsize: number;
+ /** 文件HASH值 */
+ hash: string;
+ /** 文件MIME类型,string类型 */
+ mimeType: string;
+ /** 文件存储类型,2 表示归档存储,1 表示低频存储,0表示普通存储。 */
+ type: number;
+ /** 文件上传时间 */
+ putTime: string;
+ /** 文件md5值 */
+ md5: string;
+ /** 上传人 */
+ uploader: string;
+ /** 文件备注 */
+ mark: string;
+ };
+
+ type SFileList = {
+ /** 文件列表 */
+ list: SFileInfo[];
+ /** 分页标志,空则代表加载完毕 */
+ marker: string;
+ };
+
+ type SpaceInfo = {
+ /** 当月的X号 */
+ times: number[];
+ /** 对应天数的容量, byte单位 */
+ datas: number[];
+ };
+
+ type SseSseParams = {
+ uid: number;
+ };
+
+ type StorageDeleteDto = {
+ /** 需要删除的文件ID列表 */
+ ids: number[];
+ };
+
+ type StorageInfo = {
+ /** 文件ID */
+ id: number;
+ /** 文件名 */
+ name: string;
+ /** 文件扩展名 */
+ extName: string;
+ /** 文件路径 */
+ path: string;
+ /** 文件类型 */
+ type: string;
+ /** 大小 */
+ size: string;
+ /** 上传时间 */
+ createdAt: string;
+ /** 上传者 */
+ username: string;
+ };
+
+ type StorageListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 文件名 */
+ name: string;
+ /** 文件后缀 */
+ extName: string;
+ /** 文件类型 */
+ type: string;
+ /** 大小 */
+ size: string;
+ /** 上传时间 */
+ time: string[];
+ /** 上传者 */
+ username: string;
+ _t?: number;
+ };
+
+ type String = {};
+
+ type TaskDeleteParams = {
+ id: number;
+ };
+
+ type TaskDto = {
+ /** 任务名称 */
+ name: string;
+ /** 调用的服务 */
+ service: string;
+ /** 任务类别:cron | interval */
+ type: 0 | 1;
+ /** 任务状态 */
+ status: 0 | 1;
+ /** 开始时间 */
+ startTime?: string;
+ /** 结束时间 */
+ endTime?: string;
+ /** 限制执行次数,负数则无限制 */
+ limit?: number;
+ /** cron表达式 */
+ cron: string;
+ /** 执行间隔,毫秒单位 */
+ every?: number;
+ /** 执行参数 */
+ data?: string;
+ /** 任务备注 */
+ remark?: string;
+ };
+
+ type TaskEntity = {
+ /** 任务名 */
+ name: string;
+ /** 任务标识 */
+ service: string;
+ /** 任务类型 0cron 1间隔 */
+ type: number;
+ /** 任务状态 0禁用 1启用 */
+ status: number;
+ /** 开始时间 */
+ startTime: string;
+ /** 结束时间 */
+ endTime: string;
+ /** 间隔时间 */
+ limit: number;
+ /** cron表达式 */
+ cron: string;
+ /** 执行次数 */
+ every: number;
+ /** 任务参数 */
+ data: string;
+ /** 任务配置 */
+ jobOpts: string;
+ /** 任务描述 */
+ remark: string;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type TaskInfoParams = {
+ id: number;
+ };
+
+ type TaskListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 任务名称 */
+ name?: string;
+ /** 调用的服务 */
+ service?: string;
+ /** 任务类别:cron | interval */
+ type?: 0 | 1;
+ /** 任务状态 */
+ status?: 0 | 1;
+ /** 开始时间 */
+ startTime?: string;
+ /** 结束时间 */
+ endTime?: string;
+ /** 限制执行次数,负数则无限制 */
+ limit?: number;
+ /** cron表达式 */
+ cron?: string;
+ /** 执行间隔,毫秒单位 */
+ every?: number;
+ /** 执行参数 */
+ data?: string;
+ /** 任务备注 */
+ remark?: string;
+ _t?: number;
+ };
+
+ type TaskLogEntity = {
+ /** 任务状态:0失败,1成功 */
+ status: number;
+ /** 任务日志信息 */
+ detail: string;
+ /** 任务耗时 */
+ consumeTime: number;
+ task: TaskEntity;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type TaskOnceParams = {
+ id: number;
+ };
+
+ type TaskStartParams = {
+ id: number;
+ };
+
+ type TaskStopParams = {
+ id: number;
+ };
+
+ type TaskUpdateDto = {
+ /** 任务名称 */
+ name?: string;
+ /** 调用的服务 */
+ service?: string;
+ /** 任务类别:cron | interval */
+ type?: 0 | 1;
+ /** 任务状态 */
+ status?: 0 | 1;
+ /** 开始时间 */
+ startTime?: string;
+ /** 结束时间 */
+ endTime?: string;
+ /** 限制执行次数,负数则无限制 */
+ limit?: number;
+ /** cron表达式 */
+ cron?: string;
+ /** 执行间隔,毫秒单位 */
+ every?: number;
+ /** 执行参数 */
+ data?: string;
+ /** 任务备注 */
+ remark?: string;
+ };
+
+ type TaskUpdateParams = {
+ id: number;
+ };
+
+ type TodoDeleteParams = {
+ id: number;
+ };
+
+ type TodoDto = {
+ /** 名称 */
+ value: string;
+ };
+
+ type TodoEntity = {
+ /** todo */
+ value: string;
+ /** todo */
+ status: boolean;
+ user: UserEntity;
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type TodoInfoParams = {
+ id: number;
+ };
+
+ type TodoListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 名称 */
+ value: string;
+ _t?: number;
+ };
+
+ type TodoUpdateDto = {
+ /** 名称 */
+ value?: string;
+ };
+
+ type TodoUpdateParams = {
+ id: number;
+ };
+
+ type TreeResult = {
+ id: number;
+ parentId: number;
+ children: string[];
+ };
+
+ type UploadToken = {
+ /** 上传token */
+ token: string;
+ };
+
+ type UserDeleteParams = {
+ id: string | number;
+ };
+
+ type UserDto = {
+ /** 头像 */
+ avatar?: string;
+ /** 登录账号 */
+ username: string;
+ /** 登录密码 */
+ password: string;
+ /** 归属角色 */
+ roleIds: number[];
+ /** 归属大区 */
+ deptId?: number;
+ /** 呢称 */
+ nickname: string;
+ /** 邮箱 */
+ email: string;
+ /** 手机号 */
+ phone?: string;
+ /** QQ */
+ qq?: string;
+ /** 备注 */
+ remark?: string;
+ /** 状态 */
+ status: 0 | 1;
+ };
+
+ type UserEntity = {
+ username: string;
+ password: string;
+ psalt: string;
+ nickname: string;
+ avatar: string;
+ qq: string;
+ email: string;
+ phone: string;
+ remark: string;
+ status: number;
+ roles: RoleEntity[];
+ dept: DeptEntity;
+ accessTokens: AccessTokenEntity[];
+ id: number;
+ createdAt: string;
+ updatedAt: string;
+ };
+
+ type UserListParams = {
+ page?: number;
+ pageSize?: number;
+ field?: string;
+ order?: 'ASC' | 'DESC';
+ /** 头像 */
+ avatar?: string;
+ /** 登录账号 */
+ username?: string;
+ /** 登录密码 */
+ password?: string;
+ /** 归属角色 */
+ roleIds?: number[];
+ /** 归属大区 */
+ deptId?: number;
+ /** 呢称 */
+ nickname?: string;
+ /** 邮箱 */
+ email?: string;
+ /** 手机号 */
+ phone?: string;
+ /** QQ */
+ qq?: string;
+ /** 备注 */
+ remark?: string;
+ /** 状态 */
+ status?: 0 | 1;
+ _t?: number;
+ };
+
+ type UserPasswordDto = {
+ /** 更改后的密码 */
+ password: string;
+ };
+
+ type UserPasswordParams = {
+ id: number;
+ };
+
+ type UserReadParams = {
+ id: number;
+ };
+
+ type UserUpdateDto = {
+ /** 头像 */
+ avatar?: string;
+ /** 登录账号 */
+ username?: string;
+ /** 登录密码 */
+ password?: string;
+ /** 归属角色 */
+ roleIds?: number[];
+ /** 归属大区 */
+ deptId?: number;
+ /** 呢称 */
+ nickname?: string;
+ /** 邮箱 */
+ email?: string;
+ /** 手机号 */
+ phone?: string;
+ /** QQ */
+ qq?: string;
+ /** 备注 */
+ remark?: string;
+ /** 状态 */
+ status?: 0 | 1;
+ };
+
+ type UserUpdateParams = {
+ id: number;
+ };
+}
diff --git a/src/api/demo/hero.ts b/src/api/demo/hero.ts
new file mode 100644
index 0000000..ccd9d58
--- /dev/null
+++ b/src/api/demo/hero.ts
@@ -0,0 +1,30 @@
+import { request } from '@/utils/request';
+
+/**
+ * @description 获取王者荣耀英雄列表
+ */
+export function getWzryHeroList(query: API.PageParams) {
+ return request('/demo/wzry/hero_list', {
+ method: 'get',
+ params: query,
+ });
+}
+
+/**
+ * @description 获取英雄联盟英雄列表
+ */
+export function getLolHeroList(query: API.PageParams) {
+ return request('/demo/lol/hero_list', {
+ method: 'get',
+ params: query,
+ });
+}
+
+/**
+ * @description 获取英雄联盟英雄列表
+ */
+export function getLolHeroInfo({ id }) {
+ return request(`/demo/lol/hero_info/${id}`, {
+ method: 'get',
+ });
+}
diff --git a/src/api/demo/select.ts b/src/api/demo/select.ts
new file mode 100644
index 0000000..2d3f840
--- /dev/null
+++ b/src/api/demo/select.ts
@@ -0,0 +1,13 @@
+import { request } from '@/utils/request';
+
+interface DemoOptionsItem {
+ name: string;
+ id: string;
+}
+
+export async function optionsListApi(params?: Recordable) {
+ return request('/select/getDemoOptions', {
+ method: 'GET',
+ params,
+ });
+}
diff --git a/src/api/index.ts b/src/api/index.ts
new file mode 100644
index 0000000..56ab413
--- /dev/null
+++ b/src/api/index.ts
@@ -0,0 +1,5 @@
+import Api from './backend/api';
+
+export { Api };
+
+export default Api;
diff --git a/src/api/typings.d.ts b/src/api/typings.d.ts
new file mode 100644
index 0000000..49b7c3f
--- /dev/null
+++ b/src/api/typings.d.ts
@@ -0,0 +1,36 @@
+// @ts-ignore
+/* eslint-disable */
+
+declare namespace API {
+ /** 全局通过表格查询返回结果 */
+ type TableListResult = {
+ items?: T;
+ meta?: PaginationResult;
+ };
+
+ /** 全局通用表格分页返回数据结构 */
+ type PaginationResult = {
+ itemCount?: number;
+ totalItems?: number;
+ itemsPerPage?: number;
+ totalPages?: number;
+ currentPage?: number;
+ };
+
+ /** 全局通用表格分页请求参数 */
+ type PageParams = {
+ page?: number;
+ pageSize?: number;
+ } & {
+ [P in keyof T]?: T[P];
+ };
+
+ type ErrorResponse = {
+ /** 业务约定的错误码 */
+ errorCode: string;
+ /** 业务上的错误信息 */
+ errorMessage?: string;
+ /** 业务上的请求是否成功 */
+ success?: boolean;
+ };
+}
diff --git a/src/assets/404.gif b/src/assets/404.gif
new file mode 100644
index 0000000..cd6e0d9
Binary files /dev/null and b/src/assets/404.gif differ
diff --git a/src/assets/analysis.svg b/src/assets/analysis.svg
new file mode 100644
index 0000000..9c2da55
--- /dev/null
+++ b/src/assets/analysis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/dark.svg b/src/assets/icons/dark.svg
new file mode 100644
index 0000000..f646bd7
--- /dev/null
+++ b/src/assets/icons/dark.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/file-type-code.svg b/src/assets/icons/file-type-code.svg
new file mode 100644
index 0000000..3413de1
--- /dev/null
+++ b/src/assets/icons/file-type-code.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-dir.svg b/src/assets/icons/file-type-dir.svg
new file mode 100644
index 0000000..1bedac3
--- /dev/null
+++ b/src/assets/icons/file-type-dir.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-docx.svg b/src/assets/icons/file-type-docx.svg
new file mode 100644
index 0000000..4fe7a6c
--- /dev/null
+++ b/src/assets/icons/file-type-docx.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-excel.svg b/src/assets/icons/file-type-excel.svg
new file mode 100644
index 0000000..cc87c77
--- /dev/null
+++ b/src/assets/icons/file-type-excel.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-img.svg b/src/assets/icons/file-type-img.svg
new file mode 100644
index 0000000..44feb58
--- /dev/null
+++ b/src/assets/icons/file-type-img.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-music.svg b/src/assets/icons/file-type-music.svg
new file mode 100644
index 0000000..2677733
--- /dev/null
+++ b/src/assets/icons/file-type-music.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-office.svg b/src/assets/icons/file-type-office.svg
new file mode 100644
index 0000000..04d37e3
--- /dev/null
+++ b/src/assets/icons/file-type-office.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-pdf.svg b/src/assets/icons/file-type-pdf.svg
new file mode 100644
index 0000000..799b897
--- /dev/null
+++ b/src/assets/icons/file-type-pdf.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-ppt.svg b/src/assets/icons/file-type-ppt.svg
new file mode 100644
index 0000000..3766d58
--- /dev/null
+++ b/src/assets/icons/file-type-ppt.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-psd.svg b/src/assets/icons/file-type-psd.svg
new file mode 100644
index 0000000..61ca32a
--- /dev/null
+++ b/src/assets/icons/file-type-psd.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-txt.svg b/src/assets/icons/file-type-txt.svg
new file mode 100644
index 0000000..9ca9d93
--- /dev/null
+++ b/src/assets/icons/file-type-txt.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-unknown.svg b/src/assets/icons/file-type-unknown.svg
new file mode 100644
index 0000000..0629c37
--- /dev/null
+++ b/src/assets/icons/file-type-unknown.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-video.svg b/src/assets/icons/file-type-video.svg
new file mode 100644
index 0000000..7582c39
--- /dev/null
+++ b/src/assets/icons/file-type-video.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/file-type-zip.svg b/src/assets/icons/file-type-zip.svg
new file mode 100644
index 0000000..84b316c
--- /dev/null
+++ b/src/assets/icons/file-type-zip.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/light.svg b/src/assets/icons/light.svg
new file mode 100644
index 0000000..ab7cc08
--- /dev/null
+++ b/src/assets/icons/light.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/locale.svg b/src/assets/icons/locale.svg
new file mode 100644
index 0000000..c7b2683
--- /dev/null
+++ b/src/assets/icons/locale.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/assets/icons/login.svg b/src/assets/icons/login.svg
new file mode 100644
index 0000000..e3ce2c4
--- /dev/null
+++ b/src/assets/icons/login.svg
@@ -0,0 +1,68 @@
+
diff --git a/src/assets/icons/logo.svg b/src/assets/icons/logo.svg
new file mode 100644
index 0000000..c8322c4
--- /dev/null
+++ b/src/assets/icons/logo.svg
@@ -0,0 +1,48 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/moon.svg b/src/assets/icons/moon.svg
new file mode 100644
index 0000000..42ccf14
--- /dev/null
+++ b/src/assets/icons/moon.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/realDark.svg b/src/assets/icons/realDark.svg
new file mode 100644
index 0000000..e0b83c8
--- /dev/null
+++ b/src/assets/icons/realDark.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/sidemenu.svg b/src/assets/icons/sidemenu.svg
new file mode 100644
index 0000000..f646bd7
--- /dev/null
+++ b/src/assets/icons/sidemenu.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/sun.svg b/src/assets/icons/sun.svg
new file mode 100644
index 0000000..b09cb77
--- /dev/null
+++ b/src/assets/icons/sun.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/topmenu.svg b/src/assets/icons/topmenu.svg
new file mode 100644
index 0000000..c107d52
--- /dev/null
+++ b/src/assets/icons/topmenu.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
new file mode 100644
index 0000000..81f5a24
Binary files /dev/null and b/src/assets/images/logo.png differ
diff --git a/src/assets/images/logowithtext.png b/src/assets/images/logowithtext.png
new file mode 100644
index 0000000..d6d84d2
Binary files /dev/null and b/src/assets/images/logowithtext.png differ
diff --git a/src/assets/images/no-preview.png b/src/assets/images/no-preview.png
new file mode 100644
index 0000000..6593a66
Binary files /dev/null and b/src/assets/images/no-preview.png differ
diff --git a/src/assets/images/tool.png b/src/assets/images/tool.png
new file mode 100644
index 0000000..35606c1
Binary files /dev/null and b/src/assets/images/tool.png differ
diff --git a/src/assets/login.svg b/src/assets/login.svg
new file mode 100644
index 0000000..e3ce2c4
--- /dev/null
+++ b/src/assets/login.svg
@@ -0,0 +1,68 @@
+
diff --git a/src/components/basic/README.md b/src/components/basic/README.md
new file mode 100644
index 0000000..cb18e04
--- /dev/null
+++ b/src/components/basic/README.md
@@ -0,0 +1,6 @@
+### 基础组件(目录说明)
+
+| 组件名称 | 描述 | 是否全局组件 | 使用建议 |
+| --- | --- | --- | --- |
+| button | `按钮组件`基于 a-button 二次封装,主要扩展了按钮的颜色,基本使用方式与 antdv 的 a-button 保持一致 | 是 | -- |
+| check-box | `复选框`基于 a-checkbox 二次封装,基本使用方式与 antdv 的 a-checkbox 保持一致 | 否 | -- |
diff --git a/src/components/basic/basic-arrow/index.ts b/src/components/basic/basic-arrow/index.ts
new file mode 100644
index 0000000..84b22c1
--- /dev/null
+++ b/src/components/basic/basic-arrow/index.ts
@@ -0,0 +1 @@
+export { default as BasicArrow } from './index.vue';
diff --git a/src/components/basic/basic-arrow/index.vue b/src/components/basic/basic-arrow/index.vue
new file mode 100644
index 0000000..ce04a78
--- /dev/null
+++ b/src/components/basic/basic-arrow/index.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/basic-help/index.vue b/src/components/basic/basic-help/index.vue
new file mode 100644
index 0000000..22e84da
--- /dev/null
+++ b/src/components/basic/basic-help/index.vue
@@ -0,0 +1,94 @@
+
+
+
diff --git a/src/components/basic/button/button.ts b/src/components/basic/button/button.ts
new file mode 100644
index 0000000..37b4c2d
--- /dev/null
+++ b/src/components/basic/button/button.ts
@@ -0,0 +1,22 @@
+import buttonProps from 'ant-design-vue/es/button/buttonTypes';
+import { theme } from 'ant-design-vue';
+import type { ButtonType as AButtonType } from 'ant-design-vue/es/button/buttonTypes';
+import type { ExtractPropTypes } from 'vue';
+
+const { defaultSeed } = theme;
+
+export declare type ButtonProps = Partial>;
+
+export type ButtonType = AButtonType | 'warning' | 'success' | 'error';
+
+/** 这里自定义颜色 */
+export const buttonColorPrimary = {
+ success: defaultSeed.colorSuccess,
+ warning: defaultSeed.colorWarning,
+ error: defaultSeed.colorError,
+} as const;
+
+export const aButtonTypes = ['default', 'primary', 'ghost', 'dashed', 'link', 'text'];
+
+export type { AButtonType };
+export { buttonProps };
diff --git a/src/components/basic/button/button.vue b/src/components/basic/button/button.vue
new file mode 100644
index 0000000..b3582f9
--- /dev/null
+++ b/src/components/basic/button/button.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
diff --git a/src/components/basic/button/index.ts b/src/components/basic/button/index.ts
new file mode 100644
index 0000000..a5bf3eb
--- /dev/null
+++ b/src/components/basic/button/index.ts
@@ -0,0 +1,9 @@
+import AButton from './button.vue';
+
+export default AButton;
+
+export const Button = AButton;
+
+export * from './button';
+
+export { AButton };
diff --git a/src/components/basic/check-box/index.vue b/src/components/basic/check-box/index.vue
new file mode 100644
index 0000000..4108816
--- /dev/null
+++ b/src/components/basic/check-box/index.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/context-menu/index.ts b/src/components/basic/context-menu/index.ts
new file mode 100644
index 0000000..ed294d7
--- /dev/null
+++ b/src/components/basic/context-menu/index.ts
@@ -0,0 +1,3 @@
+export { createContextMenu, destroyContextMenu } from './src/createContextMenu';
+
+export * from './src/typing';
diff --git a/src/components/basic/context-menu/src/ContextMenu.vue b/src/components/basic/context-menu/src/ContextMenu.vue
new file mode 100644
index 0000000..4dfd975
--- /dev/null
+++ b/src/components/basic/context-menu/src/ContextMenu.vue
@@ -0,0 +1,136 @@
+
diff --git a/src/components/basic/context-menu/src/createContextMenu.ts b/src/components/basic/context-menu/src/createContextMenu.ts
new file mode 100644
index 0000000..d82d4f9
--- /dev/null
+++ b/src/components/basic/context-menu/src/createContextMenu.ts
@@ -0,0 +1,78 @@
+import { createVNode, render } from 'vue';
+import contextMenuVue from './ContextMenu.vue';
+import type { CreateContextOptions, ContextMenuProps } from './typing';
+import { isClient } from '@/utils/is';
+
+const menuManager: {
+ domList: Element[];
+ resolve: Fn;
+} = {
+ domList: [],
+ resolve: () => {},
+};
+
+export const createContextMenu = function (options: CreateContextOptions) {
+ const { event } = options || {};
+
+ event && event?.preventDefault();
+
+ if (!isClient) {
+ return;
+ }
+ return new Promise((resolve) => {
+ const body = document.body;
+
+ const container = document.createElement('div');
+ const propsData: Partial = {
+ getPopupContainer: () => container,
+ };
+ if (options.styles) {
+ propsData.styles = options.styles;
+ }
+
+ if (options.items) {
+ propsData.items = options.items;
+ }
+
+ if (options.event) {
+ propsData.customEvent = event;
+ propsData.axis = { x: event.clientX, y: event.clientY };
+ }
+
+ const vm = createVNode(contextMenuVue, propsData);
+ render(vm, container);
+
+ const handleClick = function () {
+ menuManager.resolve('');
+ };
+
+ menuManager.domList.push(container);
+
+ const remove = function () {
+ menuManager.domList.forEach((dom: Element) => {
+ try {
+ dom && body.removeChild(dom);
+ } catch (error) {}
+ });
+ body.removeEventListener('click', handleClick);
+ body.removeEventListener('scroll', handleClick);
+ };
+
+ menuManager.resolve = function (arg) {
+ vm.component?.exposed?.close();
+ remove();
+ resolve(arg);
+ };
+ remove();
+ body.appendChild(container);
+ body.addEventListener('click', handleClick);
+ body.addEventListener('scroll', handleClick);
+ });
+};
+
+export const destroyContextMenu = function () {
+ if (menuManager) {
+ menuManager.resolve('');
+ menuManager.domList = [];
+ }
+};
diff --git a/src/components/basic/context-menu/src/typing.ts b/src/components/basic/context-menu/src/typing.ts
new file mode 100644
index 0000000..1f61cf5
--- /dev/null
+++ b/src/components/basic/context-menu/src/typing.ts
@@ -0,0 +1,38 @@
+import type { DropdownProps } from 'ant-design-vue/es/dropdown';
+
+export interface Axis {
+ x: number;
+ y: number;
+}
+
+export interface ContextMenuItem {
+ label: string;
+ icon?: string;
+ hidden?: boolean;
+ disabled?: boolean;
+ handler?: Fn;
+ divider?: boolean;
+ children?: ContextMenuItem[];
+}
+export interface CreateContextOptions {
+ event: MouseEvent;
+ icon?: string;
+ styles?: any;
+ items?: ContextMenuItem[];
+}
+
+export interface ContextMenuProps extends DropdownProps {
+ event?: MouseEvent;
+ styles?: any;
+ items: ContextMenuItem[];
+ customEvent?: MouseEvent;
+ axis?: Axis;
+ width?: number;
+ showIcon?: boolean;
+}
+
+export interface ItemContentProps {
+ showIcon: boolean | undefined;
+ item: ContextMenuItem;
+ handler: Fn;
+}
diff --git a/src/components/basic/excel/index.ts b/src/components/basic/excel/index.ts
new file mode 100644
index 0000000..899eb14
--- /dev/null
+++ b/src/components/basic/excel/index.ts
@@ -0,0 +1,8 @@
+import impExcel from './src/ImportExcel.vue';
+import { withInstall } from '@/utils';
+export { useExportExcelModal } from './src/ExportExcelModal';
+
+export const ImpExcel = withInstall(impExcel);
+// export const ExpExcelModal = withInstall(expExcelModal);
+export * from './src/typing';
+export * from './src/Export2Excel';
diff --git a/src/components/basic/excel/src/Export2Excel.ts b/src/components/basic/excel/src/Export2Excel.ts
new file mode 100644
index 0000000..c352c78
--- /dev/null
+++ b/src/components/basic/excel/src/Export2Excel.ts
@@ -0,0 +1,59 @@
+import { utils, writeFile } from 'xlsx';
+import type { WorkBook } from 'xlsx';
+import type { JsonToSheet, AoAToSheet } from './typing';
+
+const DEF_FILE_NAME = 'excel-list.xlsx';
+
+export function jsonToSheetXlsx({
+ data,
+ header,
+ filename = DEF_FILE_NAME,
+ json2sheetOpts = {},
+ write2excelOpts = { bookType: 'xlsx' },
+}: JsonToSheet) {
+ let arrData = [...data];
+ if (header) {
+ arrData.unshift(header);
+ const filterKeys = Object.keys(header);
+ arrData = arrData.map((item) => filterKeys.reduce((p, k) => ((p[k] = item[k]), p), {}));
+ json2sheetOpts.skipHeader = true;
+ }
+
+ const worksheet = utils.json_to_sheet(arrData, json2sheetOpts);
+
+ /* add worksheet to workbook */
+ const workbook: WorkBook = {
+ SheetNames: [filename],
+ Sheets: {
+ [filename]: worksheet,
+ },
+ };
+ /* output format determined by filename */
+ writeFile(workbook, filename, write2excelOpts);
+ /* at this point, out.xlsb will have been downloaded */
+}
+
+export function aoaToSheetXlsx({
+ data,
+ header,
+ filename = DEF_FILE_NAME,
+ write2excelOpts = { bookType: 'xlsx' },
+}: AoAToSheet) {
+ const arrData = [...data];
+ if (header) {
+ arrData.unshift(header);
+ }
+
+ const worksheet = utils.aoa_to_sheet(arrData);
+
+ /* add worksheet to workbook */
+ const workbook: WorkBook = {
+ SheetNames: [filename],
+ Sheets: {
+ [filename]: worksheet,
+ },
+ };
+ /* output format determined by filename */
+ writeFile(workbook, filename, write2excelOpts);
+ /* at this point, out.xlsb will have been downloaded */
+}
diff --git a/src/components/basic/excel/src/ExportExcelModal.tsx b/src/components/basic/excel/src/ExportExcelModal.tsx
new file mode 100644
index 0000000..25768e4
--- /dev/null
+++ b/src/components/basic/excel/src/ExportExcelModal.tsx
@@ -0,0 +1,78 @@
+import type { ExportModalResult } from './typing';
+import type { FormSchema } from '@/components/core/schema-form/';
+import { useI18n } from '@/hooks/useI18n';
+
+import { useFormModal } from '@/hooks/useModal/';
+
+export type OpenModalOptions = {
+ onOk: (val: ExportModalResult) => any;
+};
+
+const getSchemas = (t): FormSchema[] => [
+ {
+ field: 'filename',
+ component: 'Input',
+ label: t('component.excel.fileName'),
+ rules: [{ required: true }],
+ },
+ {
+ field: 'bookType',
+ component: 'Select',
+ label: t('component.excel.fileType'),
+ defaultValue: 'xlsx',
+ rules: [{ required: true }],
+ componentProps: {
+ options: [
+ {
+ label: 'xlsx',
+ value: 'xlsx',
+ key: 'xlsx',
+ },
+ {
+ label: 'html',
+ value: 'html',
+ key: 'html',
+ },
+ {
+ label: 'csv',
+ value: 'csv',
+ key: 'csv',
+ },
+ {
+ label: 'txt',
+ value: 'txt',
+ key: 'txt',
+ },
+ ],
+ },
+ },
+];
+
+export const useExportExcelModal = () => {
+ const { t } = useI18n();
+ const [showModal] = useFormModal();
+
+ const openModal = ({ onOk }: OpenModalOptions) => {
+ showModal({
+ modalProps: {
+ title: t('component.excel.exportModalTitle'),
+ onFinish: async (values) => {
+ const { filename, bookType } = values;
+
+ onOk({
+ filename: `${filename.split('.').shift()}.${bookType}`,
+ bookType,
+ });
+ },
+ },
+ formProps: {
+ labelWidth: 100,
+ schemas: getSchemas(t),
+ },
+ });
+ };
+
+ return {
+ openModal,
+ };
+};
diff --git a/src/components/basic/excel/src/ImportExcel.vue b/src/components/basic/excel/src/ImportExcel.vue
new file mode 100644
index 0000000..5a08559
--- /dev/null
+++ b/src/components/basic/excel/src/ImportExcel.vue
@@ -0,0 +1,159 @@
+
+
+
+
diff --git a/src/components/basic/excel/src/typing.ts b/src/components/basic/excel/src/typing.ts
new file mode 100644
index 0000000..e55e549
--- /dev/null
+++ b/src/components/basic/excel/src/typing.ts
@@ -0,0 +1,27 @@
+import type { JSON2SheetOpts, WritingOptions, BookType } from 'xlsx';
+
+export interface ExcelData {
+ header: string[];
+ results: T[];
+ meta: { sheetName: string };
+}
+
+export interface JsonToSheet {
+ data: T[];
+ header?: T;
+ filename?: string;
+ json2sheetOpts?: JSON2SheetOpts;
+ write2excelOpts?: WritingOptions;
+}
+
+export interface AoAToSheet {
+ data: T[][];
+ header?: T[];
+ filename?: string;
+ write2excelOpts?: WritingOptions;
+}
+
+export interface ExportModalResult {
+ filename: string;
+ bookType: BookType;
+}
diff --git a/src/components/basic/icon/Icon.vue b/src/components/basic/icon/Icon.vue
new file mode 100644
index 0000000..7a4f18d
--- /dev/null
+++ b/src/components/basic/icon/Icon.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/icon/index.ts b/src/components/basic/icon/index.ts
new file mode 100644
index 0000000..b04845e
--- /dev/null
+++ b/src/components/basic/icon/index.ts
@@ -0,0 +1,8 @@
+export { default as IconPicker } from './src/IconPicker.vue';
+export { default as SvgIcon } from './src/SvgIcon.vue';
+export { default as Icon } from './Icon.vue';
+export { default as IconFont } from './src/icon-font';
+
+export * from './src/props';
+
+export { setupIcons } from './src/icons.data';
diff --git a/src/components/basic/icon/src/IconPicker.vue b/src/components/basic/icon/src/IconPicker.vue
new file mode 100644
index 0000000..24129ca
--- /dev/null
+++ b/src/components/basic/icon/src/IconPicker.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/icon/src/SvgIcon.vue b/src/components/basic/icon/src/SvgIcon.vue
new file mode 100644
index 0000000..a5f7e25
--- /dev/null
+++ b/src/components/basic/icon/src/SvgIcon.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/icon/src/icon-font.tsx b/src/components/basic/icon/src/icon-font.tsx
new file mode 100644
index 0000000..49082e2
--- /dev/null
+++ b/src/components/basic/icon/src/icon-font.tsx
@@ -0,0 +1,73 @@
+import { defineComponent, unref, computed } from 'vue';
+import { createFromIconfontCN } from '@ant-design/icons-vue';
+import type { PropType } from 'vue';
+import { isString } from '@/utils/is';
+
+let scriptUrls = [`${import.meta.env.BASE_URL}iconfont.js`];
+
+// 文档:https://antdv.com/components/icon-cn#components-icon-demo-iconfont
+let MyIconFont = createFromIconfontCN({
+ // scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js',
+ // scriptUrl: '//at.alicdn.com/t/font_2184398_zflo1kjcemp.js',
+ // iconfont字体图标本地化,详见:/public/iconfont.js
+ scriptUrl: scriptUrls,
+});
+
+export default defineComponent({
+ name: 'IconFont',
+ props: {
+ type: {
+ type: String as PropType,
+ default: '',
+ },
+ prefix: {
+ type: String,
+ default: 'icon-',
+ },
+ color: {
+ type: String as PropType,
+ default: 'unset',
+ },
+ size: {
+ type: [Number, String] as PropType,
+ default: 14,
+ },
+ scriptUrl: {
+ // 阿里图库字体图标路径
+ type: String as PropType,
+ default: '',
+ },
+ },
+ setup(props, { attrs }) {
+ // 如果外部传进来字体图标路径,则覆盖默认的
+ if (props.scriptUrl) {
+ scriptUrls = [...new Set(scriptUrls.concat(props.scriptUrl))];
+ MyIconFont = createFromIconfontCN({
+ scriptUrl: scriptUrls,
+ });
+ }
+
+ const wrapStyleRef = computed(() => {
+ const { color, size } = props;
+
+ const fs = isString(size) ? parseFloat(size) : size;
+
+ return {
+ color,
+ fontSize: `${fs}px`,
+ };
+ });
+
+ return () => {
+ const { type, prefix } = props;
+
+ return type ? (
+
+ ) : null;
+ };
+ },
+});
diff --git a/src/components/basic/icon/src/icons.data.ts b/src/components/basic/icon/src/icons.data.ts
new file mode 100644
index 0000000..a77ab55
--- /dev/null
+++ b/src/components/basic/icon/src/icons.data.ts
@@ -0,0 +1,14 @@
+import { addCollection } from '@iconify/vue';
+
+import ep from '@iconify-json/ep/icons.json';
+import antDesign from '@iconify-json/ant-design/icons.json';
+
+export const icons = { 'Ant Design': antDesign, 'Element Plus': ep } as const;
+
+export type DefaultIconsType =
+ | `ep:${keyof typeof ep.icons}`
+ | `ant-design:${keyof typeof antDesign.icons}`;
+
+export const setupIcons = () => {
+ Object.values(icons).forEach((item) => addCollection(item));
+};
diff --git a/src/components/basic/icon/src/props.ts b/src/components/basic/icon/src/props.ts
new file mode 100644
index 0000000..5aad54f
--- /dev/null
+++ b/src/components/basic/icon/src/props.ts
@@ -0,0 +1,30 @@
+import type { DefaultIconsType } from './icons.data';
+
+export const svgIconProps = {
+ prefix: {
+ type: String,
+ default: 'svg-icon',
+ },
+ name: {
+ type: String,
+ required: true,
+ },
+ size: {
+ type: [Number, String],
+ default: 16,
+ },
+};
+
+export const iconPickerProps = {
+ value: {
+ type: String as PropType,
+ },
+ placeholder: String,
+};
+
+export type IconProps = {
+ type?: 'svg' | 'iconify' | 'icon-font';
+ icon: DefaultIconsType | string;
+ color?: string;
+ size?: string | number;
+};
diff --git a/src/components/basic/iframe-page/index.ts b/src/components/basic/iframe-page/index.ts
new file mode 100644
index 0000000..88c330a
--- /dev/null
+++ b/src/components/basic/iframe-page/index.ts
@@ -0,0 +1,3 @@
+import IFramePage from './index.vue';
+
+export default IFramePage;
diff --git a/src/components/basic/iframe-page/index.vue b/src/components/basic/iframe-page/index.vue
new file mode 100644
index 0000000..71fb117
--- /dev/null
+++ b/src/components/basic/iframe-page/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/locale-picker/index.ts b/src/components/basic/locale-picker/index.ts
new file mode 100644
index 0000000..f85b77f
--- /dev/null
+++ b/src/components/basic/locale-picker/index.ts
@@ -0,0 +1 @@
+export { default as LocalePicker } from './index.vue';
diff --git a/src/components/basic/locale-picker/index.vue b/src/components/basic/locale-picker/index.vue
new file mode 100644
index 0000000..e4898e9
--- /dev/null
+++ b/src/components/basic/locale-picker/index.vue
@@ -0,0 +1,60 @@
+
+
+
+ {{ getLocaleText }}
+
+
+
+
+
+
diff --git a/src/components/basic/lockscreen/huawei-charge.vue b/src/components/basic/lockscreen/huawei-charge.vue
new file mode 100644
index 0000000..2adfdd4
--- /dev/null
+++ b/src/components/basic/lockscreen/huawei-charge.vue
@@ -0,0 +1,194 @@
+
+
+
{{ battery.level.toFixed(0) }}%
+
+
+
{{ batteryStatus }}
+
+ 剩余可使用时间:{{ calcDischargingTime }}
+
+
+ 距离电池充满需要:{{ calcDischargingTime }}
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/lockscreen/index.ts b/src/components/basic/lockscreen/index.ts
new file mode 100644
index 0000000..25b3b4a
--- /dev/null
+++ b/src/components/basic/lockscreen/index.ts
@@ -0,0 +1,3 @@
+import LockScreen from './index.vue';
+
+export { LockScreen };
diff --git a/src/components/basic/lockscreen/index.vue b/src/components/basic/lockscreen/index.vue
new file mode 100644
index 0000000..aa4ffef
--- /dev/null
+++ b/src/components/basic/lockscreen/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/lockscreen/lockscreen-page.vue b/src/components/basic/lockscreen/lockscreen-page.vue
new file mode 100644
index 0000000..e72f815
--- /dev/null
+++ b/src/components/basic/lockscreen/lockscreen-page.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ state.loginForm.username }}
+
+
+
+
+
+
+
重新登录
+
+
+
+
+
{{ hour }}:{{ minute }}
+
{{ month }}月{{ day }}号,星期{{ week }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/lockscreen/xiaomi-charge.vue b/src/components/basic/lockscreen/xiaomi-charge.vue
new file mode 100644
index 0000000..acb532f
--- /dev/null
+++ b/src/components/basic/lockscreen/xiaomi-charge.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
{{ battery.level.toFixed(0) }}%
+
+
+
+
+
+
+
+
diff --git a/src/components/basic/pro-config-provider/index.vue b/src/components/basic/pro-config-provider/index.vue
new file mode 100644
index 0000000..f2609e7
--- /dev/null
+++ b/src/components/basic/pro-config-provider/index.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/progress/index.vue b/src/components/basic/progress/index.vue
new file mode 100644
index 0000000..42c7f4e
--- /dev/null
+++ b/src/components/basic/progress/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
diff --git a/src/components/basic/split-panel/index.ts b/src/components/basic/split-panel/index.ts
new file mode 100644
index 0000000..299cac3
--- /dev/null
+++ b/src/components/basic/split-panel/index.ts
@@ -0,0 +1,3 @@
+import SplitPanel from './index.vue';
+
+export { SplitPanel };
diff --git a/src/components/basic/split-panel/index.vue b/src/components/basic/split-panel/index.vue
new file mode 100644
index 0000000..0a3a928
--- /dev/null
+++ b/src/components/basic/split-panel/index.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/tinymce/constants.ts b/src/components/basic/tinymce/constants.ts
new file mode 100644
index 0000000..33bb47e
--- /dev/null
+++ b/src/components/basic/tinymce/constants.ts
@@ -0,0 +1,37 @@
+export const plugins = [
+ 'accordion',
+ 'advlist',
+ 'anchor',
+ 'autolink',
+ // 'autoresize',
+ 'autosave',
+ 'charmap',
+ 'code',
+ 'codesample',
+ 'directionality',
+ 'emoticons',
+ 'fullscreen',
+ 'help',
+ 'image',
+ 'importcss',
+ 'insertdatetime',
+ 'link',
+ 'lists',
+ 'media',
+ 'nonbreaking',
+ 'pagebreak',
+ 'preview',
+ 'quickbars',
+ 'save',
+ 'searchreplace',
+ 'table',
+ // 'template', // template, replaced by Advanced Template
+ 'visualblocks',
+ 'visualchars',
+ 'wordcount',
+];
+
+export const toolbar = [
+ 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample',
+ 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen',
+];
diff --git a/src/components/basic/tinymce/index.ts b/src/components/basic/tinymce/index.ts
new file mode 100644
index 0000000..4d2c88a
--- /dev/null
+++ b/src/components/basic/tinymce/index.ts
@@ -0,0 +1,5 @@
+import TinymceEditor from './index.vue';
+
+export default TinymceEditor;
+
+export { TinymceEditor };
diff --git a/src/components/basic/tinymce/index.vue b/src/components/basic/tinymce/index.vue
new file mode 100644
index 0000000..4da7f18
--- /dev/null
+++ b/src/components/basic/tinymce/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
diff --git a/src/components/basic/tinymce/langs/index.ts b/src/components/basic/tinymce/langs/index.ts
new file mode 100644
index 0000000..903ddeb
--- /dev/null
+++ b/src/components/basic/tinymce/langs/index.ts
@@ -0,0 +1,7 @@
+const modules = import.meta.glob('./*.js', { as: 'url', eager: true });
+
+export default Object.entries(modules).reduce((prev, [key, value]) => {
+ const name = key.replace(/\.\/(.+)\.js/, '$1');
+ prev[name] = value;
+ return prev;
+}, {});
diff --git a/src/components/basic/tinymce/langs/zh_CN.js b/src/components/basic/tinymce/langs/zh_CN.js
new file mode 100644
index 0000000..ff677d6
--- /dev/null
+++ b/src/components/basic/tinymce/langs/zh_CN.js
@@ -0,0 +1,428 @@
+tinymce.addI18n('zh_CN', {
+ Redo: '\u91cd\u505a',
+ Undo: '\u64a4\u9500',
+ Cut: '\u526a\u5207',
+ Copy: '\u590d\u5236',
+ Paste: '\u7c98\u8d34',
+ 'Select all': '\u5168\u9009',
+ 'New document': '\u65b0\u5efa\u6587\u6863',
+ Ok: '\u786e\u5b9a',
+ Cancel: '\u53d6\u6d88',
+ 'Visual aids': '\u7f51\u683c\u7ebf',
+ Bold: '\u7c97\u4f53',
+ Italic: '\u659c\u4f53',
+ Underline: '\u4e0b\u5212\u7ebf',
+ Strikethrough: '\u5220\u9664\u7ebf',
+ Superscript: '\u4e0a\u6807',
+ Subscript: '\u4e0b\u6807',
+ 'Clear formatting': '\u6e05\u9664\u683c\u5f0f',
+ Remove: '\u79fb\u9664',
+ 'Align left': '\u5de6\u5bf9\u9f50',
+ 'Align center': '\u5c45\u4e2d\u5bf9\u9f50',
+ 'Align right': '\u53f3\u5bf9\u9f50',
+ 'No alignment': '\u672a\u5bf9\u9f50',
+ Justify: '\u4e24\u7aef\u5bf9\u9f50',
+ 'Bullet list': '\u65e0\u5e8f\u5217\u8868',
+ 'Numbered list': '\u6709\u5e8f\u5217\u8868',
+ 'Decrease indent': '\u51cf\u5c11\u7f29\u8fdb',
+ 'Increase indent': '\u589e\u52a0\u7f29\u8fdb',
+ Close: '\u5173\u95ed',
+ Formats: '\u683c\u5f0f',
+ "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":
+ '\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002',
+ Headings: '\u6807\u9898',
+ 'Heading 1': '\u4e00\u7ea7\u6807\u9898',
+ 'Heading 2': '\u4e8c\u7ea7\u6807\u9898',
+ 'Heading 3': '\u4e09\u7ea7\u6807\u9898',
+ 'Heading 4': '\u56db\u7ea7\u6807\u9898',
+ 'Heading 5': '\u4e94\u7ea7\u6807\u9898',
+ 'Heading 6': '\u516d\u7ea7\u6807\u9898',
+ Preformatted: '\u9884\u5148\u683c\u5f0f\u5316\u7684',
+ Div: 'Div',
+ Pre: '\u524d\u8a00',
+ Code: '\u4ee3\u7801',
+ Paragraph: '\u6bb5\u843d',
+ Blockquote: '\u5f15\u6587\u533a\u5757',
+ Inline: '\u6587\u672c',
+ Blocks: '\u6837\u5f0f',
+ 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.':
+ '\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002',
+ Fonts: '\u5b57\u4f53',
+ 'Font sizes': '\u5b57\u4f53\u5927\u5c0f',
+ Class: '\u7c7b\u578b',
+ 'Browse for an image': '\u6d4f\u89c8\u56fe\u50cf',
+ OR: '\u6216',
+ 'Drop an image here': '\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64',
+ Upload: '\u4e0a\u4f20',
+ 'Uploading image': '\u4e0a\u4f20\u56fe\u7247',
+ Block: '\u5757',
+ Align: '\u5bf9\u9f50',
+ Default: '\u9884\u8bbe',
+ Circle: '\u7a7a\u5fc3\u5706',
+ Disc: '\u5b9e\u5fc3\u5706',
+ Square: '\u5b9e\u5fc3\u65b9\u5757',
+ 'Lower Alpha': '\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd',
+ 'Lower Greek': '\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd',
+ 'Lower Roman': '\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57',
+ 'Upper Alpha': '\u5927\u5199\u82f1\u6587\u5b57\u6bcd',
+ 'Upper Roman': '\u5927\u5199\u7f57\u9a6c\u6570\u5b57',
+ 'Anchor...': '\u951a\u70b9...',
+ Anchor: '\u951a\u70b9',
+ Name: '\u540d\u79f0',
+ ID: 'ID',
+ 'ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.':
+ 'ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002',
+ 'You have unsaved changes are you sure you want to navigate away?':
+ '\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f',
+ 'Restore last draft': '\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f',
+ 'Special character...': '\u7279\u6b8a\u5b57\u7b26...',
+ 'Special Character': '\u7279\u6b8a\u5b57\u7b26',
+ 'Source code': '\u6e90\u4ee3\u7801',
+ 'Insert/Edit code sample': '\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b',
+ Language: '\u8bed\u8a00',
+ 'Code sample...': '\u793a\u4f8b\u4ee3\u7801...',
+ 'Left to right': '\u7531\u5de6\u5230\u53f3',
+ 'Right to left': '\u7531\u53f3\u5230\u5de6',
+ Title: '\u6807\u9898',
+ Fullscreen: '\u5168\u5c4f',
+ Action: '\u52a8\u4f5c',
+ Shortcut: '\u5feb\u6377\u65b9\u5f0f',
+ Help: '\u5e2e\u52a9',
+ Address: '\u5730\u5740',
+ 'Focus to menubar': '\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f',
+ 'Focus to toolbar': '\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f',
+ 'Focus to element path': '\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84',
+ 'Focus to contextual toolbar': '\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355',
+ 'Insert link (if link plugin activated)':
+ '\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+ 'Save (if save plugin activated)':
+ '\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+ 'Find (if searchreplace plugin activated)':
+ '\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+ 'Plugins installed ({0}):': '\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):',
+ 'Premium plugins:': '\u4f18\u79c0\u63d2\u4ef6\uff1a',
+ 'Learn more...': '\u4e86\u89e3\u66f4\u591a...',
+ 'You are using {0}': '\u4f60\u6b63\u5728\u4f7f\u7528 {0}',
+ Plugins: '\u63d2\u4ef6',
+ 'Handy Shortcuts': '\u5feb\u6377\u952e',
+ 'Horizontal line': '\u6c34\u5e73\u5206\u5272\u7ebf',
+ 'Insert/edit image': '\u63d2\u5165/\u7f16\u8f91\u56fe\u7247',
+ 'Alternative description': '\u66ff\u4ee3\u63cf\u8ff0',
+ Accessibility: '\u8f85\u52a9\u529f\u80fd',
+ 'Image is decorative': '\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684',
+ Source: '\u6e90',
+ Dimensions: '\u5c3a\u5bf8',
+ 'Constrain proportions': '\u4fdd\u6301\u6bd4\u4f8b',
+ General: '\u4e00\u822c',
+ Advanced: '\u9ad8\u7ea7',
+ Style: '\u6837\u5f0f',
+ 'Vertical space': '\u5782\u76f4\u95f4\u8ddd',
+ 'Horizontal space': '\u6c34\u5e73\u95f4\u8ddd',
+ Border: '\u6846\u7ebf',
+ 'Insert image': '\u63d2\u5165\u56fe\u7247',
+ 'Image...': '\u56fe\u7247...',
+ 'Image list': '\u56fe\u7247\u6e05\u5355',
+ Resize: '\u8c03\u6574\u5927\u5c0f',
+ 'Insert date/time': '\u63d2\u5165\u65e5\u671f/\u65f6\u95f4',
+ 'Date/time': '\u65e5\u671f/\u65f6\u95f4',
+ 'Insert/edit link': '\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5',
+ 'Text to display': '\u8981\u663e\u793a\u7684\u6587\u672c',
+ Url: '\u5730\u5740',
+ 'Open link in...': '\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...',
+ 'Current window': '\u5f53\u524d\u7a97\u53e3',
+ None: '\u65e0',
+ 'New window': '\u65b0\u7a97\u53e3',
+ 'Open link': '\u6253\u5f00\u94fe\u63a5',
+ 'Remove link': '\u79fb\u9664\u94fe\u63a5',
+ Anchors: '\u951a\u70b9',
+ 'Link...': '\u94fe\u63a5...',
+ 'Paste or type a link': '\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5',
+ 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?':
+ '\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto: \u524d\u7f00\u5417\uff1f',
+ 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?':
+ '\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:// \u524d\u7f00\u5417\uff1f',
+ 'The URL you entered seems to be an external link. Do you want to add the required https:// prefix?':
+ '\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f',
+ 'Link list': '\u94fe\u63a5\u6e05\u5355',
+ 'Insert video': '\u63d2\u5165\u89c6\u9891',
+ 'Insert/edit video': '\u63d2\u5165/\u7f16\u8f91\u89c6\u9891',
+ 'Insert/edit media': '\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53',
+ 'Alternative source': '\u955c\u50cf',
+ 'Alternative source URL': '\u66ff\u4ee3\u6765\u6e90\u7f51\u5740',
+ 'Media poster (Image URL)': '\u5c01\u9762(\u56fe\u7247\u5730\u5740)',
+ 'Paste your embed code below:': '\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:',
+ Embed: '\u5185\u5d4c',
+ 'Media...': '\u591a\u5a92\u4f53...',
+ 'Nonbreaking space': '\u4e0d\u95f4\u65ad\u7a7a\u683c',
+ 'Page break': '\u5206\u9875\u7b26',
+ 'Paste as text': '\u7c98\u8d34\u4e3a\u6587\u672c',
+ Preview: '\u9884\u89c8',
+ Print: '\u6253\u5370',
+ 'Print...': '\u6253\u5370...',
+ Save: '\u4fdd\u5b58',
+ Find: '\u5bfb\u627e',
+ 'Replace with': '\u66ff\u6362\u4e3a',
+ Replace: '\u66ff\u6362',
+ 'Replace all': '\u66ff\u6362\u5168\u90e8',
+ Previous: '\u4e0a\u4e00\u4e2a',
+ Next: '\u4e0b\u4e00\u4e2a',
+ 'Find and Replace': '\u67e5\u627e\u548c\u66ff\u6362',
+ 'Find and replace...': '\u67e5\u627e\u5e76\u66ff\u6362...',
+ 'Could not find the specified string.': '\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002',
+ 'Match case': '\u5927\u5c0f\u5199\u5339\u914d',
+ 'Find whole words only': '\u5168\u5b57\u5339\u914d',
+ 'Find in selection': '\u5728\u9009\u533a\u4e2d\u67e5\u627e',
+ 'Insert table': '\u63d2\u5165\u8868\u683c',
+ 'Table properties': '\u8868\u683c\u5c5e\u6027',
+ 'Delete table': '\u5220\u9664\u8868\u683c',
+ Cell: '\u5355\u5143\u683c',
+ Row: '\u884c',
+ Column: '\u5217',
+ 'Cell properties': '\u5355\u5143\u683c\u5c5e\u6027',
+ 'Merge cells': '\u5408\u5e76\u5355\u5143\u683c',
+ 'Split cell': '\u62c6\u5206\u5355\u5143\u683c',
+ 'Insert row before': '\u5728\u4e0a\u65b9\u63d2\u5165\u884c',
+ 'Insert row after': '\u5728\u4e0b\u65b9\u63d2\u5165\u884c',
+ 'Delete row': '\u5220\u9664\u884c',
+ 'Row properties': '\u884c\u5c5e\u6027',
+ 'Cut row': '\u526a\u5207\u884c',
+ 'Cut column': '\u526a\u5207\u5217',
+ 'Copy row': '\u590d\u5236\u884c',
+ 'Copy column': '\u590d\u5236\u5217',
+ 'Paste row before': '\u7c98\u8d34\u884c\u5230\u4e0a\u65b9',
+ 'Paste column before': '\u7c98\u8d34\u6b64\u5217\u524d',
+ 'Paste row after': '\u7c98\u8d34\u884c\u5230\u4e0b\u65b9',
+ 'Paste column after': '\u7c98\u8d34\u540e\u9762\u7684\u5217',
+ 'Insert column before': '\u5728\u5de6\u4fa7\u63d2\u5165\u5217',
+ 'Insert column after': '\u5728\u53f3\u4fa7\u63d2\u5165\u5217',
+ 'Delete column': '\u5220\u9664\u5217',
+ Cols: '\u5217',
+ Rows: '\u884c\u6570',
+ Width: '\u5bbd\u5ea6',
+ Height: '\u9ad8\u5ea6',
+ 'Cell spacing': '\u5355\u5143\u683c\u5916\u95f4\u8ddd',
+ 'Cell padding': '\u5355\u5143\u683c\u5185\u8fb9\u8ddd',
+ 'Row clipboard actions': '\u884c\u526a\u8d34\u677f\u64cd\u4f5c',
+ 'Column clipboard actions': '\u5217\u526a\u8d34\u677f\u64cd\u4f5c',
+ 'Table styles': '\u8868\u683c\u6837\u5f0f',
+ 'Cell styles': '\u5355\u5143\u683c\u6837\u5f0f',
+ 'Column header': '\u5217\u6807\u9898',
+ 'Row header': '\u884c\u5934',
+ 'Table caption': '\u8868\u683c\u6807\u9898',
+ Caption: '\u6807\u9898',
+ 'Show caption': '\u663e\u793a\u6807\u9898',
+ Left: '\u5de6',
+ Center: '\u5c45\u4e2d',
+ Right: '\u53f3',
+ 'Cell type': '\u50a8\u5b58\u683c\u522b',
+ Scope: '\u8303\u56f4',
+ Alignment: '\u5bf9\u9f50',
+ 'Horizontal align': '\u6c34\u5e73\u5bf9\u9f50',
+ 'Vertical align': '\u5782\u76f4\u5bf9\u9f50',
+ Top: '\u4e0a\u65b9\u5bf9\u9f50',
+ Middle: '\u5c45\u4e2d\u5bf9\u9f50',
+ Bottom: '\u4e0b\u65b9\u5bf9\u9f50',
+ 'Header cell': '\u8868\u5934\u5355\u5143\u683c',
+ 'Row group': '\u884c\u7ec4',
+ 'Column group': '\u5217\u7ec4',
+ 'Row type': '\u884c\u7c7b\u578b',
+ Header: '\u8868\u5934',
+ Body: '\u8868\u4f53',
+ Footer: '\u8868\u5c3e',
+ 'Border color': '\u6846\u7ebf\u989c\u8272',
+ Solid: '\u5b9e\u7ebf',
+ Dotted: '\u865a\u7ebf',
+ Dashed: '\u865a\u7ebf',
+ Double: '\u53cc\u7cbe\u5ea6',
+ Groove: '\u51f9\u69fd',
+ Ridge: '\u6d77\u810a\u5ea7',
+ Inset: '\u5d4c\u5165',
+ Outset: '\u5916\u7f6e',
+ Hidden: '\u9690\u85cf',
+ 'Insert template...': '\u63d2\u5165\u6a21\u677f...',
+ Templates: '\u6a21\u677f',
+ Template: '\u6a21\u677f',
+ 'Insert Template': '\u63d2\u5165\u6a21\u677f',
+ 'Text color': '\u6587\u672c\u989c\u8272',
+ 'Background color': '\u80cc\u666f\u989c\u8272',
+ 'Custom...': '\u81ea\u5b9a\u4e49......',
+ 'Custom color': '\u81ea\u5b9a\u4e49\u989c\u8272',
+ 'No color': '\u65e0',
+ 'Remove color': '\u79fb\u9664\u989c\u8272',
+ 'Show blocks': '\u663e\u793a\u533a\u5757\u8fb9\u6846',
+ 'Show invisible characters': '\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26',
+ 'Word count': '\u5b57\u6570',
+ Count: '\u8ba1\u6570',
+ Document: '\u6587\u6863',
+ Selection: '\u9009\u62e9',
+ Words: '\u5355\u8bcd',
+ 'Words: {0}': '\u5b57\u6570\uff1a{0}',
+ '{0} words': '{0} \u5b57',
+ File: '\u6587\u4ef6',
+ Edit: '\u7f16\u8f91',
+ Insert: '\u63d2\u5165',
+ View: '\u67e5\u770b',
+ Format: '\u683c\u5f0f',
+ Table: '\u8868\u683c',
+ Tools: '\u5de5\u5177',
+ 'Powered by {0}': '\u7531{0}\u9a71\u52a8',
+ 'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help':
+ '\u7f16\u8f91\u533a\u3002\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9',
+ 'Image title': '\u56fe\u7247\u6807\u9898',
+ 'Border width': '\u8fb9\u6846\u5bbd\u5ea6',
+ 'Border style': '\u8fb9\u6846\u6837\u5f0f',
+ Error: '\u9519\u8bef',
+ Warn: '\u8b66\u544a',
+ Valid: '\u6709\u6548',
+ 'To open the popup, press Shift+Enter': '\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846',
+ 'Rich Text Area': '\u5bcc\u6587\u672c\u533a\u57df',
+ 'Rich Text Area. Press ALT-0 for help.':
+ '\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002',
+ 'System Font': '\u7cfb\u7edf\u5b57\u4f53',
+ 'Failed to upload image: {0}': '\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}',
+ 'Failed to load plugin: {0} from url {1}':
+ '\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}',
+ 'Failed to load plugin url: {0}': '\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}',
+ 'Failed to initialize plugin: {0}': '\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}',
+ example: '\u793a\u4f8b',
+ Search: '\u641c\u7d22',
+ All: '\u5168\u90e8',
+ Currency: '\u8d27\u5e01',
+ Text: '\u6587\u5b57',
+ Quotations: '\u5f15\u7528',
+ Mathematical: '\u6570\u5b66',
+ 'Extended Latin': '\u62c9\u4e01\u8bed\u6269\u5145',
+ Symbols: '\u7b26\u53f7',
+ Arrows: '\u7bad\u5934',
+ 'User Defined': '\u81ea\u5b9a\u4e49',
+ 'dollar sign': '\u7f8e\u5143\u7b26\u53f7',
+ 'currency sign': '\u8d27\u5e01\u7b26\u53f7',
+ 'euro-currency sign': '\u6b27\u5143\u7b26\u53f7',
+ 'colon sign': '\u5192\u53f7',
+ 'cruzeiro sign': '\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7',
+ 'french franc sign': '\u6cd5\u90ce\u7b26\u53f7',
+ 'lira sign': '\u91cc\u62c9\u7b26\u53f7',
+ 'mill sign': '\u5bc6\u5c14\u7b26\u53f7',
+ 'naira sign': '\u5948\u62c9\u7b26\u53f7',
+ 'peseta sign': '\u6bd4\u585e\u5854\u7b26\u53f7',
+ 'rupee sign': '\u5362\u6bd4\u7b26\u53f7',
+ 'won sign': '\u97e9\u5143\u7b26\u53f7',
+ 'new sheqel sign': '\u65b0\u8c22\u514b\u5c14\u7b26\u53f7',
+ 'dong sign': '\u8d8a\u5357\u76fe\u7b26\u53f7',
+ 'kip sign': '\u8001\u631d\u57fa\u666e\u7b26\u53f7',
+ 'tugrik sign': '\u56fe\u683c\u91cc\u514b\u7b26\u53f7',
+ 'drachma sign': '\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7',
+ 'german penny symbol': '\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7',
+ 'peso sign': '\u6bd4\u7d22\u7b26\u53f7',
+ 'guarani sign': '\u74dc\u62c9\u5c3c\u7b26\u53f7',
+ 'austral sign': '\u6fb3\u5143\u7b26\u53f7',
+ 'hryvnia sign': '\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7',
+ 'cedi sign': '\u585e\u5730\u7b26\u53f7',
+ 'livre tournois sign': '\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7',
+ 'spesmilo sign': 'spesmilo\u7b26\u53f7',
+ 'tenge sign': '\u575a\u6208\u7b26\u53f7',
+ 'indian rupee sign': '\u5370\u5ea6\u5362\u6bd4',
+ 'turkish lira sign': '\u571f\u8033\u5176\u91cc\u62c9',
+ 'nordic mark sign': '\u5317\u6b27\u9a6c\u514b',
+ 'manat sign': '\u9a6c\u7eb3\u7279\u7b26\u53f7',
+ 'ruble sign': '\u5362\u5e03\u7b26\u53f7',
+ 'yen character': '\u65e5\u5143\u5b57\u6837',
+ 'yuan character': '\u4eba\u6c11\u5e01\u5143\u5b57\u6837',
+ 'yuan character, in hong kong and taiwan':
+ '\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09',
+ 'yen/yuan character variant one': '\u5143\u5b57\u6837\uff08\u5927\u5199\uff09',
+ Emojis: 'Emojis',
+ 'Emojis...': 'Emojis...',
+ 'Loading emojis...': '\u6b63\u5728\u52a0\u8f7dEmojis...',
+ 'Could not load emojis': '\u65e0\u6cd5\u52a0\u8f7dEmojis',
+ People: '\u4eba\u7c7b',
+ 'Animals and Nature': '\u52a8\u7269\u548c\u81ea\u7136',
+ 'Food and Drink': '\u98df\u7269\u548c\u996e\u54c1',
+ Activity: '\u6d3b\u52a8',
+ 'Travel and Places': '\u65c5\u6e38\u548c\u5730\u70b9',
+ Objects: '\u7269\u4ef6',
+ Flags: '\u65d7\u5e1c',
+ Characters: '\u5b57\u7b26',
+ 'Characters (no spaces)': '\u5b57\u7b26(\u65e0\u7a7a\u683c)',
+ '{0} characters': '{0} \u4e2a\u5b57\u7b26',
+ 'Error: Form submit field collision.':
+ '\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002',
+ 'Error: No form element found.': '\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002',
+ 'Color swatch': '\u989c\u8272\u6837\u672c',
+ 'Color Picker': '\u9009\u8272\u5668',
+ 'Invalid hex color code: {0}':
+ '\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}',
+ 'Invalid input': '\u65e0\u6548\u8f93\u5165',
+ R: 'R',
+ 'Red component': '\u7ea2\u8272\u90e8\u5206',
+ G: 'G',
+ 'Green component': '\u7eff\u8272\u90e8\u5206',
+ B: 'B',
+ 'Blue component': '\u767d\u8272\u90e8\u5206',
+ '#': '#',
+ 'Hex color code': '\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801',
+ 'Range 0 to 255': '\u8303\u56f40\u81f3255',
+ Turquoise: '\u9752\u7eff\u8272',
+ Green: '\u7eff\u8272',
+ Blue: '\u84dd\u8272',
+ Purple: '\u7d2b\u8272',
+ 'Navy Blue': '\u6d77\u519b\u84dd',
+ 'Dark Turquoise': '\u6df1\u84dd\u7eff\u8272',
+ 'Dark Green': '\u6df1\u7eff\u8272',
+ 'Medium Blue': '\u4e2d\u84dd\u8272',
+ 'Medium Purple': '\u4e2d\u7d2b\u8272',
+ 'Midnight Blue': '\u6df1\u84dd\u8272',
+ Yellow: '\u9ec4\u8272',
+ Orange: '\u6a59\u8272',
+ Red: '\u7ea2\u8272',
+ 'Light Gray': '\u6d45\u7070\u8272',
+ Gray: '\u7070\u8272',
+ 'Dark Yellow': '\u6697\u9ec4\u8272',
+ 'Dark Orange': '\u6df1\u6a59\u8272',
+ 'Dark Red': '\u6df1\u7ea2\u8272',
+ 'Medium Gray': '\u4e2d\u7070\u8272',
+ 'Dark Gray': '\u6df1\u7070\u8272',
+ 'Light Green': '\u6d45\u7eff\u8272',
+ 'Light Yellow': '\u6d45\u9ec4\u8272',
+ 'Light Red': '\u6d45\u7ea2\u8272',
+ 'Light Purple': '\u6d45\u7d2b\u8272',
+ 'Light Blue': '\u6d45\u84dd\u8272',
+ 'Dark Purple': '\u6df1\u7d2b\u8272',
+ 'Dark Blue': '\u6df1\u84dd\u8272',
+ Black: '\u9ed1\u8272',
+ White: '\u767d\u8272',
+ 'Switch to or from fullscreen mode': '\u5207\u6362\u5168\u5c4f\u6a21\u5f0f',
+ 'Open help dialog': '\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846',
+ history: '\u5386\u53f2',
+ styles: '\u6837\u5f0f',
+ formatting: '\u683c\u5f0f\u5316',
+ alignment: '\u5bf9\u9f50',
+ indentation: '\u7f29\u8fdb',
+ Font: '\u5b57\u4f53',
+ Size: '\u5b57\u53f7',
+ 'More...': '\u66f4\u591a...',
+ 'Select...': '\u9009\u62e9...',
+ Preferences: '\u9996\u9009\u9879',
+ Yes: '\u662f',
+ No: '\u5426',
+ 'Keyboard Navigation': '\u952e\u76d8\u6307\u5f15',
+ Version: '\u7248\u672c',
+ 'Code view': '\u4ee3\u7801\u89c6\u56fe',
+ 'Open popup menu for split buttons':
+ '\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae',
+ 'List Properties': '\u5217\u8868\u5c5e\u6027',
+ 'List properties...': '\u6807\u9898\u5b57\u4f53\u5c5e\u6027',
+ 'Start list at number': '\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868',
+ 'Line height': '\u884c\u9ad8',
+ 'Dropped file type is not supported':
+ '\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e',
+ 'Loading...': '\u52a0\u8f7d\u4e2d...',
+ 'ImageProxy HTTP error: Rejected request':
+ '\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd',
+ 'ImageProxy HTTP error: Could not find Image Proxy':
+ '\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406',
+ 'ImageProxy HTTP error: Incorrect Image Proxy URL':
+ '\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef',
+ 'ImageProxy HTTP error: Unknown ImageProxy error':
+ '\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef',
+});
diff --git a/src/components/basic/tinymce/plugins.ts b/src/components/basic/tinymce/plugins.ts
new file mode 100644
index 0000000..30dd1e5
--- /dev/null
+++ b/src/components/basic/tinymce/plugins.ts
@@ -0,0 +1,50 @@
+// https://www.tiny.cloud/docs/tinymce/6/vite-es6-npm/
+
+/* Import TinyMCE */
+import 'tinymce/tinymce.min.js';
+
+/* Default icons are required. After that, import custom icons if applicable */
+import 'tinymce/icons/default/icons.min.js';
+
+/* Required TinyMCE components */
+import 'tinymce/themes/silver/theme.min.js';
+import 'tinymce/models/dom/model.min.js';
+
+/* Import a skin (can be a custom skin instead of the default) */
+import 'tinymce/skins/ui/oxide/skin.js';
+
+/* Import plugins */
+import 'tinymce/plugins/accordion'; //手风琴
+import 'tinymce/plugins/advlist'; //高级列表
+import 'tinymce/plugins/anchor'; //锚
+import 'tinymce/plugins/autolink'; //自动链接
+// import 'tinymce/plugins/autoresize'; //编辑器高度自适应,注:plugins里引入此插件时,Init里设置的height将失效
+import 'tinymce/plugins/autosave'; //自动存稿
+import 'tinymce/plugins/charmap'; //特殊字符
+import 'tinymce/plugins/code'; //编辑源码
+import 'tinymce/plugins/emoticons';
+import 'tinymce/plugins/emoticons/js/emojis';
+import 'tinymce/plugins/codesample'; //代码示例
+import 'tinymce/plugins/directionality'; //文字方向
+import 'tinymce/plugins/fullscreen'; //全屏
+import 'tinymce/plugins/help'; //帮助
+import 'tinymce/plugins/image'; //插入编辑图片
+import 'tinymce/plugins/importcss'; //引入css
+import 'tinymce/plugins/insertdatetime'; //插入日期时间
+
+import 'tinymce/plugins/link'; //超链接
+import 'tinymce/plugins/lists'; //列表插件
+import 'tinymce/plugins/media'; //媒体
+import 'tinymce/plugins/nonbreaking'; //插入不间断空格
+import 'tinymce/plugins/pagebreak'; //插入分页符
+import 'tinymce/plugins/preview'; //预览
+import 'tinymce/plugins/quickbars';
+import 'tinymce/plugins/save'; //保存
+import 'tinymce/plugins/searchreplace'; //查找替换
+import 'tinymce/plugins/table'; //表格
+import 'tinymce/plugins/visualblocks'; //显示元素范围
+import 'tinymce/plugins/visualchars'; //显示不可见字符
+import 'tinymce/plugins/wordcount'; //字数统计
+
+import 'tinymce/plugins/help/js/i18n/keynav/zh_CN.js';
+import 'tinymce/plugins/help/js/i18n/keynav/en.js';
diff --git a/src/components/basic/tinymce/props.ts b/src/components/basic/tinymce/props.ts
new file mode 100644
index 0000000..29aa78a
--- /dev/null
+++ b/src/components/basic/tinymce/props.ts
@@ -0,0 +1,49 @@
+import {
+ editorProps,
+ type IPropTypes,
+} from '@tinymce/tinymce-vue/lib/es2015/main/ts/components/EditorPropTypes';
+import { plugins as defaultPlugins, toolbar as defaultToolbar } from './constants';
+import type { Editor, Events } from 'tinymce';
+
+export interface TinymceProps extends Partial {
+ height?: string | number;
+ width?: string | number;
+ showImageUpload?: boolean;
+}
+
+export const tinymceProps = {
+ ...editorProps,
+ init: Object as PropType,
+ toolbar: {
+ type: Array as PropType,
+ default: defaultToolbar,
+ },
+ plugins: {
+ type: Array as PropType,
+ default: defaultPlugins,
+ },
+ height: {
+ type: [Number, String] as PropType,
+ required: false,
+ default: 400,
+ },
+ width: {
+ type: [Number, String] as PropType,
+ required: false,
+ default: 'auto',
+ },
+};
+
+// https://www.tiny.cloud/docs/integrations/vue/#eventbinding
+type __TinymceEvents = {
+ [K in keyof Events.EditorEventMap as Uncapitalize]: [
+ event: Events.EditorEventMap[K],
+ editor: Editor,
+ ];
+};
+
+/**
+ * 这里为什么这样写?因为 vue 编译器不支持复杂类型,需要用 @vue-ignore 注释显示跳过编译,否则会报错,但是这样 vue 就不会帮我们生成 emits 定义了
+ * 详见:https://github.com/vuejs/core/issues/8286
+ */
+export interface TinymceEvents extends /** @vue-ignore */ __TinymceEvents {}
diff --git a/src/components/basic/title-i18n/index.ts b/src/components/basic/title-i18n/index.ts
new file mode 100644
index 0000000..3382ba1
--- /dev/null
+++ b/src/components/basic/title-i18n/index.ts
@@ -0,0 +1 @@
+export { default as TitleI18n } from './index.vue';
diff --git a/src/components/basic/title-i18n/index.vue b/src/components/basic/title-i18n/index.vue
new file mode 100644
index 0000000..8fe1358
--- /dev/null
+++ b/src/components/basic/title-i18n/index.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/src/components/business/README.md b/src/components/business/README.md
new file mode 100644
index 0000000..403b3c2
--- /dev/null
+++ b/src/components/business/README.md
@@ -0,0 +1,3 @@
+### 业务组件(目录说明)
+
+#### 与业务强耦合的组件可以放这里
diff --git a/src/components/core/README.md b/src/components/core/README.md
new file mode 100644
index 0000000..e7ad511
--- /dev/null
+++ b/src/components/core/README.md
@@ -0,0 +1,7 @@
+### 核心组件(目录说明)
+
+| 组件名称 | 描述 | 是否全局组件 | 使用建议 |
+| --- | --- | --- | --- |
+| draggable-modal | `可拖拽弹窗`基于 a-modal 二次封装的可拖拽模态框,基本使用方式与 antdv 的 a-modal 保持一致 | 否 | 有弹窗拖拽需求的可以使用此组件 |
+| dynamic-table | `动态表格`基于 a-table 二次封装的表格,基本使用方式与 antdv 的 a-table 保持一致 | 否 | 根据自己需求调整,建议全局使用统一的表格封装组件 |
+| schema-form | `动态表单`基于 a-form 二次封装。通过 JSON schema 的方式配置使用 | 否 | 定制性不高的表单都可以考虑使用 |
diff --git a/src/components/core/draggable-modal/index.ts b/src/components/core/draggable-modal/index.ts
new file mode 100644
index 0000000..96898a9
--- /dev/null
+++ b/src/components/core/draggable-modal/index.ts
@@ -0,0 +1 @@
+export { default as DraggableModal } from './index.vue';
diff --git a/src/components/core/draggable-modal/index.vue b/src/components/core/draggable-modal/index.vue
new file mode 100644
index 0000000..5e0b7ba
--- /dev/null
+++ b/src/components/core/draggable-modal/index.vue
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+ {{ $attrs.title || '标题' }}
+
+
+
+
+
+
+
+
+
+
+
+ ① 窗口可以拖动;
+ ② 窗口可以通过八个方向改变大小;
+ ③ 窗口可以最小化、最大化、还原、关闭;
+ ④ 限制窗口最小宽度/高度。
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/index.ts b/src/components/core/dynamic-table/index.ts
new file mode 100644
index 0000000..602c621
--- /dev/null
+++ b/src/components/core/dynamic-table/index.ts
@@ -0,0 +1,12 @@
+import DynamicTable from './src/dynamic-table.vue';
+import type { Ref } from 'vue';
+import type { DynamicTableInstance } from './src/dynamic-table';
+export { DynamicTable };
+
+export * from './src/types/';
+export * from './src/hooks/';
+export * from './src/dynamic-table';
+
+export type DynamicTableRef = Ref;
+
+export default DynamicTable;
diff --git a/src/components/core/dynamic-table/src/components/editable-cell/index.vue b/src/components/core/dynamic-table/src/components/editable-cell/index.vue
new file mode 100644
index 0000000..6848512
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/editable-cell/index.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+ {{ err }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/index.ts b/src/components/core/dynamic-table/src/components/index.ts
new file mode 100644
index 0000000..850a591
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/index.ts
@@ -0,0 +1,3 @@
+export { default as TableAction } from './table-action.vue';
+export { default as ToolBar } from './tool-bar/index.vue';
+export { default as EditableCell } from './editable-cell/index.vue';
diff --git a/src/components/core/dynamic-table/src/components/table-action.vue b/src/components/core/dynamic-table/src/components/table-action.vue
new file mode 100644
index 0000000..5790e61
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-action.vue
@@ -0,0 +1,130 @@
+
+
+
+
+ {{ actionItem.label }}
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/table-settings/column-setting.vue b/src/components/core/dynamic-table/src/components/table-settings/column-setting.vue
new file mode 100644
index 0000000..1f19499
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-settings/column-setting.vue
@@ -0,0 +1,194 @@
+
+
+
+ {{ t('component.table.settingColumn') }}
+
+
+
+
+
+ {{ t('component.table.settingColumnShow') }}
+
+
+ {{ t('component.table.settingIndexColumnShow') }}
+
+
+ {{ t('component.table.settingBordered') }}
+
+
+ {{ t('common.resetText') }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+ {{ t('component.table.settingFixedLeft') }}
+
+
+
+
+ {{ t('component.table.settingFixedRight') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/table-settings/index.vue b/src/components/core/dynamic-table/src/components/table-settings/index.vue
new file mode 100644
index 0000000..fc69235
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-settings/index.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/table-settings/refresh-setting.vue b/src/components/core/dynamic-table/src/components/table-settings/refresh-setting.vue
new file mode 100644
index 0000000..8e7fc9f
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-settings/refresh-setting.vue
@@ -0,0 +1,21 @@
+
+
+
+ {{ t('common.redo') }}
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/table-settings/search-setting.vue b/src/components/core/dynamic-table/src/components/table-settings/search-setting.vue
new file mode 100644
index 0000000..ec85e7c
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-settings/search-setting.vue
@@ -0,0 +1,23 @@
+
+
+
+
+ {{ getProps.search ? '隐藏搜索' : '显示搜索' }}
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/table-settings/size-setting.vue b/src/components/core/dynamic-table/src/components/table-settings/size-setting.vue
new file mode 100644
index 0000000..0770995
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/table-settings/size-setting.vue
@@ -0,0 +1,47 @@
+
+
+
+ {{ t('component.table.settingDens') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/components/tool-bar/index.vue b/src/components/core/dynamic-table/src/components/tool-bar/index.vue
new file mode 100644
index 0000000..6924a8a
--- /dev/null
+++ b/src/components/core/dynamic-table/src/components/tool-bar/index.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/dynamic-table.config.ts b/src/components/core/dynamic-table/src/dynamic-table.config.ts
new file mode 100644
index 0000000..1c2512b
--- /dev/null
+++ b/src/components/core/dynamic-table/src/dynamic-table.config.ts
@@ -0,0 +1,40 @@
+import type { SorterResult } from 'ant-design-vue/es/table/interface';
+import type { AlignType } from 'ant-design-vue/es/vc-table/interface';
+
+/** 表格配置 */
+export default {
+ fetchConfig: {
+ // The field name of the current page passed to the background
+ pageField: 'page',
+ // The number field name of each page displayed in the background
+ sizeField: 'pageSize',
+ // Field name of the form data returned by the interface
+ listField: 'items',
+ // Total number of tables returned by the interface field name
+ totalField: 'meta.totalItems',
+ },
+ // Number of pages that can be selected
+ pageSizeOptions: ['10', '50', '80', '100'],
+ // Default display quantity on one page
+ defaultPageSize: 10,
+ // Default layout of table cells
+ defaultAlign: 'center' as AlignType,
+ // Custom general sort function
+ defaultSortFn: (sortInfo: SorterResult) => {
+ const { field, order } = sortInfo;
+ if (field && order) {
+ return {
+ // The sort field passed to the backend you
+ field,
+ // Sorting method passed to the background asc/desc
+ order,
+ };
+ } else {
+ return {};
+ }
+ },
+ // Custom general filter function
+ defaultFilterFn: (data: Partial>) => {
+ return data;
+ },
+} as const;
diff --git a/src/components/core/dynamic-table/src/dynamic-table.ts b/src/components/core/dynamic-table/src/dynamic-table.ts
new file mode 100644
index 0000000..66a46d7
--- /dev/null
+++ b/src/components/core/dynamic-table/src/dynamic-table.ts
@@ -0,0 +1,140 @@
+import { tableProps } from 'ant-design-vue/es/table';
+import tableConfig from './dynamic-table.config';
+import type DynamicTable from './dynamic-table.vue';
+import type { PropType, ExtractPublicPropTypes } from 'vue';
+import type { BookType } from 'xlsx';
+import type { TableColumn, OnChangeCallbackParams, EditableType, OnSave, OnCancel } from './types/';
+import type { SchemaFormProps } from '@/components/core/schema-form';
+import type { GetRowKey } from 'ant-design-vue/es/table/interface';
+import { isBoolean } from '@/utils/is';
+
+export const dynamicTableProps = {
+ ...tableProps(),
+ rowKey: {
+ type: [String, Function] as PropType>,
+ default: 'id',
+ },
+ /** 是否显示搜索表单 */
+ search: {
+ type: Boolean as PropType,
+ default: true,
+ },
+ /** 表单属性配置 */
+ formProps: {
+ type: Object as PropType,
+ default: () => ({}),
+ },
+ /** 表格列配置 */
+ columns: {
+ type: Array as PropType[]>,
+ required: true,
+ default: () => [],
+ },
+ sortFn: {
+ type: Function as PropType<(sortInfo: OnChangeCallbackParams[2]) => any>,
+ default: tableConfig.defaultSortFn,
+ },
+ filterFn: {
+ type: Function as PropType<(data: OnChangeCallbackParams[1]) => any>,
+ default: tableConfig.defaultFilterFn,
+ },
+ /** 接口请求配置 */
+ fetchConfig: {
+ type: Object as PropType>,
+ default: () => tableConfig.fetchConfig,
+ },
+ /** 表格数据请求函数 */
+ dataRequest: {
+ // 获取列表数据函数API
+ type: Function as PropType<(params: Recordable) => Promise>,
+ },
+ // 额外的请求参数
+ searchParams: {
+ type: Object as PropType,
+ },
+ /** 是否显示索引号 */
+ showIndex: {
+ type: Boolean as PropType,
+ default: false,
+ },
+ /** 索引列属性配置 */
+ indexColumnProps: {
+ type: Object as PropType>,
+ default: () => ({}),
+ },
+ /** 是否显示表格工具栏 */
+ showToolBar: {
+ type: Boolean as PropType,
+ default: true,
+ },
+ /** 是否显示表格设置 */
+ showTableSetting: {
+ type: Boolean as PropType,
+ default: true,
+ },
+ /** 表格标题 */
+ headerTitle: String as PropType,
+ /** 表格标题提示信息 */
+ titleTooltip: String as PropType,
+ /** 表格自适应高度 */
+ autoHeight: Boolean as PropType,
+ // excel导出配置
+ /** 导出的文件名 */
+ exportFileName: {
+ type: String as PropType,
+ },
+ /** xlsx的booktype */
+ exportBookType: {
+ type: String as PropType,
+ default: 'xlsx',
+ },
+ /** 自动宽度 */
+ exportAutoWidth: {
+ type: Boolean as PropType,
+ default: true,
+ },
+ /** 自定义数据导出格式函数 */
+ exportFormatter: {
+ type: Function as PropType<
+ (columns: TableColumn[], tableData: any[]) => { header: string[]; data: any[] }
+ >,
+ default: null,
+ },
+ /** 编辑行类型
+ * @const `single`: 只能同时编辑一行
+ * @const `multiple`: 同时编辑多行
+ * @const `cell`: 可编辑单元格
+ * @defaultValue `single`
+ */
+ editableType: {
+ type: String as PropType,
+ default: 'single',
+ },
+ /** 单元格保存编辑回调 */
+ onSave: {
+ type: Function as PropType,
+ },
+ /** 单元格取消编辑回调 */
+ onCancel: {
+ type: Function as PropType,
+ },
+ /** 只能编辑一行的的提示 */
+ onlyOneLineEditorAlertMessage: String,
+} as const;
+
+export type DynamicTableProps = ExtractPublicPropTypes &
+ EmitsToProps;
+
+export const dynamicTableEmits = {
+ change: (...rest: OnChangeCallbackParams) => rest.length === 4,
+ 'toggle-advanced': (isAdvanced: boolean) => isBoolean(isAdvanced),
+ 'fetch-error': (error) => error,
+ 'update:expandedRowKeys': (keys: Key[]) => keys,
+ 'expanded-rows-change': (keyValues: string[]) => Array.isArray(keyValues),
+};
+
+export type DynamicTableEmits = typeof dynamicTableEmits;
+
+export type DynamicTableEmitFn = EmitFn;
+
+export type DynamicTableInstance = InstanceType;
diff --git a/src/components/core/dynamic-table/src/dynamic-table.vue b/src/components/core/dynamic-table/src/dynamic-table.vue
new file mode 100644
index 0000000..998c501
--- /dev/null
+++ b/src/components/core/dynamic-table/src/dynamic-table.vue
@@ -0,0 +1,176 @@
+
+
+
$emit('toggle-advanced', e)"
+ @submit="handleSubmit"
+ >
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/dynamic-table/src/hooks/index.ts b/src/components/core/dynamic-table/src/hooks/index.ts
new file mode 100644
index 0000000..9b52c28
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/index.ts
@@ -0,0 +1,21 @@
+import type { TableState } from './useTableState';
+import type { TableForm } from './useTableForm';
+import type { TableMethods } from './useTableMethods';
+import type { ExportData2Excel } from './useExportData2Excel';
+import type { DynamicTableProps, DynamicTableEmitFn } from '../dynamic-table';
+
+export * from './useTable';
+export * from './useTableContext';
+export * from './useExportData2Excel';
+export * from './useTableForm';
+export * from './useTableState';
+export * from './useTableMethods';
+export * from './useColumns';
+export * from './useEditable';
+export * from './useScroll';
+
+export type DynamicTableType = DynamicTableProps &
+ TableState &
+ TableMethods &
+ TableForm &
+ ExportData2Excel & { emit: DynamicTableEmitFn };
diff --git a/src/components/core/dynamic-table/src/hooks/useColumns.ts b/src/components/core/dynamic-table/src/hooks/useColumns.ts
new file mode 100644
index 0000000..9b4cf42
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useColumns.ts
@@ -0,0 +1,157 @@
+import { ref, watchEffect, unref, useSlots, h } from 'vue';
+import { cloneDeep, isFunction, mergeWith } from 'lodash-es';
+import { Input } from 'ant-design-vue';
+import { EditableCell } from '../components';
+import { ColumnKeyFlag, columnKeyFlags, type CustomRenderParams } from '../types/column';
+import tableConfig from '../dynamic-table.config';
+import type { Slots } from 'vue';
+import type {
+ TableActionType,
+ TableColumn,
+ TableMethods,
+ TableState,
+ DynamicTableProps,
+} from '@/components/core/dynamic-table';
+import type { FormSchema } from '@/components/core/schema-form';
+import { isBoolean } from '@/utils/is';
+import { TableAction } from '@/components/core/dynamic-table/src/components';
+
+export type UseTableColumnsContext = {
+ state: TableState;
+ props: DynamicTableProps;
+ methods: TableMethods;
+ tableAction: TableActionType;
+ slots: Slots;
+};
+
+export const useColumns = ({ state, methods, props, tableAction }: UseTableColumnsContext) => {
+ const slots = useSlots();
+ const innerColumns = ref(props.columns);
+ const { getColumnKey } = methods;
+ const { getProps } = state;
+ const { isEditable } = tableAction;
+
+ watchEffect(() => {
+ const innerProps = { ...unref(getProps) };
+
+ const columns = cloneDeep(innerProps!.columns!.filter((n) => !n.hideInTable));
+
+ // 是否添加序号列
+ if (innerProps?.showIndex) {
+ columns.unshift({
+ dataIndex: ColumnKeyFlag.INDEX,
+ title: '序号',
+ width: 60,
+ align: 'center',
+ fixed: 'left',
+ ...innerProps?.indexColumnProps,
+ customRender: ({ index }) => {
+ const getPagination = unref(state.paginationRef);
+ if (isBoolean(getPagination)) {
+ return index + 1;
+ }
+ const { current = 1, pageSize = 10 } = getPagination!;
+ return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1;
+ },
+ } as TableColumn);
+ }
+
+ // @ts-ignore
+ innerColumns.value = columns.map((item) => {
+ const customRender = item.customRender;
+
+ const rowKey = props.rowKey as string;
+ const columnKey = getColumnKey(item) as string;
+
+ item.align ||= tableConfig.defaultAlign;
+
+ item.customRender = (options) => {
+ const { record, index, text } = options as CustomRenderParams>;
+ /** 当前行是否开启了编辑行模式 */
+ const isEditableRow = isEditable(record[rowKey]);
+ /** 是否开启了单元格编辑模式 */
+ const isEditableCell = innerProps.editableType === 'cell';
+ /** 当前单元格是否允许被编辑 */
+ const isCellEditable = isBoolean(item.editable)
+ ? item.editable
+ : item.editable?.(options) ?? true;
+ /** 是否允许被编辑 */
+ const isShowEditable =
+ (isEditableRow || isEditableCell) &&
+ isCellEditable &&
+ !columnKeyFlags.includes(columnKey);
+
+ return isShowEditable
+ ? h(
+ EditableCell,
+ {
+ schema: getColumnFormSchema(item, record) as any,
+ rowKey: record[rowKey] ?? index,
+ editableType: innerProps.editableType,
+ column: options,
+ },
+ { default: () => customRender?.(options) ?? text, ...slots },
+ )
+ : customRender?.(options);
+ };
+
+ // 操作列
+ if (item.actions && columnKey === ColumnKeyFlag.ACTION) {
+ item.customRender = (options) => {
+ const { record, index } = options;
+ return h(TableAction, {
+ actions: item.actions!(options, tableAction),
+ rowKey: record[rowKey] ?? index,
+ columnParams: options,
+ });
+ };
+ }
+ return {
+ key: item.key ?? (item.dataIndex as Key),
+ dataIndex: item.dataIndex ?? (item.key as Key),
+ ...item,
+ } as TableColumn;
+ });
+ });
+
+ function mergeCustomizer(objValue, srcValue, key) {
+ /** 这里着重处理 `componentProps` 为函数时的合并处理 */
+ if (key === 'componentProps') {
+ return (...rest) => {
+ return {
+ ...(isFunction(objValue) ? objValue(...rest) : objValue),
+ ...(isFunction(srcValue) ? srcValue(...rest) : srcValue),
+ };
+ };
+ }
+ }
+
+ /** 获取当前行的form schema */
+ const getColumnFormSchema = (item: TableColumn, record: Recordable): FormSchema => {
+ const key = getColumnKey(item) as string;
+ /** 是否继承搜索表单的属性 */
+ const isExtendSearchFormProps = !Object.is(
+ item.editFormItemProps?.extendSearchFormProps,
+ false,
+ );
+
+ return {
+ field: `${record[props.rowKey as string]}.${item.searchField ?? key}`,
+ component: () => Input,
+ defaultValue: record[key],
+ colProps: {
+ span: unref(getProps).editableType === 'cell' ? 20 : 24,
+ },
+ formItemProps: {
+ help: '',
+ },
+ ...(isExtendSearchFormProps
+ ? mergeWith(cloneDeep(item.formItemProps), item.editFormItemProps, mergeCustomizer)
+ : item.editFormItemProps),
+ };
+ };
+
+ return {
+ innerColumns,
+ };
+};
diff --git a/src/components/core/dynamic-table/src/hooks/useEditable.ts b/src/components/core/dynamic-table/src/hooks/useEditable.ts
new file mode 100644
index 0000000..6779ec4
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useEditable.ts
@@ -0,0 +1,172 @@
+import { nextTick, watch } from 'vue';
+import { cloneDeep } from 'lodash-es';
+import { message } from 'ant-design-vue';
+import type { DynamicTableProps } from '../dynamic-table';
+import type { TableState } from './useTableState';
+import type { TableColumn } from '@/components/core/dynamic-table/src/types/column';
+
+type UseTableMethodsContext = {
+ state: TableState;
+ props: DynamicTableProps;
+};
+
+export type UseEditableType = ReturnType;
+
+export const useEditable = ({ state, props }: UseTableMethodsContext) => {
+ const {
+ tableData,
+ editFormModel,
+ editTableFormRef,
+ editFormErrorMsgs,
+ editableCellKeys,
+ editableRowKeys,
+ } = state;
+
+ watch(
+ () => props.editableType,
+ (type) => {
+ if (type === 'cell') {
+ editableRowKeys.value.clear();
+ } else {
+ editableCellKeys.value.clear();
+ }
+ },
+ );
+
+ /** 设置表单值 */
+ const setEditFormModel = (recordKey: Key, editValue: Recordable) => {
+ Reflect.set(editFormModel.value, recordKey, editValue);
+ nextTick(() => {
+ editTableFormRef.value?.setFormModel(recordKey, editValue);
+ });
+ };
+
+ /** 获取要编辑的值 */
+ const getEditValue = (
+ recordKey: Key,
+ currentRow?: Recordable,
+ columns?: TableColumn>[],
+ ) => {
+ // 克隆当前行数据作为临时编辑的表单数据,避免直接修改原数据
+ const editValue = cloneDeep(
+ currentRow ?? tableData.value.find((n) => n[String(props.rowKey)] === recordKey),
+ );
+ // 用户设置的默认值优先
+ columns?.forEach((item) => {
+ const { formItemProps, editFormItemProps } = item;
+ const field = (item.dataIndex || item.key) as string;
+ if (
+ !Object.is(editFormItemProps?.extendSearchFormProps, false) &&
+ formItemProps &&
+ Reflect.has(formItemProps, 'defaultValue')
+ ) {
+ editValue[field] = formItemProps.defaultValue;
+ }
+ if (editFormItemProps && Reflect.has(editFormItemProps, 'defaultValue')) {
+ editValue[field] = editFormItemProps.defaultValue;
+ }
+ });
+ return editValue;
+ };
+
+ /**
+ * @description 进入编辑行状态
+ *
+ * @param recordKey 当前行id,即table的rowKey
+ * @param currentRow 当前行数据
+ */
+ const startEditable = (recordKey: Key, currentRow?: Recordable) => {
+ editableCellKeys.value.clear();
+ console.log('startEditable editFormModel', editFormModel);
+ // 如果是单行的话,不允许多行编辑
+ if (editableRowKeys.value.size > 0 && props.editableType === 'single') {
+ message.warn(props.onlyOneLineEditorAlertMessage || '只能同时编辑一行');
+ return false;
+ }
+ const editValue = getEditValue(recordKey, currentRow, props.columns);
+ setEditFormModel(recordKey, editValue);
+ editableRowKeys.value.add(recordKey);
+ return true;
+ };
+
+ /** 进入编辑单元格状态 */
+ const startCellEditable = (recordKey: Key, dataIndex: Key, currentRow?: Recordable) => {
+ editableRowKeys.value.clear();
+ const targetColumn = props.columns.filter((n) => n.dataIndex === dataIndex);
+ const editValue = getEditValue(recordKey, currentRow, targetColumn);
+
+ editableCellKeys.value.add(`${recordKey}.${dataIndex}`);
+ setEditFormModel(recordKey, {
+ ...(getEditFormModel(recordKey) || editValue),
+ [dataIndex]: editValue[dataIndex],
+ });
+ };
+
+ /** 取消编辑单元格 */
+ const cancelCellEditable = (recordKey: Key, dataIndex: Key) => {
+ editableCellKeys.value.delete(`${recordKey}.${dataIndex}`);
+ const editFormModel = getEditFormModel(recordKey);
+ const record = tableData.value.find((n) => n[String(props.rowKey)] === recordKey);
+ if (record) {
+ // 取消编辑,还原默认值
+ Reflect.set(editFormModel, dataIndex, record[dataIndex]);
+ }
+ /** 表单项的校验错误信息也清掉 */
+ editFormErrorMsgs.value.delete(`${recordKey}.${dataIndex}`);
+ };
+
+ /**
+ * 退出编辑行状态
+ *
+ * @param recordKey
+ */
+ const cancelEditable = (recordKey: Key) => {
+ const formModel = getEditFormModel(recordKey);
+ /** 表单项的校验错误信息也清掉 */
+ Object.keys(formModel).forEach((field) =>
+ editFormErrorMsgs.value.delete(`${recordKey}.${field}`),
+ );
+
+ nextTick(() => {
+ editTableFormRef.value?.delFormModel?.(recordKey);
+ });
+
+ editableRowKeys.value.delete(recordKey);
+ return Reflect.deleteProperty(editFormModel.value, recordKey);
+ };
+
+ /** 这行是不是编辑状态 */
+ const isEditable = (recordKey: Key) => editableRowKeys.value.has(recordKey);
+
+ /** 获取表单编辑后的值 */
+ const getEditFormModel = (recordKey: Key) => Reflect.get(editFormModel.value, recordKey);
+
+ /** 行编辑表单是否校验通过 */
+ const validateRow = async (recordKey: Key) => {
+ const nameList = Object.keys(getEditFormModel(recordKey)).map((n) => [String(recordKey), n]);
+ const result = await editTableFormRef.value?.validateFields(nameList);
+ return result?.[recordKey] ?? result;
+ };
+
+ /**
+ * 单元格表单是否校验通过
+ * @param recordKey 当前行ID
+ * @param dataIndex 当前单元格字段名, eg: `column.dataIndex`
+ * */
+ const validateCell = async (recordKey: Key, dataIndex: Key) => {
+ const result = await editTableFormRef.value?.validateFields([[String(recordKey), dataIndex]]);
+ return result?.[recordKey] ?? result;
+ };
+
+ return {
+ setEditFormModel,
+ startEditable,
+ startCellEditable,
+ cancelCellEditable,
+ cancelEditable,
+ isEditable,
+ validateRow,
+ validateCell,
+ getEditFormModel,
+ };
+};
diff --git a/src/components/core/dynamic-table/src/hooks/useExportData2Excel.ts b/src/components/core/dynamic-table/src/hooks/useExportData2Excel.ts
new file mode 100644
index 0000000..28bc3ab
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useExportData2Excel.ts
@@ -0,0 +1,53 @@
+import { get, isEmpty } from 'lodash-es';
+import { columnKeyFlags } from '../types';
+import type { DynamicTableProps } from '../dynamic-table';
+import type { TableMethods, TableState } from './index';
+import { exportJson2Excel } from '@/utils/Export2Excel';
+
+export type UseExportData2ExcelContext = {
+ state: TableState;
+ methods: TableMethods;
+ props: DynamicTableProps;
+};
+
+export type ExportData2Excel = ReturnType;
+
+/**
+ * 导出表格Excel
+ */
+export const useExportData2Excel = ({ props, state, methods }: UseExportData2ExcelContext) => {
+ const exportData2Excel = () => {
+ const { columns, exportFormatter, exportFileName, exportBookType, exportAutoWidth } = props;
+ const { getColumnKey } = methods;
+ const { tableData } = state;
+
+ const theaders = columns.filter((n) => {
+ const key = getColumnKey(n);
+ return key && !columnKeyFlags.includes(key);
+ });
+
+ if (exportFormatter) {
+ const { header, data } = exportFormatter(theaders, tableData.value);
+ if (isEmpty(header) || isEmpty(data)) {
+ return;
+ } else {
+ exportJson2Excel({
+ header,
+ data,
+ filename: exportFileName,
+ bookType: exportBookType,
+ autoWidth: exportAutoWidth,
+ });
+ }
+ } else {
+ exportJson2Excel({
+ header: theaders.map((n) => n.title as string),
+ data: tableData.value.map((v) => theaders.map((header) => get(v, getColumnKey(header)!))),
+ filename: exportFileName,
+ bookType: exportBookType,
+ autoWidth: exportAutoWidth,
+ });
+ }
+ };
+ return { exportData2Excel };
+};
diff --git a/src/components/core/dynamic-table/src/hooks/useScroll.ts b/src/components/core/dynamic-table/src/hooks/useScroll.ts
new file mode 100644
index 0000000..576c876
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useScroll.ts
@@ -0,0 +1,56 @@
+import { computed, getCurrentInstance, ref, onBeforeUnmount } from 'vue';
+import { debounce } from 'lodash-es';
+import type { DynamicTableProps } from '../dynamic-table';
+
+type UseScrollParams = {
+ props: DynamicTableProps;
+};
+
+export type UseScrollType = ReturnType;
+
+// 获取元素到顶部距离-通用方法
+export const getPositionTop = (node: HTMLElement) => {
+ let top = node.offsetTop;
+ let parent = node.offsetParent as HTMLElement;
+ while (parent != null) {
+ top += parent.offsetTop;
+ parent = parent.offsetParent as HTMLElement;
+ }
+ return top; // 所有的父元素top和
+};
+
+export const useScroll = ({ props }: UseScrollParams) => {
+ const currIns = getCurrentInstance();
+ const scrollY = ref();
+
+ const scroll = computed(() => {
+ return {
+ y: scrollY.value,
+ ...props.scroll,
+ };
+ });
+
+ const getScrollY = debounce(() => {
+ if (!props.autoHeight) return;
+ const compRootEl = currIns?.proxy?.$el as HTMLDivElement;
+ const el =
+ compRootEl?.querySelector('.ant-table-body') || compRootEl?.querySelector('.ant-table-tbody');
+ if (el) {
+ const y = document.documentElement.offsetHeight - getPositionTop(el as HTMLDivElement);
+ // 简单粗糙的实现
+ scrollY.value = y - 30;
+ }
+ // console.log('innerScroll.value', el, scrollY.value);
+ });
+
+ setTimeout(getScrollY);
+ window.addEventListener('resize', getScrollY);
+
+ onBeforeUnmount(() => {
+ window.removeEventListener('resize', getScrollY);
+ });
+
+ return {
+ scroll,
+ };
+};
diff --git a/src/components/core/dynamic-table/src/hooks/useTable.tsx b/src/components/core/dynamic-table/src/hooks/useTable.tsx
new file mode 100644
index 0000000..4e9d40e
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTable.tsx
@@ -0,0 +1,64 @@
+import { nextTick, ref, unref, watch } from 'vue';
+import { isEmpty } from 'lodash-es';
+import DynamicTable from '../../index';
+import type { FunctionalComponent, Ref } from 'vue';
+import type { DynamicTableInstance, DynamicTableProps } from '../dynamic-table';
+
+export function useTable(props?: Partial) {
+ const dynamicTableRef = ref({} as DynamicTableInstance);
+
+ async function getTableInstance() {
+ await nextTick();
+ const table = unref(dynamicTableRef);
+ if (isEmpty(table)) {
+ console.error('未获取表格实例!');
+ }
+ return table;
+ }
+
+ watch(
+ () => props,
+ async () => {
+ if (props) {
+ // console.log('table onMounted', { ...props });
+ await nextTick();
+ const tableInstance = await getTableInstance();
+ tableInstance?.setProps?.(props);
+ }
+ },
+ {
+ deep: true,
+ flush: 'post',
+ },
+ );
+
+ const methods = new Proxy[>(dynamicTableRef, {
+ get(target, key) {
+ if (Reflect.has(target, key)) {
+ return unref(target);
+ }
+ if (target.value && Reflect.has(target.value, key)) {
+ return Reflect.get(target.value, key);
+ }
+ return async (...rest) => {
+ const table = await getTableInstance();
+ return table?.[key]?.(...rest);
+ };
+ },
+ });
+
+ const DynamicTableRender: FunctionalComponent = (
+ compProps,
+ { attrs, slots },
+ ) => {
+ return (
+
+ );
+ };
+
+ return [DynamicTableRender, unref(methods)] as const;
+}
diff --git a/src/components/core/dynamic-table/src/hooks/useTableContext.ts b/src/components/core/dynamic-table/src/hooks/useTableContext.ts
new file mode 100644
index 0000000..6cf03d6
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTableContext.ts
@@ -0,0 +1,12 @@
+import { provide, inject } from 'vue';
+import type { DynamicTableType } from './index';
+
+const key = Symbol('dynamic-table');
+
+export function createTableContext(instance: DynamicTableType) {
+ provide(key, instance);
+}
+
+export function useTableContext() {
+ return inject(key) as DynamicTableType;
+}
diff --git a/src/components/core/dynamic-table/src/hooks/useTableExpand.ts b/src/components/core/dynamic-table/src/hooks/useTableExpand.ts
new file mode 100644
index 0000000..8e9ac1f
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTableExpand.ts
@@ -0,0 +1,71 @@
+import { computed, unref, toRaw, ref } from 'vue';
+import type {
+ TableState,
+ DynamicTableProps,
+ DynamicTableEmitFn,
+} from '@/components/core/dynamic-table';
+
+type UseTableExpandContext = {
+ state: TableState;
+ props: DynamicTableProps;
+ emit: DynamicTableEmitFn;
+};
+
+export function useTableExpand({ state, props, emit }: UseTableExpandContext) {
+ const { tableData } = state;
+ // 表格为树形结构时 展开的行
+ const expandedRowKeys = ref([]);
+
+ const isTreeTable = computed(() => {
+ const { childrenColumnName = 'children' } = props;
+ /**
+ * https://github.com/ant-design/ant-design/issues/42722
+ * 目前官方树表格符合条件则会自动开启,且没有直接提供相应的关闭树状表格的 API,官方建议关闭树狀表格的方式
+ * 是自己处理数据,将数据中的 children 字段设置为 null 则会关闭树状表格。
+ */
+ return tableData.value.some((item) => {
+ return Array.isArray(item[childrenColumnName]) && item[childrenColumnName].length;
+ });
+ });
+
+ const getExpandOption = computed(() => {
+ if (!isTreeTable.value) return {};
+
+ return {
+ expandedRowKeys: unref(expandedRowKeys),
+ onExpandedRowsChange: (keys: string[]) => {
+ expandedRowKeys.value = keys;
+ emit('expanded-rows-change', keys);
+ },
+ };
+ });
+
+ function expandAll() {
+ const keys = getAllKeys();
+ expandedRowKeys.value = keys;
+ }
+
+ function expandRows(keys: (string | number)[]) {
+ if (!isTreeTable.value) return;
+ expandedRowKeys.value = [...expandedRowKeys.value, ...keys];
+ }
+
+ function getAllKeys(data?: Recordable[]) {
+ const keys: string[] = [];
+ const { childrenColumnName, rowKey } = props;
+ toRaw(data || unref(tableData)).forEach((item) => {
+ keys.push(item[rowKey as string]);
+ const children = item[childrenColumnName || 'children'];
+ if (children?.length) {
+ keys.push(...getAllKeys(children));
+ }
+ });
+ return keys;
+ }
+
+ function collapseAll() {
+ expandedRowKeys.value = [];
+ }
+
+ return { getExpandOption, expandAll, expandRows, collapseAll };
+}
diff --git a/src/components/core/dynamic-table/src/hooks/useTableForm.ts b/src/components/core/dynamic-table/src/hooks/useTableForm.ts
new file mode 100644
index 0000000..a962920
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTableForm.ts
@@ -0,0 +1,77 @@
+import { unref, computed, watchEffect } from 'vue';
+import { ColumnKeyFlag } from '../types/column';
+import type { TableMethods } from './useTableMethods';
+import type { TableState } from './useTableState';
+import type { ComputedRef, Slots } from 'vue';
+import type { FormSchema, SchemaFormProps } from '@/components/core/schema-form';
+
+export type TableForm = ReturnType;
+
+export type UseTableFormContext = {
+ tableState: TableState;
+ tableMethods: TableMethods;
+ slots: Slots;
+};
+
+export function useTableForm({ tableState, slots, tableMethods }: UseTableFormContext) {
+ const { getProps, loadingRef } = tableState;
+ const { getColumnKey, getQueryFormRef } = tableMethods;
+
+ const getFormProps = computed((): SchemaFormProps => {
+ const { formProps } = unref(getProps);
+ const { submitButtonOptions } = formProps || {};
+ return {
+ showAdvancedButton: true,
+ layout: 'horizontal',
+ labelWidth: 100,
+ ...formProps,
+ schemas: formProps?.schemas ?? unref(formSchemas),
+ submitButtonOptions: { loading: unref(loadingRef), ...submitButtonOptions },
+ compact: true,
+ };
+ });
+
+ const formSchemas = computed(() => {
+ const columnKeyFlags = Object.keys(ColumnKeyFlag);
+ return unref(getProps)
+ .columns.filter((n) => {
+ const field = getColumnKey(n);
+ return !n.hideInSearch && !!field && !columnKeyFlags.includes(field as string);
+ })
+ .map((n) => {
+ return {
+ field: n.searchField ?? (getColumnKey(n) as string),
+ component: 'Input',
+ label: n.title as string,
+ colProps: {
+ span: 8,
+ },
+ ...n.formItemProps,
+ } as FormSchema;
+ })
+ .sort((a, b) => Number(a?.order) - Number(b?.order)) as FormSchema[];
+ });
+
+ // 同步外部对props的修改
+ watchEffect(() => getQueryFormRef()?.setSchemaFormProps(unref(getFormProps)), {
+ flush: 'post',
+ });
+
+ const getFormSlotKeys: ComputedRef = computed(() => {
+ const keys = Object.keys(slots);
+ return keys
+ .map((item) => (item.startsWith('form-') ? item : null))
+ .filter((item): item is string => !!item);
+ });
+
+ function replaceFormSlotKey(key: string) {
+ if (!key) return '';
+ return key?.replace?.(/form-/, '') ?? '';
+ }
+
+ return {
+ getFormProps,
+ replaceFormSlotKey,
+ getFormSlotKeys,
+ };
+}
diff --git a/src/components/core/dynamic-table/src/hooks/useTableMethods.ts b/src/components/core/dynamic-table/src/hooks/useTableMethods.ts
new file mode 100644
index 0000000..4ea8017
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTableMethods.ts
@@ -0,0 +1,234 @@
+import { unref, nextTick, getCurrentInstance, watch } from 'vue';
+import { isObject, isFunction, isBoolean, get, debounce } from 'lodash-es';
+import { useInfiniteScroll } from '@vueuse/core';
+import tableConfig from '../dynamic-table.config';
+import { useEditable } from './useEditable';
+import { useTableExpand } from './useTableExpand';
+import type { DynamicTableProps, DynamicTableEmitFn } from '../dynamic-table';
+import type { OnChangeCallbackParams, TableColumn } from '../types/';
+import type { Pagination, TableState } from './useTableState';
+import type { FormProps } from 'ant-design-vue';
+import { warn } from '@/utils/log';
+
+export type UseInfiniteScrollParams = Parameters;
+
+export type TableMethods = ReturnType;
+
+export type UseTableMethodsContext = {
+ state: TableState;
+ props: DynamicTableProps;
+ emit: DynamicTableEmitFn;
+};
+
+export const useTableMethods = ({ state, props, emit }: UseTableMethodsContext) => {
+ const {
+ innerPropsRef,
+ tableData,
+ loadingRef,
+ queryFormRef,
+ paginationRef,
+ editFormErrorMsgs,
+ searchState,
+ } = state;
+ // 可编辑行
+ const editableMethods = useEditable({ state, props });
+ const expandMethods = useTableExpand({ state, props, emit });
+
+ watch(
+ () => props.searchParams,
+ () => {
+ fetchData();
+ },
+ );
+
+ const setProps = (props: Partial) => {
+ innerPropsRef.value = { ...unref(innerPropsRef), ...props };
+ };
+
+ /**
+ * @description 表格查询
+ */
+ const handleSubmit = (params, page = 1) => {
+ updatePagination({
+ current: page,
+ });
+ fetchData(params);
+ };
+
+ /**
+ * @param {object} params 表格查询参数
+ * @param {boolean} flush 是否将页数重置到第一页
+ * @description 获取表格数据
+ */
+ const fetchData = debounce(async (params = {}) => {
+ const { dataRequest, dataSource, fetchConfig, searchParams } = props;
+
+ if (!dataRequest || !isFunction(dataRequest) || Array.isArray(dataSource)) {
+ return;
+ }
+ try {
+ let pageParams: Recordable = {};
+ const pagination = unref(paginationRef)!;
+
+ const { pageField, sizeField, listField, totalField } = {
+ ...tableConfig.fetchConfig,
+ ...fetchConfig,
+ };
+
+ // 是否启用了分页
+ const enablePagination = isObject(pagination);
+ if (enablePagination) {
+ pageParams = {
+ [pageField]: pagination.current,
+ [sizeField]: pagination.pageSize,
+ };
+ }
+ const { sortInfo = {}, filterInfo } = searchState;
+ // 表格查询参数
+ let queryParams: Recordable = {
+ ...pageParams,
+ ...sortInfo,
+ ...filterInfo,
+ ...searchParams,
+ ...params,
+ };
+ await nextTick();
+ if (queryFormRef.value) {
+ const values = await queryFormRef.value.validate();
+ queryParams = {
+ ...queryFormRef.value.handleFormValues(values),
+ ...queryParams,
+ };
+ }
+
+ loadingRef.value = true;
+ const res = await dataRequest(queryParams);
+
+ const isArrayResult = Array.isArray(res);
+ const resultItems: Recordable[] = isArrayResult ? res : get(res, listField);
+ const resultTotal: number = isArrayResult ? res.length : Number(get(res, totalField));
+
+ if (enablePagination && resultTotal) {
+ const { current = 1, pageSize = tableConfig.defaultPageSize } = pagination;
+ const currentTotalPage = Math.ceil(resultTotal / pageSize);
+ if (current > currentTotalPage) {
+ updatePagination({
+ current: currentTotalPage,
+ });
+ return await fetchData(params);
+ }
+ }
+ tableData.value = resultItems;
+ updatePagination({ total: ~~resultTotal });
+ if (queryParams[pageField]) {
+ updatePagination({ current: queryParams[pageField] || 1 });
+ }
+ return tableData;
+ } catch (error) {
+ warn(`表格查询出错:${error}`);
+ emit('fetch-error', error);
+ tableData.value = [];
+ updatePagination({ total: 0 });
+ } finally {
+ loadingRef.value = false;
+ }
+ });
+
+ /**
+ * @description 刷新表格
+ */
+ const reload = (resetPageIndex = false) => {
+ const pagination = unref(paginationRef);
+ if (Object.is(resetPageIndex, true) && isObject(pagination)) {
+ pagination.current = 1;
+ }
+ return fetchData();
+ };
+
+ /**
+ * @description 分页改变
+ */
+ const handleTableChange = async (...rest: OnChangeCallbackParams) => {
+ const [pagination, filters, sorter] = rest;
+ const { sortFn, filterFn } = props;
+
+ if (queryFormRef.value) {
+ await queryFormRef.value.validate();
+ }
+ updatePagination(pagination);
+
+ const params: Recordable = {};
+ if (sorter && isFunction(sortFn)) {
+ const sortInfo = sortFn(sorter);
+ searchState.sortInfo = sortInfo;
+ params.sortInfo = sortInfo;
+ }
+
+ if (filters && isFunction(filterFn)) {
+ const filterInfo = filterFn(filters);
+ searchState.filterInfo = filterInfo;
+ params.filterInfo = filterInfo;
+ }
+
+ await fetchData({});
+ emit('change', ...rest);
+ };
+
+ // dataIndex 可以为 a.b.c
+ // const getDataIndexVal = (dataIndex, record) => dataIndex.split('.').reduce((pre, curr) => pre[curr], record)
+
+ // 获取表格列key
+ const getColumnKey = (column: TableColumn) => {
+ return (column?.key || column?.dataIndex) as string;
+ };
+
+ /** 编辑表单验证失败回调 */
+ const handleEditFormValidate: FormProps['onValidate'] = (name, status, errorMsgs) => {
+ // console.log('errorInfo', editFormErrorMsgs);
+ const key = Array.isArray(name) ? name.join('.') : name;
+ if (status) {
+ editFormErrorMsgs.value.delete(key);
+ } else {
+ editFormErrorMsgs.value.set(key, errorMsgs);
+ }
+ };
+
+ /** 更新表格分页信息 */
+ const updatePagination = (info: Pagination = paginationRef.value) => {
+ if (isBoolean(info)) {
+ paginationRef.value = info;
+ } else if (isObject(paginationRef.value)) {
+ paginationRef.value = {
+ ...paginationRef.value,
+ ...info,
+ };
+ }
+ };
+ /** 表格无限滚动 */
+ const onInfiniteScroll = (
+ callback: UseInfiniteScrollParams[1],
+ options?: UseInfiniteScrollParams[2],
+ ) => {
+ const el = getCurrentInstance()?.proxy?.$el.querySelector('.ant-table-body');
+ useInfiniteScroll(el, callback, options);
+ };
+
+ /**
+ * @description当外部需要动态改变搜索表单的值或选项时,需要调用此方法获取dynamicFormRef实例
+ */
+ const getQueryFormRef = () => queryFormRef.value;
+
+ return {
+ ...editableMethods,
+ ...expandMethods,
+ setProps,
+ handleSubmit,
+ handleTableChange,
+ getColumnKey,
+ fetchData,
+ getQueryFormRef,
+ reload,
+ onInfiniteScroll,
+ handleEditFormValidate,
+ };
+};
diff --git a/src/components/core/dynamic-table/src/hooks/useTableState.ts b/src/components/core/dynamic-table/src/hooks/useTableState.ts
new file mode 100644
index 0000000..3fc3401
--- /dev/null
+++ b/src/components/core/dynamic-table/src/hooks/useTableState.ts
@@ -0,0 +1,139 @@
+import { computed, reactive, ref, unref, watch } from 'vue';
+import { omit } from 'lodash-es';
+import tableConfig from '../dynamic-table.config';
+import { useScroll } from './useScroll';
+import type { Slots } from 'vue';
+import type { DynamicTableProps } from '../dynamic-table';
+import type { SchemaFormInstance } from '@/components/core/schema-form';
+import type { TableProps, Table } from 'ant-design-vue';
+import { useI18n } from '@/hooks/useI18n';
+
+export type Pagination = TableProps['pagination'];
+export type TableState = ReturnType;
+
+export type UseTableStateParams = {
+ props: DynamicTableProps;
+ slots: Slots;
+};
+
+interface SearchState {
+ sortInfo: Recordable;
+ filterInfo: Record;
+}
+
+export const useTableState = ({ props, slots }: UseTableStateParams) => {
+ const { t } = useI18n();
+ const { scroll } = useScroll({ props });
+ /** 表格实例 */
+ const tableRef = ref>();
+ /** 查询表单实例 */
+ const queryFormRef = ref();
+ /** 编辑表格的表单实例 */
+ const editTableFormRef = ref();
+ /** 表格数据 */
+ const tableData = ref([]);
+ /** 内部属性 */
+ const innerPropsRef = ref>();
+ /** 分页配置参数 */
+ const paginationRef = ref>(false);
+ /** 表格加载 */
+ const loadingRef = ref(!!props.loading);
+ /** 编辑表单model */
+ const editFormModel = ref({});
+ /** 所有验证不通过的表单项 */
+ const editFormErrorMsgs = ref(new Map());
+ /** 当前所有正在被编辑的行key的格式为:`${recordKey}` */
+ const editableRowKeys = ref(new Set());
+ /** 当前所有正在被编辑的单元格key的格式为:`${recordKey}.${dataIndex}`,仅`editableType`为`cell`时有效 */
+ const editableCellKeys = ref(new Set());
+ /** 表格排序或过滤时的搜索参数 */
+ const searchState = reactive({
+ sortInfo: {},
+ filterInfo: {},
+ });
+
+ if (!Object.is(props.pagination, false)) {
+ paginationRef.value = {
+ current: 1,
+ pageSize: tableConfig.defaultPageSize,
+ total: 0,
+ pageSizeOptions: [...tableConfig.pageSizeOptions],
+ showQuickJumper: true,
+ showSizeChanger: true, // 显示可改变每页数量
+ showTotal: (total) => t('component.table.total', { total }), // 显示总数
+ // onChange: (current, pageSize) => pageOption?.pageChange?.(current, pageSize),
+ // onShowSizeChange: (current, pageSize) => pageOption?.pageChange?.(current, pageSize),
+ ...props.pagination,
+ };
+ }
+
+ const getProps = computed(() => {
+ return { ...props, ...unref(innerPropsRef) };
+ });
+
+ const getBindValues = computed(() => {
+ const props = unref(getProps);
+
+ let propsData: Recordable = {
+ ...props,
+ rowKey: props.rowKey ?? 'id',
+ loading: props.loading ?? unref(loadingRef),
+ pagination: unref(paginationRef),
+ tableLayout: props.tableLayout ?? 'fixed',
+ scroll: unref(scroll),
+ };
+ if (slots.expandedRowRender) {
+ propsData = omit(propsData, 'scroll');
+ }
+
+ propsData = omit(propsData, ['class', 'onChange', 'columns']);
+ return propsData;
+ });
+
+ // 如果外界设置了dataSource,那就直接用外界提供的数据
+ watch(
+ () => props.dataSource,
+ (val) => {
+ if (val) {
+ tableData.value = val;
+ }
+ },
+ {
+ immediate: true,
+ deep: true,
+ },
+ );
+
+ watch(
+ () => props.columns,
+ (val) => {
+ if (val) {
+ innerPropsRef.value = {
+ ...innerPropsRef.value,
+ columns: val,
+ };
+ }
+ },
+ {
+ immediate: true,
+ deep: true,
+ },
+ );
+
+ return {
+ tableRef,
+ editTableFormRef,
+ loadingRef,
+ tableData,
+ queryFormRef,
+ innerPropsRef,
+ getProps,
+ getBindValues,
+ paginationRef,
+ editFormModel,
+ editFormErrorMsgs,
+ editableCellKeys,
+ editableRowKeys,
+ searchState,
+ };
+};
diff --git a/src/components/core/dynamic-table/src/types/column.ts b/src/components/core/dynamic-table/src/types/column.ts
new file mode 100644
index 0000000..897f2fc
--- /dev/null
+++ b/src/components/core/dynamic-table/src/types/column.ts
@@ -0,0 +1,69 @@
+import type { ColumnsType } from 'ant-design-vue/es/table';
+import type { FormSchema, GetFieldKeys } from '@/components/core/schema-form';
+import type { ActionItem } from './tableAction';
+import type { TableActionType } from '@/components/core/dynamic-table/src/types';
+import type { DataIndex } from 'ant-design-vue/es/vc-table/interface';
+
+export type ColumnType = ColumnsType[number];
+
+export type CustomRenderParams = Omit<
+ Parameters['customRender']>>[number],
+ 'column'
+> & { column: TableColumn };
+
+// export type EditableConfig = {
+// /** 可编辑表格的类型,`单行编辑` | `多行编辑` | `可编辑单元格` */
+// type: 'single' | 'multiple' | 'cell';
+// /** 传递给 Form.Item 的配置,可以配置 rules */
+// formProps?: Partial>;
+// /** 行保存的时候 */
+// onSave?: (
+// /** 行 id,一般是唯一id */
+// key: Key,
+// /** 当前修改的行的值,只有 form 在内的会被设置 */
+// record: T,
+// /** 原始值,可以用于判断是否修改 */
+// originRow: T,
+// ) => Promise;
+// };
+
+/**
+ * 表格属性
+ */
+export type TableColumn = ColumnType & {
+ dataIndex?: GetFieldKeys | ColumnKeyFlagType | Omit;
+ /** 指定搜索的字段 */
+ searchField?: string;
+ /** 在查询表单中不展示此项 */
+ hideInSearch?: boolean;
+ /** 在 Table 中不展示此列 */
+ hideInTable?: boolean;
+ /** 传递给搜索表单 Form.Item 的配置,可以配置 rules */
+ formItemProps?: Partial>;
+ /** 传递给可编辑表格 Form.Item 的配置,可以配置 rules */
+ editFormItemProps?: Partial> & {
+ /**
+ * 是否继承于搜索表单`TableColumn.formItemProps`的所有属性,为深拷贝合并
+ * 值为`true`时的行为伪代码如下:
+ * ```js
+ * Object.assign({}, TableColumn.formItemProps, TableColumn.editFormItemProps)
+ * ```
+ * @defaultValue 默认值为`true`
+ * */
+ extendSearchFormProps?: boolean;
+ };
+ /** 操作列,一般用于对表格某一行数据进行操作 */
+ actions?: (params: CustomRenderParams, action: TableActionType) => ActionItem[];
+ /** 当前单元格是否允许被编辑 */
+ editable?: boolean | ((params: CustomRenderParams) => boolean);
+ /** 当前单元格是否默认开启编辑,仅 `editableType`为`cell`时有效 */
+ defaultEditable?: boolean;
+};
+
+export enum ColumnKeyFlag {
+ ACTION = 'ACTION',
+ INDEX = 'INDEX',
+}
+
+export const columnKeyFlags = Object.values(ColumnKeyFlag) as string[];
+export type ColumnKeyFlagType = `${ColumnKeyFlag}`;
diff --git a/src/components/core/dynamic-table/src/types/index.ts b/src/components/core/dynamic-table/src/types/index.ts
new file mode 100644
index 0000000..34816be
--- /dev/null
+++ b/src/components/core/dynamic-table/src/types/index.ts
@@ -0,0 +1,3 @@
+export * from './table';
+export * from './column';
+export * from './tableAction';
diff --git a/src/components/core/dynamic-table/src/types/table.ts b/src/components/core/dynamic-table/src/types/table.ts
new file mode 100644
index 0000000..f14cc90
--- /dev/null
+++ b/src/components/core/dynamic-table/src/types/table.ts
@@ -0,0 +1,41 @@
+import type { TableProps } from 'ant-design-vue';
+import type { TablePaginationConfig } from 'ant-design-vue/es/table';
+
+/**
+ * 加载表格数据的参数
+ */
+export type LoadDataParams = TablePaginationConfig & {
+ /** 根据自己业务需求定义页码 */
+ page?: number;
+ /** 根据自己业务需求定义页数据条数 */
+ limit?: number;
+};
+
+/** 表格onChange事件回调参数 */
+export type OnChangeCallbackParams = Parameters>;
+
+/** 表格onChange事件回调函数 */
+export type OnChangeCallback = TableProps['onChange'];
+
+/** 编辑行类型 */
+export type EditableType = 'single' | 'multiple' | 'cell';
+
+/** 单元格保存回调 */
+export type OnSave = (
+ /** 行 id,一般是唯一id */
+ key: Key,
+ /** 当前修改的行的值,只有 form 在内的会被设置 */
+ record: T,
+ /** 原始值,可以用于判断是否修改 */
+ originRow: T,
+) => Promise;
+
+/** 单元格取消保存回调 */
+export type OnCancel = (
+ /** 行 id,一般是唯一id */
+ key: Key,
+ /** 当前修改的行的值,只有 form 在内的会被设置 */
+ record: T,
+ /** 原始值,可以用于判断是否修改 */
+ originRow: T,
+) => any | void;
diff --git a/src/components/core/dynamic-table/src/types/tableAction.ts b/src/components/core/dynamic-table/src/types/tableAction.ts
new file mode 100644
index 0000000..7b08292
--- /dev/null
+++ b/src/components/core/dynamic-table/src/types/tableAction.ts
@@ -0,0 +1,73 @@
+import type { Ref } from 'vue';
+import type { CustomRenderParams } from './column';
+import type { PopconfirmProps } from 'ant-design-vue/es/popconfirm';
+import type { ButtonProps, TooltipProps } from 'ant-design-vue/es/components';
+import type { TableMethods, UseEditableType } from '../hooks/';
+import type { PermissionType } from '@/permission/permCode';
+import type { ButtonType } from '@/components/basic/button';
+
+export type ActionItem = Omit & {
+ onClick?: Fn;
+ label?: string;
+ color?: string;
+ type?: ButtonType;
+ loading?: Ref | ButtonProps['loading'];
+ icon?: string;
+ popConfirm?: PopConfirm;
+ disabled?: boolean;
+ divider?: boolean;
+ // 权限编码控制是否显示
+ // auth?: RoleEnum | RoleEnum[] | string | string[];
+ // 业务控制是否显示
+ ifShow?: boolean | ((action: ActionItem) => boolean);
+ tooltip?: string | TooltipProps;
+ /** 设置按钮权限, effect不传默认为disable */
+ auth?:
+ | PermissionType
+ | {
+ perm: PermissionType;
+ /** 无权限时,按钮不可见或是处于禁用状态 */
+ effect?: 'delete' | 'disable';
+ };
+};
+
+export type PopConfirm = PopconfirmProps & {
+ title: string;
+ okText?: string;
+ cancelText?: string;
+ onConfirm: Fn;
+ onCancel?: Fn;
+ icon?: string;
+ placement?:
+ | 'top'
+ | 'left'
+ | 'right'
+ | 'bottom'
+ | 'topLeft'
+ | 'topRight'
+ | 'leftTop'
+ | 'leftBottom'
+ | 'rightTop'
+ | 'rightBottom'
+ | 'bottomLeft'
+ | 'bottomRight';
+};
+
+export type TableActionType = {
+ /** 刷新并清空,页码也会重置,不包括搜索表单 */
+ reload: TableMethods['reload'];
+ /** 设置动态表格属性 */
+ setProps: TableMethods['setProps'];
+ /** 获取远程数据 */
+ fetchData: TableMethods['fetchData'];
+ /** 进入编辑状态 */
+ startEditable: UseEditableType['startEditable'];
+ /** 取消编辑 */
+ cancelEditable: UseEditableType['cancelEditable'];
+ /** 获取编辑后表单的值 */
+ getEditFormModel: UseEditableType['getEditFormModel'];
+ /** 当前行是否处于编辑状态 */
+ isEditable: UseEditableType['isEditable'];
+ /** 行编辑表单是否校验通过 */
+ validateRow: UseEditableType['validateRow'];
+};
diff --git a/src/components/core/schema-form/index.ts b/src/components/core/schema-form/index.ts
new file mode 100644
index 0000000..b8d606e
--- /dev/null
+++ b/src/components/core/schema-form/index.ts
@@ -0,0 +1,12 @@
+import SchemaForm from './src/schema-form.vue';
+import SchemaFormItem from './src/schema-form-item.vue';
+
+export * from './src/types/';
+export * from './src/schema-form';
+export * from './src/schema-form-item';
+export * from './src/hooks/';
+export * from './src/components/';
+
+export { SchemaForm, SchemaFormItem };
+
+export default SchemaForm;
diff --git a/src/components/core/schema-form/src/componentMap.ts b/src/components/core/schema-form/src/componentMap.ts
new file mode 100644
index 0000000..7c5c2f2
--- /dev/null
+++ b/src/components/core/schema-form/src/componentMap.ts
@@ -0,0 +1,66 @@
+/**
+ * Component list, register here to setting it in the form
+ */
+import {
+ Input,
+ Select,
+ Radio,
+ Checkbox,
+ AutoComplete,
+ Cascader,
+ DatePicker,
+ InputNumber,
+ Switch,
+ TimePicker,
+ TreeSelect,
+ Tree,
+ Slider,
+ Rate,
+ Divider,
+ Upload,
+} from 'ant-design-vue';
+import type { Component, VNodeProps } from 'vue';
+
+const componentMap = {
+ Input,
+ InputGroup: Input.Group,
+ InputPassword: Input.Password,
+ InputSearch: Input.Search,
+ InputTextArea: Input.TextArea,
+ InputNumber,
+ AutoComplete,
+ Select,
+ TreeSelect,
+ Tree,
+ Switch,
+ RadioGroup: Radio.Group,
+ Checkbox,
+ CheckboxGroup: Checkbox.Group,
+ Cascader,
+ Slider,
+ Rate,
+ DatePicker,
+ MonthPicker: DatePicker.MonthPicker,
+ RangePicker: DatePicker.RangePicker,
+ WeekPicker: DatePicker.WeekPicker,
+ TimePicker,
+ Upload,
+
+ Divider,
+};
+
+type ExtractPropTypes = T extends new (...args: any) => any
+ ? Writable['$props'], keyof VNodeProps>>
+ : never;
+
+type ComponentMapType = typeof componentMap;
+
+export type ComponentType = keyof ComponentMapType;
+
+export type ComponentMapProps = {
+ [K in ComponentType]: ExtractPropTypes;
+};
+
+export type AllComponentProps = ComponentMapProps[ComponentType];
+
+export { componentMap };
diff --git a/src/components/core/schema-form/src/components/ApiSelect.vue b/src/components/core/schema-form/src/components/ApiSelect.vue
new file mode 100644
index 0000000..10d3c5b
--- /dev/null
+++ b/src/components/core/schema-form/src/components/ApiSelect.vue
@@ -0,0 +1,142 @@
+
+
+
+
diff --git a/src/components/core/schema-form/src/components/form-action.vue b/src/components/core/schema-form/src/components/form-action.vue
new file mode 100644
index 0000000..69439bc
--- /dev/null
+++ b/src/components/core/schema-form/src/components/form-action.vue
@@ -0,0 +1,133 @@
+
+
+ ]
+
+
+
+ {{ getResetBtnOptions.text }}
+
+
+
+
+ {{ getSubmitBtnOptions.text }}
+
+
+
+
+ {{ isAdvanced ? t('component.form.putAway') : t('component.form.unfold') }}
+
+
+
+
+
+
+
+
diff --git a/src/components/core/schema-form/src/components/index.ts b/src/components/core/schema-form/src/components/index.ts
new file mode 100644
index 0000000..9137b58
--- /dev/null
+++ b/src/components/core/schema-form/src/components/index.ts
@@ -0,0 +1 @@
+export { default as ApiSelect } from './ApiSelect.vue';
diff --git a/src/components/core/schema-form/src/helper.ts b/src/components/core/schema-form/src/helper.ts
new file mode 100644
index 0000000..fcc7082
--- /dev/null
+++ b/src/components/core/schema-form/src/helper.ts
@@ -0,0 +1,70 @@
+import dayjs from 'dayjs';
+import type { RuleObject } from 'ant-design-vue/es/form/';
+import type { ComponentType } from './types/component';
+import { isNumber } from '@/utils/is';
+import { useI18n } from '@/hooks/useI18n';
+
+/**
+ * @description: 生成placeholder
+ */
+export function createPlaceholderMessage(component: ComponentType, label = '') {
+ const { t } = useI18n();
+
+ if (component.includes('Input') || component.includes('Complete')) {
+ return `${t('common.inputText')}${label}`;
+ }
+ const chooseTypes: ComponentType[] = [
+ 'Select',
+ 'Cascader',
+ 'Checkbox',
+ 'CheckboxGroup',
+ 'Switch',
+ 'TreeSelect',
+ ];
+ if (component.includes('Picker') || chooseTypes.includes(component)) {
+ return `${t('common.chooseText')}${label}`;
+ }
+ return '';
+}
+
+const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'];
+
+function genType() {
+ return [...DATE_TYPE, 'RangePicker'];
+}
+
+export function setComponentRuleType(
+ rule: RuleObject,
+ component: ComponentType,
+ valueFormat: string,
+) {
+ if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component)) {
+ rule.type = valueFormat ? 'string' : 'object';
+ } else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component)) {
+ rule.type = 'array';
+ } else if (['InputNumber'].includes(component)) {
+ rule.type = 'number';
+ }
+}
+
+export function processDateValue(attr: Recordable, component: string) {
+ const { valueFormat, value } = attr;
+ if (valueFormat) {
+ // attr.value = isObject(value) ? dayjs(value).format(valueFormat) : value
+ } else if (DATE_TYPE.includes(component) && value) {
+ attr.value = dayjs(attr.value);
+ }
+}
+
+export function handleInputNumberValue(component?: ComponentType, val?: any) {
+ if (!component) return val;
+ if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) {
+ return val && isNumber(val) ? `${val}` : val;
+ }
+ return val;
+}
+
+/**
+ * 时间字段
+ */
+export const dateItemType = genType();
diff --git a/src/components/core/schema-form/src/hooks/index.ts b/src/components/core/schema-form/src/hooks/index.ts
new file mode 100644
index 0000000..d3a2358
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/index.ts
@@ -0,0 +1,13 @@
+import type { FormState } from './useFormState';
+import type { FormEvents } from './useFormEvents';
+import type { FormMethods } from './useFormMethods';
+
+export * from './useForm';
+export * from './useFormState';
+export * from './useFormContext';
+export * from './useFormEvents';
+export * from './useFormMethods';
+export * from './useLabelWidth';
+export * from './useAdvanced';
+
+export type SchemaFormType = FormState & FormEvents & FormMethods;
diff --git a/src/components/core/schema-form/src/hooks/useAdvanced.ts b/src/components/core/schema-form/src/hooks/useAdvanced.ts
new file mode 100644
index 0000000..d55d8ea
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useAdvanced.ts
@@ -0,0 +1,154 @@
+import { computed, unref, watch } from 'vue';
+import type { SchemaFormEmitFn } from '../schema-form';
+import type { ColEx } from '../types/component';
+import type { SchemaFormType } from './';
+import { isBoolean, isFunction, isNumber, isObject } from '@/utils/is';
+import { useBreakpoint } from '@/hooks/event/useBreakpoint';
+
+const BASIC_COL_LEN = 24;
+
+type UseAdvancedContext = {
+ instance: SchemaFormType;
+ emit: SchemaFormEmitFn;
+};
+
+export const useAdvanced = ({ instance, emit }: UseAdvancedContext) => {
+ const { realWidthRef, screenEnum, screenRef } = useBreakpoint();
+ const { advanceState, getFormProps, formSchemasRef, formModel, defaultFormValues } = instance;
+ const getEmptySpan = computed((): number => {
+ if (!advanceState.isAdvanced) {
+ return 0;
+ }
+ // For some special cases, you need to manually specify additional blank lines
+ const emptySpan = unref(getFormProps).emptySpan || 0;
+
+ if (isNumber(emptySpan)) {
+ return emptySpan;
+ }
+ if (isObject(emptySpan)) {
+ const { span = 0 } = emptySpan;
+ const screen = unref(screenRef) as string;
+
+ const screenSpan = (emptySpan as any)[screen.toLowerCase()];
+ return screenSpan || span || 0;
+ }
+ return 0;
+ });
+
+ watch(
+ [formSchemasRef, () => advanceState.isAdvanced, () => unref(realWidthRef)],
+ () => {
+ const { showAdvancedButton } = unref(getFormProps);
+ if (showAdvancedButton) {
+ updateAdvanced();
+ }
+ },
+ { immediate: true },
+ );
+
+ function getAdvanced(itemCol: Partial, itemColSum = 0, isLastAction = false) {
+ const width = unref(realWidthRef);
+
+ const mdWidth =
+ parseInt(itemCol.md as string) ||
+ parseInt(itemCol.xs as string) ||
+ parseInt(itemCol.sm as string) ||
+ (itemCol.span as number) ||
+ BASIC_COL_LEN;
+
+ const lgWidth = parseInt(itemCol.lg as string) || mdWidth;
+ const xlWidth = parseInt(itemCol.xl as string) || lgWidth;
+ const xxlWidth = parseInt(itemCol.xxl as string) || xlWidth;
+ if (width <= screenEnum.LG) {
+ itemColSum += mdWidth;
+ } else if (width < screenEnum.XL) {
+ itemColSum += lgWidth;
+ } else if (width < screenEnum.XXL) {
+ itemColSum += xlWidth;
+ } else {
+ itemColSum += xxlWidth;
+ }
+
+ if (isLastAction) {
+ advanceState.hideAdvanceBtn = false;
+ if (itemColSum <= BASIC_COL_LEN * 2) {
+ // When less than or equal to 2 lines, the collapse and expand buttons are not displayed
+ advanceState.hideAdvanceBtn = true;
+ advanceState.isAdvanced = true;
+ } else if (
+ itemColSum > BASIC_COL_LEN * 2 &&
+ itemColSum <= BASIC_COL_LEN * (unref(getFormProps).autoAdvancedLine || 3)
+ ) {
+ advanceState.hideAdvanceBtn = false;
+
+ // More than 3 lines collapsed by default
+ } else if (!advanceState.isLoad) {
+ advanceState.isLoad = true;
+ advanceState.isAdvanced = !advanceState.isAdvanced;
+ }
+ return { isAdvanced: advanceState.isAdvanced, itemColSum };
+ }
+ if (itemColSum > BASIC_COL_LEN * (unref(getFormProps).alwaysShowLines || 1)) {
+ return { isAdvanced: advanceState.isAdvanced, itemColSum };
+ } else {
+ // The first line is always displayed
+ return { isAdvanced: true, itemColSum };
+ }
+ }
+
+ function updateAdvanced() {
+ let itemColSum = 0;
+ let realItemColSum = 0;
+ const { baseColProps = {} } = unref(getFormProps);
+
+ for (const schema of unref(formSchemasRef)) {
+ const { vShow, colProps } = schema;
+ let isShow = true;
+
+ if (isBoolean(vShow)) {
+ isShow = vShow;
+ }
+
+ if (isFunction(vShow)) {
+ // @ts-ignore
+ isShow = vShow({
+ // @ts-ignore
+ schema,
+ formModel,
+ field: schema.field,
+ formInstance: instance,
+ values: {
+ ...unref(defaultFormValues),
+ ...formModel,
+ },
+ });
+ }
+
+ if (isShow && (colProps || baseColProps)) {
+ const { itemColSum: sum, isAdvanced } = getAdvanced(
+ { ...baseColProps, ...colProps },
+ itemColSum,
+ );
+
+ itemColSum = sum || 0;
+ if (isAdvanced) {
+ realItemColSum = itemColSum;
+ }
+
+ schema.isAdvanced = isAdvanced;
+ }
+ }
+
+ advanceState.actionSpan = (realItemColSum % BASIC_COL_LEN) + unref(getEmptySpan);
+
+ getAdvanced(unref(getFormProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true);
+
+ emit('advanced-change');
+ }
+
+ function handleToggleAdvanced() {
+ advanceState.isAdvanced = !advanceState.isAdvanced;
+ }
+
+ return { handleToggleAdvanced };
+};
diff --git a/src/components/core/schema-form/src/hooks/useForm.tsx b/src/components/core/schema-form/src/hooks/useForm.tsx
new file mode 100644
index 0000000..16d677e
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useForm.tsx
@@ -0,0 +1,61 @@
+import { nextTick, ref, unref, watch } from 'vue';
+import { isEmpty } from 'lodash-es';
+import SchemaForm from '../../index';
+import type { FunctionalComponent, Ref } from 'vue';
+import type { SchemaFormInstance, SchemaFormProps } from '../schema-form';
+
+export function useForm(props?: Partial) {
+ const formRef = ref({} as SchemaFormInstance);
+
+ async function getFormInstance() {
+ await nextTick();
+ const form = unref(formRef);
+ if (isEmpty(form)) {
+ console.error('未获取表单实例!');
+ }
+ return form;
+ }
+ watch(
+ () => props,
+ async () => {
+ if (props) {
+ await nextTick();
+ const formInstance = await getFormInstance();
+ // console.log('form onMounted');
+ formInstance.setSchemaFormProps?.(props);
+ }
+ },
+ {
+ immediate: true,
+ deep: true,
+ flush: 'post',
+ },
+ );
+
+ const methods = new Proxy[>(formRef, {
+ get(target, key) {
+ if (Reflect.has(target, key)) {
+ return unref(target);
+ }
+ if (target.value && Reflect.has(target.value, key)) {
+ return Reflect.get(target.value, key);
+ }
+ return async (...rest) => {
+ const form = await getFormInstance();
+ return form?.[key]?.(...rest);
+ };
+ },
+ });
+
+ const SchemaFormRender: FunctionalComponent = (compProps, { attrs, slots }) => {
+ return (
+
+ );
+ };
+
+ return [SchemaFormRender, unref(methods)] as const;
+}
diff --git a/src/components/core/schema-form/src/hooks/useFormContext.ts b/src/components/core/schema-form/src/hooks/useFormContext.ts
new file mode 100644
index 0000000..0430377
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useFormContext.ts
@@ -0,0 +1,12 @@
+import { provide, inject } from 'vue';
+import type { SchemaFormType } from './';
+
+const key = Symbol('schema-form');
+
+export async function createFormContext(instance: SchemaFormType) {
+ provide(key, instance);
+}
+
+export function useFormContext(formProps = {}) {
+ return inject(key, formProps) as SchemaFormType;
+}
diff --git a/src/components/core/schema-form/src/hooks/useFormEvents.ts b/src/components/core/schema-form/src/hooks/useFormEvents.ts
new file mode 100644
index 0000000..6d73161
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useFormEvents.ts
@@ -0,0 +1,314 @@
+import { unref, toRaw } from 'vue';
+import { cloneDeep, isNil, uniqBy } from 'lodash-es';
+import dayjs from 'dayjs';
+import { dateItemType, handleInputNumberValue } from '../helper';
+import type { UnwrapFormSchema } from '../types/form';
+import type { NamePath } from 'ant-design-vue/lib/form/interface';
+import type { FormState, FormMethods } from './index';
+import type { SchemaFormEmitFn } from '../schema-form';
+import { isArray, isFunction, isObject, isString } from '@/utils/is';
+import { deepMerge } from '@/utils';
+
+type UseFormActionContext = FormState & {
+ emit: SchemaFormEmitFn;
+ handleFormValues: FormMethods['handleFormValues'];
+};
+
+type FormSchema = UnwrapFormSchema;
+
+export type FormEvents = ReturnType;
+
+export function useFormEvents(formActionContext: UseFormActionContext) {
+ const {
+ emit,
+ formPropsRef,
+ formSchemasRef,
+ formModel,
+ cacheFormModel,
+ getFormProps,
+ schemaFormRef,
+ defaultFormValues,
+ originComponentPropsFnMap,
+ handleFormValues,
+ } = formActionContext;
+
+ function getFieldsValue(): Recordable {
+ const formEl = unref(schemaFormRef);
+ if (!formEl) return {};
+ return handleFormValues(toRaw(unref(formModel)));
+ }
+
+ /**
+ * @description: Is it time
+ */
+ function itemIsDateType(key: string) {
+ return unref(formPropsRef).schemas?.some((item) => {
+ return item.field === key && isString(item.component)
+ ? dateItemType.includes(item.component)
+ : false;
+ });
+ }
+
+ /**
+ * @description: 设置表单字段值
+ */
+ async function setFieldsValue(values: Recordable): Promise {
+ const schemas = unref(formSchemasRef);
+ // @ts-ignore
+ const fields = schemas.map((item) => item.field).filter(Boolean);
+
+ Object.assign(cacheFormModel, values);
+
+ const validKeys: string[] = [];
+ Object.entries(values).forEach(([key, value]) => {
+ const schema = schemas.find((item) => item.field === key);
+
+ const hasKey = Reflect.has(values, key);
+ if (isString(schema?.component)) {
+ value = handleInputNumberValue(schema?.component, value);
+ }
+ // 0| '' is allow
+ if (hasKey && fields.includes(key)) {
+ // time type
+ if (itemIsDateType(key)) {
+ if (Array.isArray(value)) {
+ const arr: any[] = [];
+ for (const ele of value) {
+ arr.push(ele ? dayjs(ele) : null);
+ }
+ formModel[key] = arr;
+ } else {
+ const { componentProps } = schema || {};
+ let _props = componentProps as any;
+ if (isFunction(componentProps)) {
+ _props = _props({ formPropsRef, formModel });
+ }
+ formModel[key] = value ? (_props?.valueFormat ? value : dayjs(value)) : null;
+ }
+ } else {
+ formModel[key] = value;
+ }
+ validKeys.push(key);
+ }
+ });
+ validateFields(validKeys);
+ }
+
+ async function resetSchema(data: Partial | Partial[]) {
+ let updateData: Partial[] = [];
+ if (isObject(data)) {
+ updateData.push(data as FormSchema);
+ }
+ if (isArray(data)) {
+ updateData = [...data];
+ }
+ unref(formPropsRef).schemas = updateData as FormSchema[];
+ }
+
+ /**
+ * @description: 插入到指定 filed 后面,如果没传指定 field,则插入到最后,当 first = true 时插入到第一个位置
+ */
+ async function appendSchemaByField(schemaItem: FormSchema, prefixField?: string, first = false) {
+ const schemaList = cloneDeep(unref(formSchemasRef));
+
+ const index = schemaList.findIndex((schema) => schema.field === prefixField);
+
+ if (!prefixField || index === -1 || first) {
+ first ? schemaList.unshift(schemaItem) : schemaList.push(schemaItem);
+ formModel[schemaItem.field] = schemaItem.defaultValue;
+ formPropsRef.value.schemas = schemaList;
+ return;
+ }
+ if (index !== -1) {
+ schemaList.splice(index + 1, 0, schemaItem);
+ }
+ formModel[schemaItem.field] = schemaItem.defaultValue;
+ formPropsRef.value.schemas = schemaList;
+ _setDefaultValue(formPropsRef.value.schemas);
+ }
+
+ /**
+ * @description: 根据 field 删除 Schema
+ */
+ async function removeSchemaByField(fields: string | string[]): Promise {
+ const schemaList = cloneDeep(unref(formSchemasRef));
+
+ if (!fields) {
+ return;
+ }
+
+ let fieldList: string[] = isString(fields) ? [fields] : fields;
+ if (isString(fields)) {
+ fieldList = [fields];
+ }
+ for (const field of fieldList) {
+ if (isString(field)) {
+ const index = schemaList.findIndex((schema) => schema.field === field);
+ if (index !== -1) {
+ Reflect.deleteProperty(formModel, field);
+ schemaList.splice(index, 1);
+ }
+ }
+ }
+
+ formPropsRef.value.schemas = schemaList;
+ }
+
+ /**
+ * @description: 根据 field 查找 Schema
+ */
+ function getSchemaByFiled(fields: string | string[]): FormSchema | undefined {
+ const schemaList = unref(formSchemasRef);
+ const fieldList = ([] as string[]).concat(fields);
+ return schemaList.find((schema) => fieldList.includes(schema.field));
+ }
+
+ /**
+ * @description 更新formItemSchema
+ */
+ const updateSchema = (data: Partial | Partial[]) => {
+ let updateData: Partial[] = [];
+ if (isObject(data)) {
+ updateData.push(data as FormSchema);
+ }
+ if (isArray(data)) {
+ updateData = [...data];
+ }
+
+ const hasField = updateData.every(
+ (item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field),
+ );
+
+ if (!hasField) {
+ console.error(
+ 'All children of the form Schema array that need to be updated must contain the `field` field',
+ );
+ return;
+ }
+ const schemas: FormSchema[] = [];
+ updateData.forEach((item) => {
+ unref(formSchemasRef).forEach((val) => {
+ if (val.field === item.field) {
+ const newSchema = deepMerge(val, item);
+ if (originComponentPropsFnMap.has(val.field)) {
+ const originCompPropsFn = originComponentPropsFnMap.get(val.field)!;
+ const compProps = { ...newSchema.componentProps };
+ newSchema.componentProps = (opt) => {
+ const res = {
+ ...originCompPropsFn(opt),
+ ...compProps,
+ };
+ return res;
+ };
+ }
+ schemas.push(newSchema);
+ } else {
+ schemas.push(val);
+ }
+ });
+ });
+ formPropsRef.value.schemas = uniqBy(schemas, 'field');
+ _setDefaultValue(formPropsRef.value.schemas!);
+ };
+
+ function _setDefaultValue(data: FormSchema | FormSchema[]) {
+ let schemas: FormSchema[] = [];
+ if (isObject(data)) {
+ schemas.push(data as FormSchema);
+ }
+ if (isArray(data)) {
+ schemas = [...data];
+ }
+
+ const obj: Recordable = {};
+ const currentFieldsValue = getFieldsValue();
+ schemas.forEach((item) => {
+ if (
+ item.component != 'Divider' &&
+ Reflect.has(item, 'field') &&
+ item.field &&
+ !isNil(item.defaultValue) &&
+ (!(item.field in currentFieldsValue) || isNil(currentFieldsValue[item.field]))
+ ) {
+ obj[item.field] = item.defaultValue;
+ }
+ });
+ setFieldsValue(obj);
+ }
+
+ async function resetFields(): Promise {
+ const { resetFunc, submitOnReset } = unref(getFormProps);
+ resetFunc && isFunction(resetFunc) && (await resetFunc());
+
+ Object.keys(formModel).forEach((key) => {
+ formModel[key] = defaultFormValues[key];
+ });
+
+ emit('reset', formModel);
+ submitOnReset && handleSubmit();
+ setTimeout(clearValidate);
+ }
+
+ async function validateFields(nameList?: NamePath[] | undefined) {
+ return schemaFormRef.value?.validateFields(nameList);
+ }
+
+ async function validate(nameList?: NamePath[] | undefined) {
+ return await schemaFormRef.value?.validate(nameList)!;
+ }
+
+ async function clearValidate(name?: string | string[]) {
+ await schemaFormRef.value?.clearValidate(name);
+ }
+
+ async function scrollToField(name: NamePath, options?: ScrollOptions | undefined) {
+ await schemaFormRef.value?.scrollToField(name, options);
+ }
+
+ async function handleSubmit(e?: Event) {
+ e && e.preventDefault();
+ const { submitFunc } = unref(getFormProps);
+ if (submitFunc && isFunction(submitFunc)) {
+ await submitFunc();
+ return;
+ }
+ const formEl = unref(schemaFormRef);
+ if (!formEl) return;
+ try {
+ const values = await validate();
+ const res = handleFormValues(values);
+ emit('submit', res);
+ return res;
+ } catch (error: any) {
+ return Promise.reject(error);
+ }
+ }
+
+ const handleEnterPress = (e: KeyboardEvent) => {
+ const { autoSubmitOnEnter } = unref(formPropsRef);
+ if (!autoSubmitOnEnter) return;
+ if (e.key === 'Enter' && e.target && e.target instanceof HTMLElement) {
+ const target: HTMLElement = e.target as HTMLElement;
+ if (target && target.tagName && target.tagName.toUpperCase() == 'INPUT') {
+ handleSubmit(e);
+ }
+ }
+ };
+
+ return {
+ submit: handleSubmit,
+ handleEnterPress,
+ clearValidate,
+ validate,
+ validateFields,
+ getFieldsValue,
+ updateSchema,
+ resetSchema,
+ getSchemaByFiled,
+ appendSchemaByField,
+ removeSchemaByField,
+ resetFields,
+ setFieldsValue,
+ scrollToField,
+ };
+}
diff --git a/src/components/core/schema-form/src/hooks/useFormMethods.ts b/src/components/core/schema-form/src/hooks/useFormMethods.ts
new file mode 100644
index 0000000..30ec642
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useFormMethods.ts
@@ -0,0 +1,126 @@
+import { unref } from 'vue';
+import { set } from 'lodash-es';
+import type { FormState } from './useFormState';
+import type { SchemaFormProps } from '../schema-form';
+import { deepMerge } from '@/utils/';
+import { isFunction, isNullOrUnDef, isObject, isArray, isString } from '@/utils/is';
+import { dateUtil } from '@/utils/dateUtil';
+
+type UseFormMethodsContext = FormState;
+
+export type FormMethods = ReturnType;
+
+export const useFormMethods = (formMethodsContext: UseFormMethodsContext) => {
+ const {
+ compRefMap,
+ formModel,
+ formPropsRef,
+ cacheFormModel,
+ defaultFormValues,
+ schemaFormRef,
+ getFormProps,
+ } = formMethodsContext;
+
+ // 将所有的表单组件实例保存起来, 方便外面通过表单组件实例操作
+ const setItemRef = (field: string) => {
+ return (el) => {
+ if (el) {
+ compRefMap.set(field, el);
+ }
+ };
+ };
+
+ // 设置某个字段的值
+ const setFormModel = (key: Key, value: any) => {
+ formModel[key] = value;
+ cacheFormModel[key] = value;
+ const { validateTrigger } = unref(getFormProps);
+ if (!validateTrigger || validateTrigger === 'change') {
+ schemaFormRef.value?.validateFields([key]);
+ }
+ };
+
+ // 删除某个字段
+ const delFormModel = (key: Key) => {
+ return Reflect.deleteProperty(formModel, key);
+ };
+
+ const setSchemaFormProps = (formProps: Partial) => {
+ formPropsRef.value = deepMerge(unref(formPropsRef) || {}, formProps);
+ };
+
+ // Processing form values
+ function handleFormValues(values: Recordable) {
+ if (!isObject(values)) {
+ return {};
+ }
+ const res: Recordable = {};
+ for (const item of Object.entries(values)) {
+ let [, value] = item;
+ const [key] = item;
+ if (!key || (isArray(value) && value.length === 0) || isFunction(value)) {
+ continue;
+ }
+ const transformDateFunc = unref(getFormProps).transformDateFunc;
+ if (isObject(value)) {
+ value = transformDateFunc?.(value);
+ }
+
+ if (isArray(value) && value[0]?.format && value[1]?.format) {
+ value = value.map((item) => transformDateFunc?.(item));
+ }
+ // Remove spaces
+ if (isString(value)) {
+ value = value.trim();
+ }
+ set(res, key, value);
+ }
+ return handleRangeTimeValue(res);
+ }
+
+ /**
+ * @description: Processing time interval parameters
+ */
+ function handleRangeTimeValue(values: Recordable) {
+ const fieldMapToTime = unref(getFormProps).fieldMapToTime;
+
+ if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) {
+ return values;
+ }
+
+ for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) {
+ if (!field || !startTimeKey || !endTimeKey || !values[field]) {
+ continue;
+ }
+
+ const [startTime, endTime]: string[] = values[field];
+
+ values[startTimeKey] = dateUtil(startTime).format(format);
+ values[endTimeKey] = dateUtil(endTime).format(format);
+ Reflect.deleteProperty(values, field);
+ }
+
+ return values;
+ }
+
+ // 初始化数据
+ const initFormValues = () => {
+ unref(formPropsRef).schemas?.forEach((item) => {
+ const { defaultValue } = item;
+ if (!isNullOrUnDef(defaultValue)) {
+ formModel[item.field] = defaultValue;
+ defaultFormValues[item.field] = defaultValue;
+ cacheFormModel[item.field] = defaultValue;
+ }
+ });
+ };
+
+ return {
+ setItemRef,
+ initFormValues,
+ setFormModel,
+ delFormModel,
+ setSchemaFormProps,
+ handleFormValues,
+ };
+};
diff --git a/src/components/core/schema-form/src/hooks/useFormState.ts b/src/components/core/schema-form/src/hooks/useFormState.ts
new file mode 100644
index 0000000..4f816cf
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useFormState.ts
@@ -0,0 +1,86 @@
+import { computed, reactive, ref, unref, watchEffect } from 'vue';
+import { cloneDeep } from 'lodash-es';
+import type { SetupContext, DefineComponent } from 'vue';
+import type { AdvanceState } from '../types/hooks';
+import type { SchemaFormProps } from '../schema-form';
+import type { FormInstance } from 'ant-design-vue';
+import type { ComponentProps, RenderCallbackParams } from '../types';
+import { isFunction } from '@/utils/is';
+
+export type FormState = ReturnType;
+
+export type useFormStateParams = {
+ props: SchemaFormProps;
+ attrs: SetupContext['attrs'];
+};
+
+export const useFormState = ({ props, attrs }: useFormStateParams) => {
+ // TODO 将formSchema克隆一份,避免修改原有的formSchema
+ const formPropsRef = ref(cloneDeep(props));
+ /** 表单项数据 */
+ const formModel = reactive({ ...props.initialValues });
+ // 表单默认数据
+ const defaultFormValues = reactive({ ...props.initialValues });
+ // 表单实例
+ const schemaFormRef = ref();
+ // 缓存的表单值,用于恢复form-item v-if为true后的值
+ const cacheFormModel = { ...props.initialValues };
+ // 将所有的表单组件实例保存起来
+ const compRefMap = new Map>();
+ // 初始时的componentProps,用于updateSchema更新时不覆盖componentProps为函数时的值
+ const originComponentPropsFnMap = new Map<
+ string,
+ (opt: RenderCallbackParams) => ComponentProps
+ >();
+
+ const advanceState = reactive({
+ isAdvanced: false,
+ hideAdvanceBtn: false,
+ isLoad: false,
+ actionSpan: 6,
+ });
+
+ // 获取表单所有属性
+ const getFormProps = computed(() => {
+ return {
+ ...attrs,
+ ...formPropsRef.value,
+ } as SchemaFormProps;
+ });
+
+ // 获取栅栏Row配置
+ const getRowConfig = computed((): Recordable => {
+ const { baseRowStyle = {}, rowProps } = unref(getFormProps);
+ return {
+ style: baseRowStyle,
+ ...rowProps,
+ };
+ });
+
+ const getFormActionBindProps = computed(
+ (): Recordable => ({ ...getFormProps.value, ...advanceState }),
+ );
+
+ watchEffect(() => {
+ formPropsRef.value.schemas?.forEach((item) => {
+ if (!originComponentPropsFnMap.has(item.field) && isFunction(item.componentProps)) {
+ originComponentPropsFnMap.set(item.field, item.componentProps);
+ }
+ });
+ });
+
+ return {
+ formModel,
+ defaultFormValues,
+ schemaFormRef,
+ formPropsRef,
+ cacheFormModel,
+ compRefMap,
+ getFormProps,
+ advanceState,
+ getRowConfig,
+ getFormActionBindProps,
+ originComponentPropsFnMap,
+ formSchemasRef: computed(() => unref(formPropsRef).schemas || []),
+ };
+};
diff --git a/src/components/core/schema-form/src/hooks/useLabelWidth.ts b/src/components/core/schema-form/src/hooks/useLabelWidth.ts
new file mode 100644
index 0000000..e13e019
--- /dev/null
+++ b/src/components/core/schema-form/src/hooks/useLabelWidth.ts
@@ -0,0 +1,40 @@
+import { computed, unref } from 'vue';
+import type { Ref } from 'vue';
+import type { FormSchema } from '../types/form';
+import type { SchemaFormProps } from '../schema-form';
+import { isNumber } from '@/utils/is';
+
+export function useItemLabelWidth(schemaRef: Ref, formPropsRef: Ref) {
+ return computed(() => {
+ const schemaItem = unref(schemaRef);
+ const { labelCol = {}, wrapperCol = {} } = schemaItem.formItemProps || {};
+ const { labelWidth, disabledLabelWidth } = schemaItem;
+
+ const {
+ labelWidth: globalLabelWidth,
+ labelCol: globalLabelCol,
+ wrapperCol: globWrapperCol,
+ } = unref(formPropsRef);
+
+ // 如果labelWidth是全局设置的,则会设置所有项
+ if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) {
+ labelCol.style = {
+ textAlign: 'left',
+ };
+ // @ts-ignore
+ return { labelCol, wrapperCol };
+ }
+ let width = labelWidth || globalLabelWidth;
+ const col = { ...globalLabelCol, ...labelCol };
+ const wrapCol = { ...globWrapperCol, ...wrapperCol };
+
+ if (width) {
+ width = isNumber(width) ? `${width}px` : width;
+ }
+
+ return {
+ labelCol: { style: { width }, ...col },
+ wrapperCol: { style: { width: `calc(100% - ${width})` }, ...wrapCol },
+ };
+ });
+}
diff --git a/src/components/core/schema-form/src/schema-form-item.ts b/src/components/core/schema-form/src/schema-form-item.ts
new file mode 100644
index 0000000..8fe6f0a
--- /dev/null
+++ b/src/components/core/schema-form/src/schema-form-item.ts
@@ -0,0 +1,23 @@
+import type { TableActionType } from '@/components/core/dynamic-table';
+import type { UnwrapFormSchema } from './types';
+
+export const schemaFormItemProps = {
+ formModel: {
+ type: Object as PropType>,
+ default: () => ({}),
+ },
+ schema: {
+ type: Object as PropType,
+ default: () => ({}),
+ },
+ // 动态表格实例
+ tableInstance: {
+ type: Object as PropType,
+ },
+ // 动态表格rowKey
+ tableRowKey: {
+ type: [String, Number] as PropType,
+ },
+};
+
+export type SchemaFormItemProps = typeof schemaFormItemProps;
diff --git a/src/components/core/schema-form/src/schema-form-item.vue b/src/components/core/schema-form/src/schema-form-item.vue
new file mode 100644
index 0000000..bc0bfb2
--- /dev/null
+++ b/src/components/core/schema-form/src/schema-form-item.vue
@@ -0,0 +1,469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/core/schema-form/src/schema-form.ts b/src/components/core/schema-form/src/schema-form.ts
new file mode 100644
index 0000000..1493177
--- /dev/null
+++ b/src/components/core/schema-form/src/schema-form.ts
@@ -0,0 +1,126 @@
+import { formProps, type FormProps } from 'ant-design-vue/es/form';
+import type SchemaForm from './schema-form.vue';
+import type { ColEx } from './types/component';
+import type { ExtractPublicPropTypes, ComponentInternalInstance, CSSProperties } from 'vue';
+import type { FieldMapToTime, FormSchema, RowProps } from './types/form';
+import type { ButtonProps } from '@/components/basic/button';
+import type { TableActionType } from '@/components/core/dynamic-table';
+import { isObject } from '@/utils/is';
+
+export const aFormPropKeys = Object.keys(formProps());
+
+export const schemaFormProps = {
+ ...formProps(),
+ layout: {
+ type: String as PropType,
+ default: 'horizontal',
+ },
+ /** 预置字段默认值 */
+ initialValues: {
+ type: Object as PropType,
+ default: () => ({}),
+ },
+ // 标签宽度 固定宽度
+ labelWidth: {
+ type: [Number, String] as PropType,
+ default: 0,
+ },
+ fieldMapToTime: {
+ type: Array as PropType,
+ default: () => [],
+ },
+ compact: { type: Boolean as PropType },
+ /** 表单配置规则 */
+ schemas: {
+ type: [Array] as PropType,
+ default: () => [],
+ },
+ mergeDynamicData: {
+ type: Object as PropType,
+ default: null,
+ },
+ baseRowStyle: {
+ type: Object as PropType,
+ },
+ baseColProps: {
+ type: Object as PropType>,
+ },
+ autoSetPlaceHolder: { type: Boolean as PropType, default: true },
+ /** 在INPUT组件上单击回车时,是否自动提交 */
+ autoSubmitOnEnter: { type: Boolean as PropType, default: false },
+ submitOnReset: { type: Boolean as PropType },
+ submitOnChange: { type: Boolean as PropType },
+ /** 禁用表单 */
+ disabled: { type: Boolean as PropType },
+ emptySpan: {
+ type: [Number, Object] as PropType,
+ default: 0,
+ },
+ /** 是否显示收起展开按钮 */
+ showAdvancedButton: { type: Boolean as PropType },
+ /** 转化时间 */
+ transformDateFunc: {
+ type: Function as PropType]