├── .gitignore
├── .idea
├── .gitignore
├── git_toolbox_prj.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── jsLibraryMappings.xml
├── modules.xml
├── sven_ninja.iml
└── vcs.xml
├── LICENSE
├── README.md
├── backend
├── .env.example
├── .gitignore
├── app.js
├── ecosystem.config.js
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── src
│ ├── service
│ │ ├── Content.js
│ │ ├── ql.js
│ │ └── user.js
│ └── util
│ │ ├── DbUtil.js
│ │ ├── cache.js
│ │ ├── encryptUtil.js
│ │ ├── jsonResult.js
│ │ └── ninjaConfig.js
└── static
│ ├── activity.json
│ ├── activity.json.gz
│ ├── assets
│ ├── element-icons.9c88a535.woff
│ ├── element-icons.de5eb258.ttf
│ ├── index.87af8f6f.js
│ ├── index.afd402f3.css
│ └── logo.03d6d6da.png
│ ├── favicon.ico
│ └── index.html
├── frontend
├── .editorconfig
├── .env.development
├── .gitignore
├── .prettierrc
├── index.html
├── jsconfig.json
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── public
│ └── favicon.ico
├── src
│ ├── App.vue
│ ├── api
│ │ └── index.js
│ ├── assets
│ │ └── logo.png
│ ├── components
│ │ ├── Header.vue
│ │ ├── Logo.vue
│ │ └── updateLog.vue
│ ├── index.css
│ ├── main.js
│ ├── manageStore.js
│ ├── router.js
│ └── views
│ │ ├── index.vue
│ │ ├── login.vue
│ │ └── manage.vue
├── tailwind.config.js
└── vite.config.js
└── img
├── img.png
├── img_1.png
├── img_2.png
├── img_3.png
└── img_5.png
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node,windows,macos,linux
4 |
5 | ### Linux ###
6 | *~
7 |
8 | # temporary files which can be created if a process still has a handle open of a deleted file
9 | .fuse_hidden*
10 |
11 | # KDE directory preferences
12 | .directory
13 |
14 | # Linux trash folder which might appear on any partition or disk
15 | .Trash-*
16 |
17 | # .nfs files are created when an open file is removed but is still being accessed
18 | .nfs*
19 |
20 | ### macOS ###
21 | # General
22 | .DS_Store
23 | .AppleDouble
24 | .LSOverride
25 |
26 | # Icon must end with two \r
27 | Icon
28 |
29 |
30 | # Thumbnails
31 | ._*
32 |
33 | # Files that might appear in the root of a volume
34 | .DocumentRevisions-V100
35 | .fseventsd
36 | .Spotlight-V100
37 | .TemporaryItems
38 | .Trashes
39 | .VolumeIcon.icns
40 | .com.apple.timemachine.donotpresent
41 |
42 | # Directories potentially created on remote AFP share
43 | .AppleDB
44 | .AppleDesktop
45 | Network Trash Folder
46 | Temporary Items
47 | .apdisk
48 |
49 | ### Node ###
50 | # Logs
51 | logs
52 | *.log
53 | npm-debug.log*
54 | yarn-debug.log*
55 | yarn-error.log*
56 | lerna-debug.log*
57 | .pnpm-debug.log*
58 |
59 | # Diagnostic reports (https://nodejs.org/api/report.html)
60 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
61 |
62 | # Runtime data
63 | pids
64 | *.pid
65 | *.seed
66 | *.pid.lock
67 |
68 | # Directory for instrumented libs generated by jscoverage/JSCover
69 | lib-cov
70 |
71 | # Coverage directory used by tools like istanbul
72 | coverage
73 | *.lcov
74 |
75 | # nyc test coverage
76 | .nyc_output
77 |
78 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
79 | .grunt
80 |
81 | # Bower dependency directory (https://bower.io/)
82 | bower_components
83 |
84 | # node-waf configuration
85 | .lock-wscript
86 |
87 | # Compiled binary addons (https://nodejs.org/api/addons.html)
88 | build/Release
89 |
90 | # Dependency directories
91 | node_modules/
92 | jspm_packages/
93 |
94 | # Snowpack dependency directory (https://snowpack.dev/)
95 | web_modules/
96 |
97 | # TypeScript cache
98 | *.tsbuildinfo
99 |
100 | # Optional npm cache directory
101 | .npm
102 |
103 | # Optional eslint cache
104 | .eslintcache
105 |
106 | # Microbundle cache
107 | .rpt2_cache/
108 | .rts2_cache_cjs/
109 | .rts2_cache_es/
110 | .rts2_cache_umd/
111 |
112 | # Optional REPL history
113 | .node_repl_history
114 |
115 | # Output of 'npm pack'
116 | *.tgz
117 |
118 | # Yarn Integrity file
119 | .yarn-integrity
120 |
121 | # dotenv environment variables file
122 | .env
123 | .env.test
124 | .env.production
125 |
126 | # parcel-bundler cache (https://parceljs.org/)
127 | .cache
128 | .parcel-cache
129 |
130 | # Next.js build output
131 | .next
132 | out
133 |
134 | # Nuxt.js build / generate output
135 | .nuxt
136 | dist
137 |
138 | # Gatsby files
139 | .cache/
140 | # Comment in the public line in if your project uses Gatsby and not Next.js
141 | # https://nextjs.org/blog/next-9-1#public-directory-support
142 | # public
143 |
144 | # vuepress build output
145 | .vuepress/dist
146 |
147 | # Serverless directories
148 | .serverless/
149 |
150 | # FuseBox cache
151 | .fusebox/
152 |
153 | # DynamoDB Local files
154 | .dynamodb/
155 |
156 | # TernJS port file
157 | .tern-port
158 |
159 | # Stores VSCode versions used for testing VSCode extensions
160 | .vscode-test
161 |
162 | # yarn v2
163 | .yarn/cache
164 | .yarn/unplugged
165 | .yarn/build-state.yml
166 | .yarn/install-state.gz
167 | .pnp.*
168 |
169 | ### Windows ###
170 | # Windows thumbnail cache files
171 | Thumbs.db
172 | Thumbs.db:encryptable
173 | ehthumbs.db
174 | ehthumbs_vista.db
175 |
176 | # Dump file
177 | *.stackdump
178 |
179 | # Folder config file
180 | [Dd]esktop.ini
181 |
182 | # Recycle Bin used on file shares
183 | $RECYCLE.BIN/
184 |
185 | # Windows Installer files
186 | *.cab
187 | *.msi
188 | *.msix
189 | *.msm
190 | *.msp
191 |
192 | # Windows shortcuts
193 | *.lnk
194 |
195 | # End of https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux
196 |
197 | ql
198 |
199 | node_modules
200 | .DS_Store
201 | dist
202 | dist-ssr
203 | *.local
204 | /backend/src/db/*
205 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.idea/git_toolbox_prj.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/.idea/jsLibraryMappings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/sven_ninja.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2 | Version 2, December 2004
3 |
4 | Copyright (C) [year] [fullname]
5 |
6 | Everyone is permitted to copy and distribute verbatim or modified
7 | copies of this license document, and changing it is allowed as long
8 | as the name is changed.
9 |
10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12 |
13 | 0. You just DO WHAT THE FUCK YOU WANT TO.
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Ninja
3 |
4 | Ninja是一个青龙面板的环境变量添加工具,通过调用青龙面板开放的OpenApi即可实现无需登录青龙面板对环境变量进行控制。本版本Ninja由作者从Waikiki版本修改而来,主要修改的内容如下:
5 |
6 | * 抛弃原先的使用读取青龙`auth.json`获取调用权限,改用OpenApi方式获取远程调用权限(适配高版本,并且解决以往需要固定时间登陆一次青龙容器问题,否则获取不到容量)
7 | * 移除WSKEY添加功能
8 | * 修改添加CK的逻辑,改为先注册后登录,再去添加CK;
9 |
10 | ### 由于本版本无需密码只需要用户名就可以登录,他人在知晓用户名的情况下可以肆意删除或禁用CK(并不会泄露CK,无法看见变量内容),所以并不推荐大面积的使用,仅推荐个人的小范围使用。
11 | ### 仅用于向青龙面板添加固定格式的变量,切勿用于其他用途。一旦使用并复制了本仓库的项目,则视为您已接受下方特别声明。
12 |
13 | ### 本版本功能列表
14 |
15 | - [x] **支持管理员自定义提示信息功能**
16 | - [x] **支持系统管理功能,控制可用数量,功能的开启与关闭等各项设置**
17 | - [x] **支持用户禁用和启用变量**
18 | - [x] **自动登录验证加密后的用户名,保证账号安全**
19 | - [x] 支持用户注册并登录
20 | - [x] 支持用户查看CK的禁用和启用状态
21 | - [x] 支持用户删除账号
22 | - [x] 支持Cookie添加功能
23 |
24 |
25 | ## 致谢
26 |
27 | 感谢Ninja原作者:@MoonBegonia
28 |
29 | 仓库地址:https://github.com/MoonBegonia/ninja
30 |
31 | 基于@Waikiki版本修改:
32 |
33 | 仓库地址:https://github.com/Waikkii/Waikiki_ninja
34 |
35 |
36 | ## 文档
37 |
38 | ### Ninja 环境变量
39 |
40 | 目前支持的环境变量有:
41 |
42 | - `CLIENT_ID`:青龙授权id(必填)
43 | - `CLIENT_SECRET`:青龙授权密码(必填)
44 | - `ALLOW_ADD`: 是否允许添加账号 不允许添加时则只允许已有账号登录(默认 开启为`true`)
45 | - `ALLOW_NUM`: 允许添加账号的最大数量(默认 `20`)
46 | - `NINJA_PORT`: Ninja 运行端口(默认 `5701`)
47 | - `ALLOW_ADMIN`: 是否开启管理员账号(默认 开启为`true`,`false`关闭)
48 | - `ADMIN_USERNAME`: 管理员账号(默认 `admin`)
49 | - `ADMIN_PASSWORD`: 管理员密码(默认 `123456`)
50 | - `USERNAME_SALT`: 用户名加密密钥(默认`ninja123`)
51 |
52 | 变量特别说明
53 | - `USERNAME_SALT`: 强烈建议修改此项,内容可以随意填写,但是长度必须为8的倍数 8,16,24,32... 系统将根据该值来对用户名进行加密
54 | - `ALLOW_ADMIN`: 默认关闭,建议开启,开启后通过环境变量中配置的管理员账号密码登录后可以进入到管理页面对Ninja系统进行管理,自定义提示信息,开启后注意要修改环境变量中的管理员账号密码,以防被别人利用。
55 | - `CLIENT_ID`,`CLIENT_SECRET`: 在青龙控制面板的 `系统设置-应用设置-新建应用` 添加用于Ninja的授权信息,给予Ninja环境变量的访问权限。
56 |
57 | 配置方式:
58 |
59 | ```bash
60 | cd /ql/ninja/backend
61 | cp .env.example .env
62 | vi .env
63 | pm2 start
64 | ```
65 |
66 | **修改完成后需要 `pm2 start` 重启生效 !!!**
67 |
68 | ### Ninja部署到Docker
69 |
70 | 1. 容器映射 5701 端口,ninja 目录至宿主机
71 |
72 | 例(docker-compose):
73 |
74 | ```diff
75 | version: "3"
76 | services:
77 | qinglong:
78 | image: whyour/qinglong:latest
79 | container_name: qinglong
80 | restart: unless-stopped
81 | tty: true
82 | ports:
83 | - 5700:5700
84 | + - 5701:5701
85 | environment:
86 | - ENABLE_HANGUP=true
87 | - ENABLE_WEB_PANEL=true
88 | volumes:
89 | - ./config:/ql/config
90 | - ./log:/ql/log
91 | - ./db:/ql/db
92 | - ./repo:/ql/repo
93 | - ./raw:/ql/raw
94 | - ./scripts:/ql/scripts
95 | - ./jbot:/ql/jbot
96 | + - ./ninja:/ql/ninja
97 | ```
98 |
99 | 例(docker-run):
100 |
101 | ```diff
102 | docker run -dit \
103 | -v $PWD/ql/config:/ql/config \
104 | -v $PWD/ql/log:/ql/log \
105 | -v $PWD/ql/db:/ql/db \
106 | -v $PWD/ql/repo:/ql/repo \
107 | -v $PWD/ql/raw:/ql/raw \
108 | -v $PWD/ql/scripts:/ql/scripts \
109 | -v $PWD/ql/jbot:/ql/jbot \
110 | + -v $PWD/ql/ninja:/ql/ninja \
111 | -p 5700:5700 \
112 | + -p 5701:5701 \
113 | --name qinglong \
114 | --hostname qinglong \
115 | --restart unless-stopped \
116 | whyour/qinglong:latest
117 | ```
118 |
119 | 2. 进入青龙容器内执行以下命令
120 |
121 | 进入容器命令 `docker exec -it qinglong bash` 需要对应容器名
122 |
123 | ```bash
124 | git clone https://github.com/SvenShi/sven_ninja.git /ql/ninja
125 | cd /ql/ninja/backend
126 | pnpm install
127 | cp .env.example .env
128 | ```
129 | 3. 修改环境变量(可以跳过,启动之后进入页面中设置)
130 |
131 | 打开环境变量配置文件
132 | ```bash
133 | vi .env
134 | ```
135 |
136 | 在 `.env` 文件中添加以下内容:
137 |
138 | ```bash
139 | QL_URL=http://localhost:5700 #青龙端口如果为5700 则无需添加此变量
140 | ```
141 | 在 `.env` 文件中修改以下内容:
142 | ```bash
143 | #青龙授权令牌 在青龙容器设置中获取
144 | CLIENT_ID=***********
145 | CLIENT_SECRET=********
146 | #用户名加密密钥,强烈建议修改 可以随意填写任何内容但是长度必须为8的倍数 8 16 24 32 系统将根据该值来对用户名进行加密
147 | USERNAME_SALT:ninja123
148 | ```
149 |
150 | 4. 启动Ninja
151 | ```bash
152 | pm2 start
153 | ```
154 |
155 | 5. 将以下内容粘贴到 `extra.sh`(重启后自动更新并启动 Ninja)
156 |
157 | 可在青龙面板的配置文件菜单中找到`extra.sh`
158 |
159 | ```bash
160 | cd /ql/ninja/backend
161 | git checkout .
162 | git pull
163 | pnpm install
164 | pm2 start
165 | ```
166 |
167 | ## 注意事项
168 |
169 | - 重启后务必执行一次 `ql extra` 保证 Ninja 配置成功。
170 |
171 | - 更新 Ninja 只需要在**容器**中 `ninja/backend` 目录执行 `git pull` 然后 `pm2 start`
172 |
173 | ## 如何更新Ninja
174 |
175 | ```bash
176 | cd /ql/ninja
177 | git checkout .
178 | git pull
179 | cd backend
180 | pnpm install
181 | pm2 start
182 | ```
183 |
184 | ## 如何删除Ninja
185 |
186 | ```bash
187 | cd /ql/ninja
188 | pm2 delete ninja
189 | rm -rf *
190 | rm -r ./.*
191 | ```
192 |
193 |
194 | ## 特别声明
195 |
196 | * 本项目仅为作者空闲时间开发的个人学习研究vue3的青龙变量添加工具。
197 |
198 | * 本仓库涉仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
199 |
200 | * 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。
201 |
202 | * 作者对任何代码问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。
203 |
204 | * 间接使用本仓库搭建的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 作者对于由此引起的任何隐私泄漏或其他后果概不负责。
205 |
206 | * 请勿将本项目的任何内容用于商业或非法目的,否则后果自负。
207 |
208 | * 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关代码。
209 |
210 | * 任何以任何方式查看此项目的人或直接或间接使用本仓库项目的使用者都应仔细阅读此声明。作者保留随时更改或补充此免责声明的权利。**一旦使用并复制了本仓库的项目,则视为您已接受此免责声明。**
211 |
212 | **您必须在下载后的24小时内从计算机或手机中完全删除以上内容。**
213 |
214 | > ***您使用或者复制了本仓库且本人制作的项目,则视为`已接受`此声明,请仔细阅读***
215 |
--------------------------------------------------------------------------------
/backend/.env.example:
--------------------------------------------------------------------------------
1 | # 是否允许添加账号 不允许添加时则只允许已有账号登录
2 | ALLOW_ADD=true
3 |
4 | # 允许添加账号的最大数量
5 | ALLOW_NUM=20
6 |
7 | # 青龙权限密码
8 | CLIENT_ID=********
9 | CLIENT_SECRET=******
10 |
11 | # 是否开启管理员账号 true 开启 false 关闭
12 | ALLOW_ADMIN=true
13 |
14 | # 用户名加密密钥 强烈建议修改此项配置 可以随意填写任何内容但是长度必须为8的倍数 8 16 24 32 系统将根据该值来对用户名进行加密
15 | USERNAME_SALT=ninja123
16 |
17 | # 管理员账号
18 | ADMIN_USERNAME=admin
19 | # 管理员密码
20 | ADMIN_PASSWORD=123456
21 |
22 | # Ninja 运行端口
23 | NINJA_PORT=5701
24 |
--------------------------------------------------------------------------------
/backend/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node,windows,macos,linux
4 |
5 | ### Linux ###
6 | *~
7 |
8 | # temporary files which can be created if a process still has a handle open of a deleted file
9 | .fuse_hidden*
10 |
11 | # KDE directory preferences
12 | .directory
13 |
14 | # Linux trash folder which might appear on any partition or disk
15 | .Trash-*
16 |
17 | # .nfs files are created when an open file is removed but is still being accessed
18 | .nfs*
19 |
20 | ### macOS ###
21 | # General
22 | .DS_Store
23 | .AppleDouble
24 | .LSOverride
25 |
26 | # Icon must end with two \r
27 | Icon
28 |
29 |
30 | # Thumbnails
31 | ._*
32 |
33 | # Files that might appear in the root of a volume
34 | .DocumentRevisions-V100
35 | .fseventsd
36 | .Spotlight-V100
37 | .TemporaryItems
38 | .Trashes
39 | .VolumeIcon.icns
40 | .com.apple.timemachine.donotpresent
41 |
42 | # Directories potentially created on remote AFP share
43 | .AppleDB
44 | .AppleDesktop
45 | Network Trash Folder
46 | Temporary Items
47 | .apdisk
48 |
49 | ### Node ###
50 | # Logs
51 | logs
52 | *.log
53 | npm-debug.log*
54 | yarn-debug.log*
55 | yarn-error.log*
56 | lerna-debug.log*
57 | .pnpm-debug.log*
58 |
59 | # Diagnostic reports (https://nodejs.org/api/report.html)
60 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
61 |
62 | # Runtime data
63 | pids
64 | *.pid
65 | *.seed
66 | *.pid.lock
67 |
68 | # Directory for instrumented libs generated by jscoverage/JSCover
69 | lib-cov
70 |
71 | # Coverage directory used by tools like istanbul
72 | coverage
73 | *.lcov
74 |
75 | # nyc test coverage
76 | .nyc_output
77 |
78 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
79 | .grunt
80 |
81 | # Bower dependency directory (https://bower.io/)
82 | bower_components
83 |
84 | # node-waf configuration
85 | .lock-wscript
86 |
87 | # Compiled binary addons (https://nodejs.org/api/addons.html)
88 | build/Release
89 |
90 | # Dependency directories
91 | node_modules/
92 | jspm_packages/
93 |
94 | # Snowpack dependency directory (https://snowpack.dev/)
95 | web_modules/
96 |
97 | # TypeScript cache
98 | *.tsbuildinfo
99 |
100 | # Optional npm cache directory
101 | .npm
102 |
103 | # Optional eslint cache
104 | .eslintcache
105 |
106 | # Microbundle cache
107 | .rpt2_cache/
108 | .rts2_cache_cjs/
109 | .rts2_cache_es/
110 | .rts2_cache_umd/
111 |
112 | # Optional REPL history
113 | .node_repl_history
114 |
115 | # Output of 'npm pack'
116 | *.tgz
117 |
118 | # Yarn Integrity file
119 | .yarn-integrity
120 |
121 | # dotenv environment variables file
122 | .env
123 | .env.test
124 | .env.production
125 |
126 | # parcel-bundler cache (https://parceljs.org/)
127 | .cache
128 | .parcel-cache
129 |
130 | # Next.js build output
131 | .next
132 | out
133 |
134 | # Nuxt.js build / generate output
135 | .nuxt
136 | dist
137 |
138 | # Gatsby files
139 | .cache/
140 | # Comment in the public line in if your project uses Gatsby and not Next.js
141 | # https://nextjs.org/blog/next-9-1#public-directory-support
142 | # public
143 |
144 | # vuepress build output
145 | .vuepress/dist
146 |
147 | # Serverless directories
148 | .serverless/
149 |
150 | # FuseBox cache
151 | .fusebox/
152 |
153 | # DynamoDB Local files
154 | .dynamodb/
155 |
156 | # TernJS port file
157 | .tern-port
158 |
159 | # Stores VSCode versions used for testing VSCode extensions
160 | .vscode-test
161 |
162 | # yarn v2
163 | .yarn/cache
164 | .yarn/unplugged
165 | .yarn/build-state.yml
166 | .yarn/install-state.gz
167 | .pnp.*
168 |
169 | ### Windows ###
170 | # Windows thumbnail cache files
171 | Thumbs.db
172 | Thumbs.db:encryptable
173 | ehthumbs.db
174 | ehthumbs_vista.db
175 |
176 | # Dump file
177 | *.stackdump
178 |
179 | # Folder config file
180 | [Dd]esktop.ini
181 |
182 | # Recycle Bin used on file shares
183 | $RECYCLE.BIN/
184 |
185 | # Windows Installer files
186 | *.cab
187 | *.msi
188 | *.msix
189 | *.msm
190 | *.msp
191 |
192 | # Windows shortcuts
193 | *.lnk
194 |
195 | # End of https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux
196 |
197 | ql
198 |
--------------------------------------------------------------------------------
/backend/app.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const Koa = require('koa');
4 | const cors = require('@koa/cors');
5 | const Router = require('@koa/router');
6 | const body = require('koa-body');
7 | const serve = require('koa-static');
8 | const User = require('./src/service/user');
9 | const Content = require('./src/service/Content')
10 | const packageJson = require('./package.json');
11 |
12 | // Create express instance
13 | const app = new Koa();
14 | const router = new Router();
15 |
16 | const handler = async (ctx, next) => {
17 | try {
18 | await next();
19 | } catch (err) {
20 | console.log(err);
21 | ctx.status = 200;
22 | ctx.body = {
23 | code: err.status || err.statusCode || 500, msg: err.message,
24 | };
25 | }
26 | };
27 |
28 | app.use(serve('static'));
29 | app.use(cors());
30 | app.use(handler);
31 | app.use(router.routes()).use(router.allowedMethods());
32 |
33 | router.get('/api/status', (ctx) => {
34 | ctx.body = {
35 | code: 200, data: {
36 | version: packageJson.version,
37 | }, msg: 'Ninja is already.',
38 | };
39 | });
40 |
41 | router.get('/api/info', async (ctx) => {
42 | ctx.body = await User.getPoolInfo();
43 | });
44 |
45 | router.post('/api/login', body(), async (ctx) => {
46 | ctx.body = await new User(ctx.request.body).login()
47 | });
48 |
49 | router.post('/api/register', body(), async (ctx) => {
50 | ctx.body = await new User(ctx.request.body).register();
51 | });
52 |
53 | router.get('/api/userinfo', async (ctx) => {
54 | ctx.body = await new User({eid: ctx.query.eid, encryptUsername: ctx.query.encryptUsername}).getUserInfoByEid();
55 | });
56 |
57 |
58 | router.post('/api/delete', body(), async (ctx) => {
59 | ctx.body = await new User({eid: ctx.request.body.eid}).delUserByEid();
60 | });
61 |
62 | router.post('/api/update', body(), async (ctx) => {
63 | const body = ctx.request.body;
64 | const eid = body.eid;
65 | const username = body.username;
66 | const ck = body.ck;
67 | ctx.body = await new User({eid, ck, username}).update();
68 | });
69 |
70 | router.post('/api/disable', body(), async (ctx) => {
71 | const body = ctx.request.body;
72 | const eid = body.eid;
73 | ctx.body = await new User({eid}).disableEnv();
74 | });
75 |
76 |
77 | router.post('/api/enable', body(), async (ctx) => {
78 | const body = ctx.request.body;
79 | const eid = body.eid;
80 | ctx.body = await new User({eid}).enableEnv();
81 | });
82 |
83 | router.post('/api/verifyToken', body(), async (ctx) => {
84 | const body = ctx.request.body;
85 | const token = body.token;
86 | ctx.body = await new User({token}).verifyToken();
87 | });
88 |
89 |
90 | router.get('/api/getContent', async (ctx) => {
91 | ctx.body = await Content.getAllContent()
92 | });
93 |
94 |
95 | router.post('/api/setContent', body(), async (ctx) => {
96 | const body = ctx.request.body;
97 | ctx.body = Content.updateContent(body)
98 | });
99 |
100 | router.get('/api/getAllConfig', async (ctx) => {
101 | const query = ctx.query;
102 | const token = query.token;
103 | ctx.body = await new User({token}).getAllConfig();
104 | });
105 |
106 |
107 |
108 | router.post('/api/saveConfig', body(), async (ctx) => {
109 | const body = ctx.request.body;
110 | ctx.body = await new User({token: body.token}).saveConfig(body);
111 | });
112 |
113 |
114 | const port = process.env.NINJA_PORT || 5701;
115 | console.log('Start Ninja success! listening port: ' + port);
116 | app.listen(port);
117 |
--------------------------------------------------------------------------------
/backend/ecosystem.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | apps: [
3 | {
4 | name: 'ninja',
5 | script: './app.js',
6 | },
7 | ],
8 | };
9 |
--------------------------------------------------------------------------------
/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "22.06.26",
3 | "scripts": {
4 | "dev": "nodemon --ignore db/ app.js"
5 | },
6 | "engines": {
7 | "node": ">=14"
8 | },
9 | "dependencies": {
10 | "@koa/cors": "^3.1.0",
11 | "@koa/router": "^10.1.0",
12 | "axios": "^0.21.1",
13 | "crypto-js": "^4.1.1",
14 | "dotenv": "^10.0.0",
15 | "got": "^11.8.2",
16 | "koa": "^2.13.1",
17 | "koa-body": "^4.2.0",
18 | "koa-log4": "^2.3.2",
19 | "koa-static": "^5.0.0",
20 | "nodemon": "^2.0.18",
21 | "uuid": "^8.3.2"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/backend/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@koa/cors': ^3.1.0
5 | '@koa/router': ^10.1.0
6 | axios: ^0.21.1
7 | dotenv: ^10.0.0
8 | got: ^11.8.2
9 | koa: ^2.13.1
10 | koa-body: ^4.2.0
11 | koa-log4: ^2.3.2
12 | koa-static: ^5.0.0
13 | nodemon: ^2.0.12
14 | qrcode: ^1.4.4
15 |
16 | dependencies:
17 | '@koa/cors': 3.1.0
18 | '@koa/router': 10.1.0
19 | axios: 0.21.1
20 | dotenv: 10.0.0
21 | got: 11.8.2
22 | koa: 2.13.1
23 | koa-body: 4.2.0
24 | koa-log4: 2.3.2
25 | koa-static: 5.0.0
26 | nodemon: 2.0.12
27 | qrcode: 1.4.4
28 |
29 | packages:
30 |
31 | /@koa/cors/3.1.0:
32 | resolution: {integrity: sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==}
33 | engines: {node: '>= 8.0.0'}
34 | dependencies:
35 | vary: 1.1.2
36 | dev: false
37 |
38 | /@koa/router/10.1.0:
39 | resolution: {integrity: sha512-QZiCDn8Fd9vVN0qCWw81fToF5GMdtyPD04fIOHXiCCmXB6sznhjHMd3xbVS2ZxrgLWrcN8s6tIItEv0wuXt2Ow==}
40 | engines: {node: '>= 8.0.0'}
41 | dependencies:
42 | debug: 4.3.2
43 | http-errors: 1.8.0
44 | koa-compose: 4.1.0
45 | methods: 1.1.2
46 | path-to-regexp: 6.2.0
47 | transitivePeerDependencies:
48 | - supports-color
49 | dev: false
50 |
51 | /@sindresorhus/is/0.14.0:
52 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
53 | engines: {node: '>=6'}
54 | dev: false
55 |
56 | /@sindresorhus/is/4.0.1:
57 | resolution: {integrity: sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==}
58 | engines: {node: '>=10'}
59 | dev: false
60 |
61 | /@szmarczak/http-timer/1.1.2:
62 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==}
63 | engines: {node: '>=6'}
64 | dependencies:
65 | defer-to-connect: 1.1.3
66 | dev: false
67 |
68 | /@szmarczak/http-timer/4.0.6:
69 | resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
70 | engines: {node: '>=10'}
71 | dependencies:
72 | defer-to-connect: 2.0.1
73 | dev: false
74 |
75 | /@types/cacheable-request/6.0.2:
76 | resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==}
77 | dependencies:
78 | '@types/http-cache-semantics': 4.0.1
79 | '@types/keyv': 3.1.2
80 | '@types/node': 16.4.3
81 | '@types/responselike': 1.0.0
82 | dev: false
83 |
84 | /@types/formidable/1.2.3:
85 | resolution: {integrity: sha512-Ibu3TyzldPvzTK1yus5+uPDwN5m6pXCcO0c0rPKA1uce5ERjqP5AX9reKEqQFVlCScqjbQgitIQEOLlb6qd7Sw==}
86 | dependencies:
87 | '@types/node': 16.4.3
88 | dev: false
89 |
90 | /@types/http-cache-semantics/4.0.1:
91 | resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
92 | dev: false
93 |
94 | /@types/keyv/3.1.2:
95 | resolution: {integrity: sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==}
96 | dependencies:
97 | '@types/node': 16.4.3
98 | dev: false
99 |
100 | /@types/node/16.4.3:
101 | resolution: {integrity: sha512-GKM4FLMkWDc0sfx7tXqPWkM6NBow1kge0fgQh0bOnlqo4iT1kvTvMEKE0c1RtUGnbLlGRXiAA8SumE//90uKAg==}
102 | dev: false
103 |
104 | /@types/responselike/1.0.0:
105 | resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
106 | dependencies:
107 | '@types/node': 16.4.3
108 | dev: false
109 |
110 | /abbrev/1.1.1:
111 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
112 | dev: false
113 |
114 | /accepts/1.3.7:
115 | resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==}
116 | engines: {node: '>= 0.6'}
117 | dependencies:
118 | mime-types: 2.1.31
119 | negotiator: 0.6.2
120 | dev: false
121 |
122 | /ansi-align/3.0.0:
123 | resolution: {integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==}
124 | dependencies:
125 | string-width: 3.1.0
126 | dev: false
127 |
128 | /ansi-regex/4.1.0:
129 | resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==}
130 | engines: {node: '>=6'}
131 | dev: false
132 |
133 | /ansi-regex/5.0.0:
134 | resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==}
135 | engines: {node: '>=8'}
136 | dev: false
137 |
138 | /ansi-styles/3.2.1:
139 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
140 | engines: {node: '>=4'}
141 | dependencies:
142 | color-convert: 1.9.3
143 | dev: false
144 |
145 | /ansi-styles/4.3.0:
146 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
147 | engines: {node: '>=8'}
148 | dependencies:
149 | color-convert: 2.0.1
150 | dev: false
151 |
152 | /any-promise/1.3.0:
153 | resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=}
154 | dev: false
155 |
156 | /anymatch/3.1.2:
157 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
158 | engines: {node: '>= 8'}
159 | dependencies:
160 | normalize-path: 3.0.0
161 | picomatch: 2.3.0
162 | dev: false
163 |
164 | /axios/0.21.1:
165 | resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==}
166 | dependencies:
167 | follow-redirects: 1.14.1
168 | transitivePeerDependencies:
169 | - debug
170 | dev: false
171 |
172 | /balanced-match/1.0.2:
173 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
174 | dev: false
175 |
176 | /base64-js/1.5.1:
177 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
178 | dev: false
179 |
180 | /binary-extensions/2.2.0:
181 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
182 | engines: {node: '>=8'}
183 | dev: false
184 |
185 | /boxen/4.2.0:
186 | resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==}
187 | engines: {node: '>=8'}
188 | dependencies:
189 | ansi-align: 3.0.0
190 | camelcase: 5.3.1
191 | chalk: 3.0.0
192 | cli-boxes: 2.2.1
193 | string-width: 4.2.2
194 | term-size: 2.2.1
195 | type-fest: 0.8.1
196 | widest-line: 3.1.0
197 | dev: false
198 |
199 | /brace-expansion/1.1.11:
200 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
201 | dependencies:
202 | balanced-match: 1.0.2
203 | concat-map: 0.0.1
204 | dev: false
205 |
206 | /braces/3.0.2:
207 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
208 | engines: {node: '>=8'}
209 | dependencies:
210 | fill-range: 7.0.1
211 | dev: false
212 |
213 | /buffer-alloc-unsafe/1.1.0:
214 | resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
215 | dev: false
216 |
217 | /buffer-alloc/1.2.0:
218 | resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
219 | dependencies:
220 | buffer-alloc-unsafe: 1.1.0
221 | buffer-fill: 1.0.0
222 | dev: false
223 |
224 | /buffer-fill/1.0.0:
225 | resolution: {integrity: sha1-+PeLdniYiO858gXNY39o5wISKyw=}
226 | dev: false
227 |
228 | /buffer-from/1.1.1:
229 | resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==}
230 | dev: false
231 |
232 | /buffer/5.7.1:
233 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
234 | dependencies:
235 | base64-js: 1.5.1
236 | ieee754: 1.2.1
237 | dev: false
238 |
239 | /bytes/3.1.0:
240 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
241 | engines: {node: '>= 0.8'}
242 | dev: false
243 |
244 | /cache-content-type/1.0.1:
245 | resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==}
246 | engines: {node: '>= 6.0.0'}
247 | dependencies:
248 | mime-types: 2.1.31
249 | ylru: 1.2.1
250 | dev: false
251 |
252 | /cacheable-lookup/5.0.4:
253 | resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
254 | engines: {node: '>=10.6.0'}
255 | dev: false
256 |
257 | /cacheable-request/6.1.0:
258 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==}
259 | engines: {node: '>=8'}
260 | dependencies:
261 | clone-response: 1.0.2
262 | get-stream: 5.2.0
263 | http-cache-semantics: 4.1.0
264 | keyv: 3.1.0
265 | lowercase-keys: 2.0.0
266 | normalize-url: 4.5.1
267 | responselike: 1.0.2
268 | dev: false
269 |
270 | /cacheable-request/7.0.2:
271 | resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==}
272 | engines: {node: '>=8'}
273 | dependencies:
274 | clone-response: 1.0.2
275 | get-stream: 5.2.0
276 | http-cache-semantics: 4.1.0
277 | keyv: 4.0.3
278 | lowercase-keys: 2.0.0
279 | normalize-url: 6.1.0
280 | responselike: 2.0.0
281 | dev: false
282 |
283 | /call-bind/1.0.2:
284 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
285 | dependencies:
286 | function-bind: 1.1.1
287 | get-intrinsic: 1.1.1
288 | dev: false
289 |
290 | /camelcase/5.3.1:
291 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
292 | engines: {node: '>=6'}
293 | dev: false
294 |
295 | /chalk/3.0.0:
296 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
297 | engines: {node: '>=8'}
298 | dependencies:
299 | ansi-styles: 4.3.0
300 | supports-color: 7.2.0
301 | dev: false
302 |
303 | /chokidar/3.5.2:
304 | resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==}
305 | engines: {node: '>= 8.10.0'}
306 | dependencies:
307 | anymatch: 3.1.2
308 | braces: 3.0.2
309 | glob-parent: 5.1.2
310 | is-binary-path: 2.1.0
311 | is-glob: 4.0.1
312 | normalize-path: 3.0.0
313 | readdirp: 3.6.0
314 | optionalDependencies:
315 | fsevents: registry.npmmirror.com/fsevents/2.3.2
316 | dev: false
317 |
318 | /ci-info/2.0.0:
319 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
320 | dev: false
321 |
322 | /circular-json/0.5.9:
323 | resolution: {integrity: sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==}
324 | deprecated: CircularJSON is in maintenance only, flatted is its successor.
325 | dev: false
326 |
327 | /cli-boxes/2.2.1:
328 | resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
329 | engines: {node: '>=6'}
330 | dev: false
331 |
332 | /cliui/5.0.0:
333 | resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
334 | dependencies:
335 | string-width: 3.1.0
336 | strip-ansi: 5.2.0
337 | wrap-ansi: 5.1.0
338 | dev: false
339 |
340 | /clone-response/1.0.2:
341 | resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=}
342 | dependencies:
343 | mimic-response: 1.0.1
344 | dev: false
345 |
346 | /co-body/5.2.0:
347 | resolution: {integrity: sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ==}
348 | dependencies:
349 | inflation: 2.0.0
350 | qs: 6.10.1
351 | raw-body: 2.4.1
352 | type-is: 1.6.18
353 | dev: false
354 |
355 | /co/4.6.0:
356 | resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=}
357 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
358 | dev: false
359 |
360 | /color-convert/1.9.3:
361 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
362 | dependencies:
363 | color-name: 1.1.3
364 | dev: false
365 |
366 | /color-convert/2.0.1:
367 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
368 | engines: {node: '>=7.0.0'}
369 | dependencies:
370 | color-name: 1.1.4
371 | dev: false
372 |
373 | /color-name/1.1.3:
374 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
375 | dev: false
376 |
377 | /color-name/1.1.4:
378 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
379 | dev: false
380 |
381 | /concat-map/0.0.1:
382 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
383 | dev: false
384 |
385 | /configstore/5.0.1:
386 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
387 | engines: {node: '>=8'}
388 | dependencies:
389 | dot-prop: 5.3.0
390 | graceful-fs: 4.2.6
391 | make-dir: 3.1.0
392 | unique-string: 2.0.0
393 | write-file-atomic: 3.0.3
394 | xdg-basedir: 4.0.0
395 | dev: false
396 |
397 | /content-disposition/0.5.3:
398 | resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==}
399 | engines: {node: '>= 0.6'}
400 | dependencies:
401 | safe-buffer: 5.1.2
402 | dev: false
403 |
404 | /content-type/1.0.4:
405 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
406 | engines: {node: '>= 0.6'}
407 | dev: false
408 |
409 | /cookies/0.8.0:
410 | resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==}
411 | engines: {node: '>= 0.8'}
412 | dependencies:
413 | depd: 2.0.0
414 | keygrip: 1.1.0
415 | dev: false
416 |
417 | /core-util-is/1.0.2:
418 | resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=}
419 | dev: false
420 |
421 | /crypto-random-string/2.0.0:
422 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
423 | engines: {node: '>=8'}
424 | dev: false
425 |
426 | /date-format/1.2.0:
427 | resolution: {integrity: sha1-YV6CjiM90aubua4JUODOzPpuytg=}
428 | engines: {node: '>=4.0'}
429 | dev: false
430 |
431 | /debug/2.6.9:
432 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
433 | dependencies:
434 | ms: 2.0.0
435 | dev: false
436 |
437 | /debug/3.1.0:
438 | resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
439 | dependencies:
440 | ms: 2.0.0
441 | dev: false
442 |
443 | /debug/3.2.7:
444 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
445 | dependencies:
446 | ms: 2.1.3
447 | dev: false
448 |
449 | /debug/4.3.2:
450 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
451 | engines: {node: '>=6.0'}
452 | peerDependencies:
453 | supports-color: '*'
454 | peerDependenciesMeta:
455 | supports-color:
456 | optional: true
457 | dependencies:
458 | ms: 2.1.2
459 | dev: false
460 |
461 | /decamelize/1.2.0:
462 | resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
463 | engines: {node: '>=0.10.0'}
464 | dev: false
465 |
466 | /decompress-response/3.3.0:
467 | resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=}
468 | engines: {node: '>=4'}
469 | dependencies:
470 | mimic-response: 1.0.1
471 | dev: false
472 |
473 | /decompress-response/6.0.0:
474 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
475 | engines: {node: '>=10'}
476 | dependencies:
477 | mimic-response: 3.1.0
478 | dev: false
479 |
480 | /deep-equal/1.0.1:
481 | resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=}
482 | dev: false
483 |
484 | /deep-extend/0.6.0:
485 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
486 | engines: {node: '>=4.0.0'}
487 | dev: false
488 |
489 | /defer-to-connect/1.1.3:
490 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==}
491 | dev: false
492 |
493 | /defer-to-connect/2.0.1:
494 | resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
495 | engines: {node: '>=10'}
496 | dev: false
497 |
498 | /delegates/1.0.0:
499 | resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=}
500 | dev: false
501 |
502 | /depd/1.1.2:
503 | resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
504 | engines: {node: '>= 0.6'}
505 | dev: false
506 |
507 | /depd/2.0.0:
508 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
509 | engines: {node: '>= 0.8'}
510 | dev: false
511 |
512 | /destroy/1.0.4:
513 | resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
514 | dev: false
515 |
516 | /dijkstrajs/1.0.2:
517 | resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==}
518 | dev: false
519 |
520 | /dot-prop/5.3.0:
521 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
522 | engines: {node: '>=8'}
523 | dependencies:
524 | is-obj: 2.0.0
525 | dev: false
526 |
527 | /dotenv/10.0.0:
528 | resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==}
529 | engines: {node: '>=10'}
530 | dev: false
531 |
532 | /duplexer3/0.1.4:
533 | resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=}
534 | dev: false
535 |
536 | /ee-first/1.1.1:
537 | resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
538 | dev: false
539 |
540 | /emoji-regex/7.0.3:
541 | resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
542 | dev: false
543 |
544 | /emoji-regex/8.0.0:
545 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
546 | dev: false
547 |
548 | /encodeurl/1.0.2:
549 | resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
550 | engines: {node: '>= 0.8'}
551 | dev: false
552 |
553 | /end-of-stream/1.4.4:
554 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
555 | dependencies:
556 | once: 1.4.0
557 | dev: false
558 |
559 | /escape-goat/2.1.1:
560 | resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==}
561 | engines: {node: '>=8'}
562 | dev: false
563 |
564 | /escape-html/1.0.3:
565 | resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
566 | dev: false
567 |
568 | /fill-range/7.0.1:
569 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
570 | engines: {node: '>=8'}
571 | dependencies:
572 | to-regex-range: 5.0.1
573 | dev: false
574 |
575 | /find-up/3.0.0:
576 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
577 | engines: {node: '>=6'}
578 | dependencies:
579 | locate-path: 3.0.0
580 | dev: false
581 |
582 | /follow-redirects/1.14.1:
583 | resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==}
584 | engines: {node: '>=4.0'}
585 | peerDependencies:
586 | debug: '*'
587 | peerDependenciesMeta:
588 | debug:
589 | optional: true
590 | dev: false
591 |
592 | /formidable/1.2.2:
593 | resolution: {integrity: sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==}
594 | dev: false
595 |
596 | /fresh/0.5.2:
597 | resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
598 | engines: {node: '>= 0.6'}
599 | dev: false
600 |
601 | /function-bind/1.1.1:
602 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
603 | dev: false
604 |
605 | /get-caller-file/2.0.5:
606 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
607 | engines: {node: 6.* || 8.* || >= 10.*}
608 | dev: false
609 |
610 | /get-intrinsic/1.1.1:
611 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==}
612 | dependencies:
613 | function-bind: 1.1.1
614 | has: 1.0.3
615 | has-symbols: 1.0.2
616 | dev: false
617 |
618 | /get-stream/4.1.0:
619 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
620 | engines: {node: '>=6'}
621 | dependencies:
622 | pump: 3.0.0
623 | dev: false
624 |
625 | /get-stream/5.2.0:
626 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
627 | engines: {node: '>=8'}
628 | dependencies:
629 | pump: 3.0.0
630 | dev: false
631 |
632 | /glob-parent/5.1.2:
633 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
634 | engines: {node: '>= 6'}
635 | dependencies:
636 | is-glob: 4.0.1
637 | dev: false
638 |
639 | /global-dirs/2.1.0:
640 | resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==}
641 | engines: {node: '>=8'}
642 | dependencies:
643 | ini: 1.3.7
644 | dev: false
645 |
646 | /got/11.8.2:
647 | resolution: {integrity: sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==}
648 | engines: {node: '>=10.19.0'}
649 | dependencies:
650 | '@sindresorhus/is': 4.0.1
651 | '@szmarczak/http-timer': 4.0.6
652 | '@types/cacheable-request': 6.0.2
653 | '@types/responselike': 1.0.0
654 | cacheable-lookup: 5.0.4
655 | cacheable-request: 7.0.2
656 | decompress-response: 6.0.0
657 | http2-wrapper: 1.0.3
658 | lowercase-keys: 2.0.0
659 | p-cancelable: 2.1.1
660 | responselike: 2.0.0
661 | dev: false
662 |
663 | /got/9.6.0:
664 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==}
665 | engines: {node: '>=8.6'}
666 | dependencies:
667 | '@sindresorhus/is': 0.14.0
668 | '@szmarczak/http-timer': 1.1.2
669 | cacheable-request: 6.1.0
670 | decompress-response: 3.3.0
671 | duplexer3: 0.1.4
672 | get-stream: 4.1.0
673 | lowercase-keys: 1.0.1
674 | mimic-response: 1.0.1
675 | p-cancelable: 1.1.0
676 | to-readable-stream: 1.0.0
677 | url-parse-lax: 3.0.0
678 | dev: false
679 |
680 | /graceful-fs/4.2.6:
681 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==}
682 | dev: false
683 |
684 | /has-flag/3.0.0:
685 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
686 | engines: {node: '>=4'}
687 | dev: false
688 |
689 | /has-flag/4.0.0:
690 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
691 | engines: {node: '>=8'}
692 | dev: false
693 |
694 | /has-symbols/1.0.2:
695 | resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==}
696 | engines: {node: '>= 0.4'}
697 | dev: false
698 |
699 | /has-yarn/2.1.0:
700 | resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==}
701 | engines: {node: '>=8'}
702 | dev: false
703 |
704 | /has/1.0.3:
705 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
706 | engines: {node: '>= 0.4.0'}
707 | dependencies:
708 | function-bind: 1.1.1
709 | dev: false
710 |
711 | /http-assert/1.4.1:
712 | resolution: {integrity: sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==}
713 | engines: {node: '>= 0.8'}
714 | dependencies:
715 | deep-equal: 1.0.1
716 | http-errors: 1.7.3
717 | dev: false
718 |
719 | /http-cache-semantics/4.1.0:
720 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
721 | dev: false
722 |
723 | /http-errors/1.6.3:
724 | resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=}
725 | engines: {node: '>= 0.6'}
726 | dependencies:
727 | depd: 1.1.2
728 | inherits: 2.0.3
729 | setprototypeof: 1.1.0
730 | statuses: 1.5.0
731 | dev: false
732 |
733 | /http-errors/1.7.3:
734 | resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
735 | engines: {node: '>= 0.6'}
736 | dependencies:
737 | depd: 1.1.2
738 | inherits: 2.0.4
739 | setprototypeof: 1.1.1
740 | statuses: 1.5.0
741 | toidentifier: 1.0.0
742 | dev: false
743 |
744 | /http-errors/1.8.0:
745 | resolution: {integrity: sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==}
746 | engines: {node: '>= 0.6'}
747 | dependencies:
748 | depd: 1.1.2
749 | inherits: 2.0.4
750 | setprototypeof: 1.2.0
751 | statuses: 1.5.0
752 | toidentifier: 1.0.0
753 | dev: false
754 |
755 | /http2-wrapper/1.0.3:
756 | resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
757 | engines: {node: '>=10.19.0'}
758 | dependencies:
759 | quick-lru: 5.1.1
760 | resolve-alpn: 1.2.0
761 | dev: false
762 |
763 | /iconv-lite/0.4.24:
764 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
765 | engines: {node: '>=0.10.0'}
766 | dependencies:
767 | safer-buffer: 2.1.2
768 | dev: false
769 |
770 | /ieee754/1.2.1:
771 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
772 | dev: false
773 |
774 | /ignore-by-default/1.0.1:
775 | resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=}
776 | dev: false
777 |
778 | /import-lazy/2.1.0:
779 | resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=}
780 | engines: {node: '>=4'}
781 | dev: false
782 |
783 | /imurmurhash/0.1.4:
784 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
785 | engines: {node: '>=0.8.19'}
786 | dev: false
787 |
788 | /inflation/2.0.0:
789 | resolution: {integrity: sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=}
790 | engines: {node: '>= 0.8.0'}
791 | dev: false
792 |
793 | /inherits/2.0.3:
794 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
795 | dev: false
796 |
797 | /inherits/2.0.4:
798 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
799 | dev: false
800 |
801 | /ini/1.3.7:
802 | resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==}
803 | dev: false
804 |
805 | /ini/1.3.8:
806 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
807 | dev: false
808 |
809 | /is-binary-path/2.1.0:
810 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
811 | engines: {node: '>=8'}
812 | dependencies:
813 | binary-extensions: 2.2.0
814 | dev: false
815 |
816 | /is-ci/2.0.0:
817 | resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
818 | hasBin: true
819 | dependencies:
820 | ci-info: 2.0.0
821 | dev: false
822 |
823 | /is-extglob/2.1.1:
824 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
825 | engines: {node: '>=0.10.0'}
826 | dev: false
827 |
828 | /is-fullwidth-code-point/2.0.0:
829 | resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=}
830 | engines: {node: '>=4'}
831 | dev: false
832 |
833 | /is-fullwidth-code-point/3.0.0:
834 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
835 | engines: {node: '>=8'}
836 | dev: false
837 |
838 | /is-generator-function/1.0.9:
839 | resolution: {integrity: sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==}
840 | engines: {node: '>= 0.4'}
841 | dev: false
842 |
843 | /is-glob/4.0.1:
844 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
845 | engines: {node: '>=0.10.0'}
846 | dependencies:
847 | is-extglob: 2.1.1
848 | dev: false
849 |
850 | /is-installed-globally/0.3.2:
851 | resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==}
852 | engines: {node: '>=8'}
853 | dependencies:
854 | global-dirs: 2.1.0
855 | is-path-inside: 3.0.3
856 | dev: false
857 |
858 | /is-npm/4.0.0:
859 | resolution: {integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==}
860 | engines: {node: '>=8'}
861 | dev: false
862 |
863 | /is-number/7.0.0:
864 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
865 | engines: {node: '>=0.12.0'}
866 | dev: false
867 |
868 | /is-obj/2.0.0:
869 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
870 | engines: {node: '>=8'}
871 | dev: false
872 |
873 | /is-path-inside/3.0.3:
874 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
875 | engines: {node: '>=8'}
876 | dev: false
877 |
878 | /is-typedarray/1.0.0:
879 | resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=}
880 | dev: false
881 |
882 | /is-yarn-global/0.3.0:
883 | resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==}
884 | dev: false
885 |
886 | /isarray/1.0.0:
887 | resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
888 | dev: false
889 |
890 | /isarray/2.0.5:
891 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
892 | dev: false
893 |
894 | /json-buffer/3.0.0:
895 | resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=}
896 | dev: false
897 |
898 | /json-buffer/3.0.1:
899 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
900 | dev: false
901 |
902 | /keygrip/1.1.0:
903 | resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
904 | engines: {node: '>= 0.6'}
905 | dependencies:
906 | tsscmp: 1.0.6
907 | dev: false
908 |
909 | /keyv/3.1.0:
910 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==}
911 | dependencies:
912 | json-buffer: 3.0.0
913 | dev: false
914 |
915 | /keyv/4.0.3:
916 | resolution: {integrity: sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==}
917 | dependencies:
918 | json-buffer: 3.0.1
919 | dev: false
920 |
921 | /koa-body/4.2.0:
922 | resolution: {integrity: sha512-wdGu7b9amk4Fnk/ytH8GuWwfs4fsB5iNkY8kZPpgQVb04QZSv85T0M8reb+cJmvLE8cjPYvBzRikD3s6qz8OoA==}
923 | dependencies:
924 | '@types/formidable': 1.2.3
925 | co-body: 5.2.0
926 | formidable: 1.2.2
927 | dev: false
928 |
929 | /koa-compose/3.2.1:
930 | resolution: {integrity: sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=}
931 | dependencies:
932 | any-promise: 1.3.0
933 | dev: false
934 |
935 | /koa-compose/4.1.0:
936 | resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==}
937 | dev: false
938 |
939 | /koa-convert/1.2.0:
940 | resolution: {integrity: sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=}
941 | engines: {node: '>= 4'}
942 | dependencies:
943 | co: 4.6.0
944 | koa-compose: 3.2.1
945 | dev: false
946 |
947 | /koa-log4/2.3.2:
948 | resolution: {integrity: sha512-1RXEvN+DlMgdEsVWW2MH8vZly9KGWdqryo6jmTWuVZWSmZEH/Hfp3lZ1SCtpD9Lmvkke5i6FzQrFucYUnmwFEQ==}
949 | dependencies:
950 | log4js: 3.0.6
951 | dev: false
952 |
953 | /koa-send/5.0.1:
954 | resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==}
955 | engines: {node: '>= 8'}
956 | dependencies:
957 | debug: 4.3.2
958 | http-errors: 1.8.0
959 | resolve-path: 1.4.0
960 | transitivePeerDependencies:
961 | - supports-color
962 | dev: false
963 |
964 | /koa-static/5.0.0:
965 | resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==}
966 | engines: {node: '>= 7.6.0'}
967 | dependencies:
968 | debug: 3.2.7
969 | koa-send: 5.0.1
970 | transitivePeerDependencies:
971 | - supports-color
972 | dev: false
973 |
974 | /koa/2.13.1:
975 | resolution: {integrity: sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==}
976 | engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4}
977 | dependencies:
978 | accepts: 1.3.7
979 | cache-content-type: 1.0.1
980 | content-disposition: 0.5.3
981 | content-type: 1.0.4
982 | cookies: 0.8.0
983 | debug: 3.1.0
984 | delegates: 1.0.0
985 | depd: 2.0.0
986 | destroy: 1.0.4
987 | encodeurl: 1.0.2
988 | escape-html: 1.0.3
989 | fresh: 0.5.2
990 | http-assert: 1.4.1
991 | http-errors: 1.8.0
992 | is-generator-function: 1.0.9
993 | koa-compose: 4.1.0
994 | koa-convert: 1.2.0
995 | on-finished: 2.3.0
996 | only: 0.0.2
997 | parseurl: 1.3.3
998 | statuses: 1.5.0
999 | type-is: 1.6.18
1000 | vary: 1.1.2
1001 | dev: false
1002 |
1003 | /latest-version/5.1.0:
1004 | resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==}
1005 | engines: {node: '>=8'}
1006 | dependencies:
1007 | package-json: 6.5.0
1008 | dev: false
1009 |
1010 | /locate-path/3.0.0:
1011 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
1012 | engines: {node: '>=6'}
1013 | dependencies:
1014 | p-locate: 3.0.0
1015 | path-exists: 3.0.0
1016 | dev: false
1017 |
1018 | /log4js/3.0.6:
1019 | resolution: {integrity: sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==}
1020 | engines: {node: '>=6.0'}
1021 | dependencies:
1022 | circular-json: 0.5.9
1023 | date-format: 1.2.0
1024 | debug: 3.2.7
1025 | rfdc: 1.3.0
1026 | streamroller: 0.7.0
1027 | dev: false
1028 |
1029 | /lowercase-keys/1.0.1:
1030 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
1031 | engines: {node: '>=0.10.0'}
1032 | dev: false
1033 |
1034 | /lowercase-keys/2.0.0:
1035 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
1036 | engines: {node: '>=8'}
1037 | dev: false
1038 |
1039 | /make-dir/3.1.0:
1040 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
1041 | engines: {node: '>=8'}
1042 | dependencies:
1043 | semver: 6.3.0
1044 | dev: false
1045 |
1046 | /media-typer/0.3.0:
1047 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
1048 | engines: {node: '>= 0.6'}
1049 | dev: false
1050 |
1051 | /methods/1.1.2:
1052 | resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
1053 | engines: {node: '>= 0.6'}
1054 | dev: false
1055 |
1056 | /mime-db/1.48.0:
1057 | resolution: {integrity: sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==}
1058 | engines: {node: '>= 0.6'}
1059 | dev: false
1060 |
1061 | /mime-types/2.1.31:
1062 | resolution: {integrity: sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==}
1063 | engines: {node: '>= 0.6'}
1064 | dependencies:
1065 | mime-db: 1.48.0
1066 | dev: false
1067 |
1068 | /mimic-response/1.0.1:
1069 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
1070 | engines: {node: '>=4'}
1071 | dev: false
1072 |
1073 | /mimic-response/3.1.0:
1074 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
1075 | engines: {node: '>=10'}
1076 | dev: false
1077 |
1078 | /minimatch/3.0.4:
1079 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
1080 | dependencies:
1081 | brace-expansion: 1.1.11
1082 | dev: false
1083 |
1084 | /minimist/1.2.5:
1085 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
1086 | dev: false
1087 |
1088 | /mkdirp/0.5.5:
1089 | resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==}
1090 | hasBin: true
1091 | dependencies:
1092 | minimist: 1.2.5
1093 | dev: false
1094 |
1095 | /ms/2.0.0:
1096 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
1097 | dev: false
1098 |
1099 | /ms/2.1.2:
1100 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1101 | dev: false
1102 |
1103 | /ms/2.1.3:
1104 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1105 | dev: false
1106 |
1107 | /negotiator/0.6.2:
1108 | resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==}
1109 | engines: {node: '>= 0.6'}
1110 | dev: false
1111 |
1112 | /nodemon/2.0.12:
1113 | resolution: {integrity: sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==}
1114 | engines: {node: '>=8.10.0'}
1115 | hasBin: true
1116 | requiresBuild: true
1117 | dependencies:
1118 | chokidar: 3.5.2
1119 | debug: 3.2.7
1120 | ignore-by-default: 1.0.1
1121 | minimatch: 3.0.4
1122 | pstree.remy: 1.1.8
1123 | semver: 5.7.1
1124 | supports-color: 5.5.0
1125 | touch: 3.1.0
1126 | undefsafe: 2.0.3
1127 | update-notifier: 4.1.3
1128 | dev: false
1129 |
1130 | /nopt/1.0.10:
1131 | resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=}
1132 | hasBin: true
1133 | dependencies:
1134 | abbrev: 1.1.1
1135 | dev: false
1136 |
1137 | /normalize-path/3.0.0:
1138 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1139 | engines: {node: '>=0.10.0'}
1140 | dev: false
1141 |
1142 | /normalize-url/4.5.1:
1143 | resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==}
1144 | engines: {node: '>=8'}
1145 | dev: false
1146 |
1147 | /normalize-url/6.1.0:
1148 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
1149 | engines: {node: '>=10'}
1150 | dev: false
1151 |
1152 | /object-inspect/1.11.0:
1153 | resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==}
1154 | dev: false
1155 |
1156 | /on-finished/2.3.0:
1157 | resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
1158 | engines: {node: '>= 0.8'}
1159 | dependencies:
1160 | ee-first: 1.1.1
1161 | dev: false
1162 |
1163 | /once/1.4.0:
1164 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
1165 | dependencies:
1166 | wrappy: 1.0.2
1167 | dev: false
1168 |
1169 | /only/0.0.2:
1170 | resolution: {integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=}
1171 | dev: false
1172 |
1173 | /p-cancelable/1.1.0:
1174 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
1175 | engines: {node: '>=6'}
1176 | dev: false
1177 |
1178 | /p-cancelable/2.1.1:
1179 | resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
1180 | engines: {node: '>=8'}
1181 | dev: false
1182 |
1183 | /p-limit/2.3.0:
1184 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1185 | engines: {node: '>=6'}
1186 | dependencies:
1187 | p-try: 2.2.0
1188 | dev: false
1189 |
1190 | /p-locate/3.0.0:
1191 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
1192 | engines: {node: '>=6'}
1193 | dependencies:
1194 | p-limit: 2.3.0
1195 | dev: false
1196 |
1197 | /p-try/2.2.0:
1198 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1199 | engines: {node: '>=6'}
1200 | dev: false
1201 |
1202 | /package-json/6.5.0:
1203 | resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==}
1204 | engines: {node: '>=8'}
1205 | dependencies:
1206 | got: 9.6.0
1207 | registry-auth-token: 4.2.1
1208 | registry-url: 5.1.0
1209 | semver: 6.3.0
1210 | dev: false
1211 |
1212 | /parseurl/1.3.3:
1213 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
1214 | engines: {node: '>= 0.8'}
1215 | dev: false
1216 |
1217 | /path-exists/3.0.0:
1218 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
1219 | engines: {node: '>=4'}
1220 | dev: false
1221 |
1222 | /path-is-absolute/1.0.1:
1223 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
1224 | engines: {node: '>=0.10.0'}
1225 | dev: false
1226 |
1227 | /path-to-regexp/6.2.0:
1228 | resolution: {integrity: sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==}
1229 | dev: false
1230 |
1231 | /picomatch/2.3.0:
1232 | resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==}
1233 | engines: {node: '>=8.6'}
1234 | dev: false
1235 |
1236 | /pngjs/3.4.0:
1237 | resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
1238 | engines: {node: '>=4.0.0'}
1239 | dev: false
1240 |
1241 | /prepend-http/2.0.0:
1242 | resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=}
1243 | engines: {node: '>=4'}
1244 | dev: false
1245 |
1246 | /process-nextick-args/2.0.1:
1247 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1248 | dev: false
1249 |
1250 | /pstree.remy/1.1.8:
1251 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
1252 | dev: false
1253 |
1254 | /pump/3.0.0:
1255 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
1256 | dependencies:
1257 | end-of-stream: 1.4.4
1258 | once: 1.4.0
1259 | dev: false
1260 |
1261 | /pupa/2.1.1:
1262 | resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==}
1263 | engines: {node: '>=8'}
1264 | dependencies:
1265 | escape-goat: 2.1.1
1266 | dev: false
1267 |
1268 | /qrcode/1.4.4:
1269 | resolution: {integrity: sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==}
1270 | engines: {node: '>=4'}
1271 | hasBin: true
1272 | dependencies:
1273 | buffer: 5.7.1
1274 | buffer-alloc: 1.2.0
1275 | buffer-from: 1.1.1
1276 | dijkstrajs: 1.0.2
1277 | isarray: 2.0.5
1278 | pngjs: 3.4.0
1279 | yargs: 13.3.2
1280 | dev: false
1281 |
1282 | /qs/6.10.1:
1283 | resolution: {integrity: sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==}
1284 | engines: {node: '>=0.6'}
1285 | dependencies:
1286 | side-channel: 1.0.4
1287 | dev: false
1288 |
1289 | /quick-lru/5.1.1:
1290 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
1291 | engines: {node: '>=10'}
1292 | dev: false
1293 |
1294 | /raw-body/2.4.1:
1295 | resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==}
1296 | engines: {node: '>= 0.8'}
1297 | dependencies:
1298 | bytes: 3.1.0
1299 | http-errors: 1.7.3
1300 | iconv-lite: 0.4.24
1301 | unpipe: 1.0.0
1302 | dev: false
1303 |
1304 | /rc/1.2.8:
1305 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
1306 | hasBin: true
1307 | dependencies:
1308 | deep-extend: 0.6.0
1309 | ini: 1.3.8
1310 | minimist: 1.2.5
1311 | strip-json-comments: 2.0.1
1312 | dev: false
1313 |
1314 | /readable-stream/2.3.7:
1315 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1316 | dependencies:
1317 | core-util-is: 1.0.2
1318 | inherits: 2.0.4
1319 | isarray: 1.0.0
1320 | process-nextick-args: 2.0.1
1321 | safe-buffer: 5.1.2
1322 | string_decoder: 1.1.1
1323 | util-deprecate: 1.0.2
1324 | dev: false
1325 |
1326 | /readdirp/3.6.0:
1327 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1328 | engines: {node: '>=8.10.0'}
1329 | dependencies:
1330 | picomatch: 2.3.0
1331 | dev: false
1332 |
1333 | /registry-auth-token/4.2.1:
1334 | resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==}
1335 | engines: {node: '>=6.0.0'}
1336 | dependencies:
1337 | rc: 1.2.8
1338 | dev: false
1339 |
1340 | /registry-url/5.1.0:
1341 | resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==}
1342 | engines: {node: '>=8'}
1343 | dependencies:
1344 | rc: 1.2.8
1345 | dev: false
1346 |
1347 | /require-directory/2.1.1:
1348 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
1349 | engines: {node: '>=0.10.0'}
1350 | dev: false
1351 |
1352 | /require-main-filename/2.0.0:
1353 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
1354 | dev: false
1355 |
1356 | /resolve-alpn/1.2.0:
1357 | resolution: {integrity: sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA==}
1358 | dev: false
1359 |
1360 | /resolve-path/1.4.0:
1361 | resolution: {integrity: sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=}
1362 | engines: {node: '>= 0.8'}
1363 | dependencies:
1364 | http-errors: 1.6.3
1365 | path-is-absolute: 1.0.1
1366 | dev: false
1367 |
1368 | /responselike/1.0.2:
1369 | resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=}
1370 | dependencies:
1371 | lowercase-keys: 1.0.1
1372 | dev: false
1373 |
1374 | /responselike/2.0.0:
1375 | resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==}
1376 | dependencies:
1377 | lowercase-keys: 2.0.0
1378 | dev: false
1379 |
1380 | /rfdc/1.3.0:
1381 | resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
1382 | dev: false
1383 |
1384 | /safe-buffer/5.1.2:
1385 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1386 | dev: false
1387 |
1388 | /safer-buffer/2.1.2:
1389 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1390 | dev: false
1391 |
1392 | /semver-diff/3.1.1:
1393 | resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==}
1394 | engines: {node: '>=8'}
1395 | dependencies:
1396 | semver: 6.3.0
1397 | dev: false
1398 |
1399 | /semver/5.7.1:
1400 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
1401 | hasBin: true
1402 | dev: false
1403 |
1404 | /semver/6.3.0:
1405 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1406 | hasBin: true
1407 | dev: false
1408 |
1409 | /set-blocking/2.0.0:
1410 | resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=}
1411 | dev: false
1412 |
1413 | /setprototypeof/1.1.0:
1414 | resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
1415 | dev: false
1416 |
1417 | /setprototypeof/1.1.1:
1418 | resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
1419 | dev: false
1420 |
1421 | /setprototypeof/1.2.0:
1422 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
1423 | dev: false
1424 |
1425 | /side-channel/1.0.4:
1426 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1427 | dependencies:
1428 | call-bind: 1.0.2
1429 | get-intrinsic: 1.1.1
1430 | object-inspect: 1.11.0
1431 | dev: false
1432 |
1433 | /signal-exit/3.0.3:
1434 | resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==}
1435 | dev: false
1436 |
1437 | /statuses/1.5.0:
1438 | resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
1439 | engines: {node: '>= 0.6'}
1440 | dev: false
1441 |
1442 | /streamroller/0.7.0:
1443 | resolution: {integrity: sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==}
1444 | engines: {node: '>=0.12.0'}
1445 | dependencies:
1446 | date-format: 1.2.0
1447 | debug: 3.2.7
1448 | mkdirp: 0.5.5
1449 | readable-stream: 2.3.7
1450 | dev: false
1451 |
1452 | /string-width/3.1.0:
1453 | resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
1454 | engines: {node: '>=6'}
1455 | dependencies:
1456 | emoji-regex: 7.0.3
1457 | is-fullwidth-code-point: 2.0.0
1458 | strip-ansi: 5.2.0
1459 | dev: false
1460 |
1461 | /string-width/4.2.2:
1462 | resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==}
1463 | engines: {node: '>=8'}
1464 | dependencies:
1465 | emoji-regex: 8.0.0
1466 | is-fullwidth-code-point: 3.0.0
1467 | strip-ansi: 6.0.0
1468 | dev: false
1469 |
1470 | /string_decoder/1.1.1:
1471 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1472 | dependencies:
1473 | safe-buffer: 5.1.2
1474 | dev: false
1475 |
1476 | /strip-ansi/5.2.0:
1477 | resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
1478 | engines: {node: '>=6'}
1479 | dependencies:
1480 | ansi-regex: 4.1.0
1481 | dev: false
1482 |
1483 | /strip-ansi/6.0.0:
1484 | resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==}
1485 | engines: {node: '>=8'}
1486 | dependencies:
1487 | ansi-regex: 5.0.0
1488 | dev: false
1489 |
1490 | /strip-json-comments/2.0.1:
1491 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=}
1492 | engines: {node: '>=0.10.0'}
1493 | dev: false
1494 |
1495 | /supports-color/5.5.0:
1496 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1497 | engines: {node: '>=4'}
1498 | dependencies:
1499 | has-flag: 3.0.0
1500 | dev: false
1501 |
1502 | /supports-color/7.2.0:
1503 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1504 | engines: {node: '>=8'}
1505 | dependencies:
1506 | has-flag: 4.0.0
1507 | dev: false
1508 |
1509 | /term-size/2.2.1:
1510 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
1511 | engines: {node: '>=8'}
1512 | dev: false
1513 |
1514 | /to-readable-stream/1.0.0:
1515 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==}
1516 | engines: {node: '>=6'}
1517 | dev: false
1518 |
1519 | /to-regex-range/5.0.1:
1520 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1521 | engines: {node: '>=8.0'}
1522 | dependencies:
1523 | is-number: 7.0.0
1524 | dev: false
1525 |
1526 | /toidentifier/1.0.0:
1527 | resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
1528 | engines: {node: '>=0.6'}
1529 | dev: false
1530 |
1531 | /touch/3.1.0:
1532 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
1533 | hasBin: true
1534 | dependencies:
1535 | nopt: 1.0.10
1536 | dev: false
1537 |
1538 | /tsscmp/1.0.6:
1539 | resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
1540 | engines: {node: '>=0.6.x'}
1541 | dev: false
1542 |
1543 | /type-fest/0.8.1:
1544 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
1545 | engines: {node: '>=8'}
1546 | dev: false
1547 |
1548 | /type-is/1.6.18:
1549 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
1550 | engines: {node: '>= 0.6'}
1551 | dependencies:
1552 | media-typer: 0.3.0
1553 | mime-types: 2.1.31
1554 | dev: false
1555 |
1556 | /typedarray-to-buffer/3.1.5:
1557 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
1558 | dependencies:
1559 | is-typedarray: 1.0.0
1560 | dev: false
1561 |
1562 | /undefsafe/2.0.3:
1563 | resolution: {integrity: sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==}
1564 | dependencies:
1565 | debug: 2.6.9
1566 | dev: false
1567 |
1568 | /unique-string/2.0.0:
1569 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
1570 | engines: {node: '>=8'}
1571 | dependencies:
1572 | crypto-random-string: 2.0.0
1573 | dev: false
1574 |
1575 | /unpipe/1.0.0:
1576 | resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
1577 | engines: {node: '>= 0.8'}
1578 | dev: false
1579 |
1580 | /update-notifier/4.1.3:
1581 | resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==}
1582 | engines: {node: '>=8'}
1583 | dependencies:
1584 | boxen: 4.2.0
1585 | chalk: 3.0.0
1586 | configstore: 5.0.1
1587 | has-yarn: 2.1.0
1588 | import-lazy: 2.1.0
1589 | is-ci: 2.0.0
1590 | is-installed-globally: 0.3.2
1591 | is-npm: 4.0.0
1592 | is-yarn-global: 0.3.0
1593 | latest-version: 5.1.0
1594 | pupa: 2.1.1
1595 | semver-diff: 3.1.1
1596 | xdg-basedir: 4.0.0
1597 | dev: false
1598 |
1599 | /url-parse-lax/3.0.0:
1600 | resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=}
1601 | engines: {node: '>=4'}
1602 | dependencies:
1603 | prepend-http: 2.0.0
1604 | dev: false
1605 |
1606 | /util-deprecate/1.0.2:
1607 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
1608 | dev: false
1609 |
1610 | /vary/1.1.2:
1611 | resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
1612 | engines: {node: '>= 0.8'}
1613 | dev: false
1614 |
1615 | /which-module/2.0.0:
1616 | resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=}
1617 | dev: false
1618 |
1619 | /widest-line/3.1.0:
1620 | resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
1621 | engines: {node: '>=8'}
1622 | dependencies:
1623 | string-width: 4.2.2
1624 | dev: false
1625 |
1626 | /wrap-ansi/5.1.0:
1627 | resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
1628 | engines: {node: '>=6'}
1629 | dependencies:
1630 | ansi-styles: 3.2.1
1631 | string-width: 3.1.0
1632 | strip-ansi: 5.2.0
1633 | dev: false
1634 |
1635 | /wrappy/1.0.2:
1636 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
1637 | dev: false
1638 |
1639 | /write-file-atomic/3.0.3:
1640 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
1641 | dependencies:
1642 | imurmurhash: 0.1.4
1643 | is-typedarray: 1.0.0
1644 | signal-exit: 3.0.3
1645 | typedarray-to-buffer: 3.1.5
1646 | dev: false
1647 |
1648 | /xdg-basedir/4.0.0:
1649 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
1650 | engines: {node: '>=8'}
1651 | dev: false
1652 |
1653 | /y18n/4.0.3:
1654 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
1655 | dev: false
1656 |
1657 | /yargs-parser/13.1.2:
1658 | resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
1659 | dependencies:
1660 | camelcase: 5.3.1
1661 | decamelize: 1.2.0
1662 | dev: false
1663 |
1664 | /yargs/13.3.2:
1665 | resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
1666 | dependencies:
1667 | cliui: 5.0.0
1668 | find-up: 3.0.0
1669 | get-caller-file: 2.0.5
1670 | require-directory: 2.1.1
1671 | require-main-filename: 2.0.0
1672 | set-blocking: 2.0.0
1673 | string-width: 3.1.0
1674 | which-module: 2.0.0
1675 | y18n: 4.0.3
1676 | yargs-parser: 13.1.2
1677 | dev: false
1678 |
1679 | /ylru/1.2.1:
1680 | resolution: {integrity: sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==}
1681 | engines: {node: '>= 4.0.0'}
1682 | dev: false
1683 |
1684 | registry.npmmirror.com/fsevents/2.3.2:
1685 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
1686 | name: fsevents
1687 | version: 2.3.2
1688 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1689 | os: [darwin]
1690 | requiresBuild: true
1691 | dev: false
1692 | optional: true
1693 |
--------------------------------------------------------------------------------
/backend/src/service/Content.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable camelcase */
2 | 'use strict';
3 | const JsonResult = require('../util/jsonResult');
4 | const DbUtil = require('../util/DbUtil');
5 |
6 |
7 | const DEF_CONTENT = {
8 | tip: {
9 | content: "
撸豆有可能造成的任何损失本人概不负责!!!!!!!!!
\n" + "为了您的财产安全请关闭免密支付以及打开支付验密(京东-设置-支付设置-支付验密设置)。
\n" + "建议京东账户绑定微信以保证提现能到账。
\n" + "安全起见,切勿泄露您的cookie!
\n" + "如果本项目对你有帮助,请到github中star
\n",
10 | name: "登录以及注册上方提示"
11 | }, login: {
12 | content: '', name: "登录上方提示"
13 | }, profile: {
14 | content: '', name: "个人中心上方提示"
15 | }, register: {
16 | content: "安卓手机傻瓜式获取CK(强烈推荐,非常方便)点此访问下载连接
\n" + "电脑用户浏览器登录JD官网,点击我的出现登录页面后点击F12,通过开发者工具获取cookie。
\n" + "手机用户可以使用Alook浏览器登录JD官网,并在菜单-工具箱-开发者工具-Cookies中获取(Android和iPhone通用)。
\n" + "另外也可以使用抓包工具(iPhone:Stream,Android:HttpCanary)抓取京东app的ck
\n" + "注册成功后使用用户名即可登录
\n" + " 可以直接填写整个cookie。
\n" + " 注意格式(pt_key=xxxxxxxxxxxxxxx;pt_pin=xxxxxxxxxxxxxx;)注意分号不能少!
\n" + " 请在下方输入您的 cookie 注册。
\n",
17 | name: "注册上方提示"
18 | }, cookie: {
19 | content: '', name: "自定义修改Cookie上方提示"
20 | }, username: {
21 | content: '', name: "修改用户名上方提示"
22 | }
23 | }
24 |
25 |
26 | module.exports = class Content {
27 |
28 | static getDb() {
29 | let dbUtil = DbUtil.getInstance("content")
30 | if (dbUtil.init || dbUtil.length === 0) {
31 | for (let key in DEF_CONTENT) {
32 | dbUtil.insert({location: key, ...DEF_CONTENT[key]})
33 | }
34 | }
35 | return dbUtil;
36 | }
37 |
38 | static getAllContent() {
39 | let dbUtil = this.getDb()
40 | let data = {}
41 | dbUtil.selectAll().forEach(item => {
42 | data[item.location] = item
43 | })
44 | return JsonResult.success(data)
45 | }
46 |
47 | static addContent(content) {
48 | let dbUtil = this.getDb()
49 | return JsonResult.success(dbUtil.insert(content))
50 | }
51 |
52 | static updateContent(content) {
53 | let dbUtil = this.getDb()
54 | return JsonResult.success(dbUtil.update(content))
55 | }
56 |
57 | static deleteContent(id) {
58 | let dbUtil = this.getDb()
59 | return JsonResult.success(dbUtil.delete(id))
60 | }
61 | };
62 |
--------------------------------------------------------------------------------
/backend/src/service/ql.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const got = require('got');
3 | require('dotenv').config();
4 |
5 | const api = got.extend({
6 | prefixUrl: process.env.QL_URL || 'http://localhost:5700/',
7 | retry: {limit: 0},
8 | });
9 |
10 | const NinjaConfig = require('../util/ninjaConfig');
11 |
12 |
13 | async function getToken() {
14 | let config = NinjaConfig.getConfig()
15 | const body = await api({
16 | url: 'open/auth/token', searchParams: {
17 | client_id: config.clientId, client_secret: config.clientSecret,
18 | }
19 | }).json();
20 | if (body.code !== 200) {
21 | throw new QLError("青龙令牌配置错误,请前往管理页面配置!", 500)
22 | }
23 | return body.data.token;
24 | }
25 |
26 | module.exports.getToken = async () => {
27 | let config = NinjaConfig.getConfig()
28 | const body = await api({
29 | url: 'open/auth/token', searchParams: {
30 | client_id: config.clientId, client_secret: config.clientSecret,
31 | }
32 | }).json();
33 | if (body.code !== 200) {
34 | throw new QLError("青龙令牌配置错误,请前往管理页面配置!", 500)
35 | }
36 | return body.data.token;
37 | }
38 |
39 | module.exports.getEnvs = async () => {
40 | const token = await getToken();
41 | const body = await api({
42 | url: 'open/envs', searchParams: {
43 | searchValue: 'JD_COOKIE', t: Date.now(),
44 | }, headers: {
45 | Accept: 'application/json', authorization: `Bearer ${token}`,
46 | },
47 | }).json();
48 | if (body.code !== 200) {
49 | throw new QLError(body.message, body.code)
50 | }
51 | return body.data;
52 | };
53 |
54 | module.exports.addEnv = async (cookie, remarks) => {
55 | const token = await getToken();
56 | let body = await api({
57 | method: 'post', url: 'open/envs', params: {t: Date.now()}, json: [{
58 | name: 'JD_COOKIE', value: cookie, remarks,
59 | }], headers: {
60 | Accept: 'application/json',
61 | authorization: `Bearer ${token}`,
62 | 'Content-Type': 'application/json;charset=UTF-8',
63 | },
64 | }).json()
65 | if (body.code !== 200) {
66 | throw new QLError(body.message, body.code)
67 | }
68 | return body
69 | };
70 |
71 | module.exports.updateEnv = async (cookie, eid, remarks) => {
72 | const token = await getToken();
73 | const body = await api({
74 | method: 'put', url: 'open/envs', params: {t: Date.now()}, json: {
75 | name: 'JD_COOKIE', value: cookie, id: eid, remarks,
76 | }, headers: {
77 | Accept: 'application/json',
78 | authorization: `Bearer ${token}`,
79 | 'Content-Type': 'application/json;charset=UTF-8',
80 | },
81 | }).json();
82 | if (body.code !== 200) {
83 | throw new QLError(body.message, body.code)
84 | }
85 | return body;
86 | };
87 |
88 | module.exports.delEnv = async (eid) => {
89 | const token = await getToken();
90 | const body = await api({
91 | method: 'delete', url: 'open/envs', params: {t: Date.now()}, body: JSON.stringify([eid]), headers: {
92 | Accept: 'application/json',
93 | authorization: `Bearer ${token}`,
94 | 'Content-Type': 'application/json;charset=UTF-8',
95 | },
96 | }).json();
97 | if (body.code !== 200) {
98 | throw new QLError(body.message, body.code)
99 | }
100 | return body;
101 | };
102 |
103 | module.exports.disable = async (eid) => {
104 | const token = await getToken();
105 | const body = await api({
106 | method: 'put', url: 'open/envs/disable', params: {t: Date.now()}, body: JSON.stringify([eid]), headers: {
107 | Accept: 'application/json',
108 | authorization: `Bearer ${token}`,
109 | 'Content-Type': 'application/json;charset=UTF-8',
110 | },
111 | }).json();
112 | if (body.code !== 200) {
113 | throw new QLError(body.message, body.code)
114 | }
115 | return body;
116 | };
117 |
118 | module.exports.enable = async (eid) => {
119 | const token = await getToken();
120 | const body = await api({
121 | method: 'put', url: 'open/envs/enable', params: {t: Date.now()}, body: JSON.stringify([eid]), headers: {
122 | Accept: 'application/json',
123 | authorization: `Bearer ${token}`,
124 | 'Content-Type': 'application/json;charset=UTF-8',
125 | },
126 | }).json();
127 | if (body.code !== 200) {
128 | throw new QLError(body.message, body.code)
129 | }
130 | return body;
131 | };
132 |
133 | class QLError extends Error {
134 | constructor(message, status, statusCode) {
135 | super(message);
136 | this.name = 'QLError';
137 | this.status = status;
138 | this.statusCode = statusCode || 500;
139 | }
140 | }
141 |
--------------------------------------------------------------------------------
/backend/src/service/user.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable camelcase */
2 | 'use strict';
3 | require('dotenv').config();
4 |
5 | const {
6 | addEnv, delEnv, getEnvs, updateEnv, disable, enable
7 | } = require('./ql');
8 | const {
9 | encrypt, decrypt
10 | } = require('../util/encryptUtil')
11 | const {v4: uuidv4} = require('uuid');
12 | const NinjaConfig = require('../util/ninjaConfig');
13 | const JsonResult = require('../util/jsonResult');
14 | const cache = require("../util/cache");
15 |
16 | module.exports = class User {
17 | ptKey;
18 | ptPin;
19 | eid;
20 | username;
21 | password;
22 | token;
23 | ck;
24 | encryptUsername
25 |
26 | /**
27 | * 构造方法
28 | * @param ptKey ck ptKey
29 | * @param ptPin ck ptPin
30 | * @param eid 青龙容器中的id 容器中为id
31 | * @param username 用户名 容器中改为remarks
32 | * @param ck cookie
33 | * @param password 密码 仅用于管理员登录
34 | * @param token token 仅用于管理员操作验证
35 | * @param encryptUsername 加密的用户名 自动登录时验证
36 | */
37 | constructor({
38 | ptKey, ptPin, eid, username, ck, password, token, encryptUsername
39 | }) {
40 | this.ptKey = ptKey
41 | this.ptPin = ptPin
42 | this.password = password
43 | if (ptKey && ptPin) {
44 | this.cookie = 'pt_key=' + this.ptKey + ';pt_pin=' + this.ptPin + ';';
45 | }
46 | this.eid = Number(eid)
47 | this.username = username
48 | this.token = token
49 | this.ck = ck
50 | this.encryptUsername = encryptUsername
51 | }
52 |
53 | /**
54 | * 登录
55 | */
56 | async login() {
57 | let config = NinjaConfig.getConfig()
58 | if (this.username === config.adminUsername) {
59 | if (config.allowAdmin) {
60 | //管理员登录
61 | if (this.password) {
62 | if (this.password === config.adminPassword) {
63 | let uuid = uuidv4();
64 | cache.setExpire(uuid, this.username, 1000 * 60 * 60 * 12)
65 | return JsonResult.success({username: config.adminUsername, eid: 0, token: uuid});
66 | } else {
67 | return JsonResult.error('用户名或密码不匹配', {username: config.adminUsername})
68 | }
69 | } else {
70 | return JsonResult.success({isAdmin: true})
71 | }
72 | } else {
73 | return JsonResult.error('该账号未启用,禁止登录', {username: config.adminUsername})
74 | }
75 | }
76 |
77 | const envs = await getEnvs();
78 | const env = await envs.find(item => item.remarks === this.username);
79 | if (env) {
80 | let encryptUsername = encrypt(this.username)
81 | return JsonResult.success({username: env.remarks, eid: env.id, timestamp: env.timestamp, encryptUsername});
82 | } else {
83 | return JsonResult.error('未注册的用户', {username: config.adminUsername})
84 | }
85 | }
86 |
87 | /**
88 | * 验证token是否匹配 用于管理页面的token验证
89 | */
90 | async verifyToken() {
91 | if (cache.hasKey(this.token)) {
92 | return JsonResult.success()
93 | } else {
94 | return JsonResult.error()
95 | }
96 | }
97 |
98 | /**
99 | * 注册
100 | */
101 | async register() {
102 | let config = NinjaConfig.getConfig()
103 | if (this.username === config.adminUsername) {
104 | return JsonResult.error('用户已存在')
105 | }
106 |
107 | const envs = await getEnvs();
108 | const poolInfo = await User.getPoolInfo();
109 | const env = await envs.find(item => item.remarks === this.username);
110 | if (!env) {
111 | // 新用户
112 | if (!config.allowAdd) {
113 | return JsonResult.error('注册功能已关闭,禁止注册')
114 | } else if (poolInfo.marginCount === 0) {
115 | return JsonResult.error('容量已达上限!')
116 | } else {
117 | const remarks = this.username
118 | const body = await addEnv(this.cookie, remarks);
119 | this.eid = body.data[0].id;
120 | this.timestamp = body.data[0].timestamp;
121 | return JsonResult.success(`注册成功,欢迎你${this.username}`, {
122 | username: this.username, eid: this.eid, timestamp: this.timestamp
123 | })
124 | }
125 | } else {
126 | return JsonResult.error('用户已存在')
127 | }
128 | }
129 |
130 | /**
131 | * 根据青龙容器中的ID获取用户信息
132 | */
133 | async getUserInfoByEid() {
134 |
135 | const envs = await getEnvs();
136 | const env = await envs.find((item) => item.id * 1 === this.eid * 1);
137 | if (!env) {
138 | return JsonResult.error('登录信息验证失败,请重新登录')
139 | }
140 | this.cookie = env.value;
141 | this.timestamp = env.timestamp;
142 | this.username = env.remarks
143 | let decryptUsername = decrypt(this.encryptUsername)
144 | if (decryptUsername !== this.username) {
145 | return JsonResult.error('登录信息验证失败,请重新登录')
146 | }
147 | this.cookie = env.value;
148 | this.timestamp = env.timestamp;
149 | this.username = env.remarks
150 | return JsonResult.success({
151 | username: this.username, eid: this.eid, timestamp: this.timestamp, status: env.status
152 | })
153 | }
154 |
155 | /**
156 | * 更新青龙容器中的环境变量 ,通过id来进行更新
157 | */
158 | async update() {
159 | if (!this.eid) {
160 | return JsonResult.error('登录信息验证失败,请重新登录')
161 | }
162 | const envs = await getEnvs();
163 | const env = await envs.find((item) => item.id === this.eid);
164 | if (!env) {
165 | return JsonResult.error('登录信息验证失败,请重新登录')
166 | }
167 | let cookie;
168 | if (this.ck) {
169 | cookie = this.ck
170 | } else {
171 | cookie = env.value
172 | }
173 | let remarks;
174 | if (this.username) {
175 | remarks = this.username;
176 | let user = envs.find(item => item.remarks === this.username)
177 | if (user) {
178 | return JsonResult.error('用户名已被占用')
179 | }
180 | } else {
181 | remarks = env.remarks
182 | }
183 | await updateEnv(cookie, this.eid, remarks);
184 | return JsonResult.success('修改成功')
185 | }
186 |
187 | /**
188 | * 根据青龙容器id删除环境变量
189 | */
190 | async delUserByEid() {
191 | await this.getUserInfoByEid();
192 | await delEnv(this.eid);
193 | return JsonResult.success('账号删除成功')
194 | }
195 |
196 | /**
197 | * 根据青龙容器id禁用环境变量
198 | */
199 | async disableEnv() {
200 | await this.getUserInfoByEid();
201 | await disable(this.eid);
202 | return JsonResult.success("禁用成功")
203 | }
204 |
205 | /**
206 | * 根据青龙容器id启用环境变量
207 | */
208 | async enableEnv() {
209 | await this.getUserInfoByEid();
210 | await enable(this.eid);
211 | return JsonResult.success("启用成功")
212 | }
213 |
214 | /**
215 | * 获取当前系统容量以及可公开的配置信息
216 | */
217 | static async getPoolInfo() {
218 | const envs = await getEnvs();
219 | let userNames = new Set()
220 | envs.map(item => {
221 | userNames.add(item.remarks);
222 | })
223 | let config = NinjaConfig.getConfig()
224 |
225 | return JsonResult.success({
226 | marginCount: config.allowNum - userNames.size,
227 | allowAdd: config.allowAdd,
228 | allowSetStatus: config.allowSetStatus
229 | })
230 | }
231 |
232 | /**
233 | * 获取所有的配置信息 需要验证token
234 | */
235 | async getAllConfig() {
236 | if (cache.hasKey(this.token)) {
237 | return JsonResult.success(NinjaConfig.getConfig())
238 | } else {
239 | return JsonResult.error('登录过期,请重新登录!')
240 | }
241 | }
242 |
243 | /**
244 | * 保存配置信息 需要验证token
245 | */
246 | async saveConfig(config) {
247 | if (cache.hasKey(this.token)) {
248 | NinjaConfig.saveConfig(config)
249 | return JsonResult.success('修改成功')
250 | } else {
251 | return JsonResult.error('登录过期,请重新登录!')
252 | }
253 | }
254 | };
255 |
--------------------------------------------------------------------------------
/backend/src/util/DbUtil.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable camelcase */
2 | 'use strict';
3 | const {v4: uuidv4} = require('uuid');
4 | let fs = require("fs")
5 | const filePrefixPath = './src/db/'
6 | const fileSuffixPath = '.json'
7 |
8 | const dbMap = new Map()
9 |
10 | module.exports = class DbUtil {
11 | dbName;
12 | dbPath;
13 | db;
14 | init;
15 |
16 | constructor(dbName) {
17 | this.dbName = dbName
18 | this.dbPath = filePrefixPath + dbName + fileSuffixPath
19 | this.init = false
20 | this.initDbData()
21 | }
22 |
23 | /**
24 | * 获取实例
25 | */
26 | static getInstance(dbName) {
27 | let dbUtil = dbMap.get(dbName)
28 | if (!dbUtil) {
29 | dbUtil = new DbUtil(dbName)
30 | dbMap.set(dbName, dbUtil);
31 | }else {
32 | dbUtil.init = false
33 | }
34 | return dbUtil;
35 | }
36 |
37 |
38 | /**
39 | * 初始化dbUtil
40 | */
41 | initDbData() {
42 | if (!fs.existsSync(this.dbPath)) {
43 | fs.writeFileSync(this.dbPath, '')
44 | }
45 | if (!fs.existsSync(filePrefixPath)) {
46 | fs.mkdirSync(filePrefixPath)
47 | }
48 | if (!fs.existsSync(this.dbPath)) {
49 | fs.writeFileSync(this.dbPath, '')
50 | }
51 | let buffer = fs.readFileSync(this.dbPath)
52 | let dataStr = buffer.toString()
53 | let db = {};
54 | if (dataStr) {
55 | db = JSON.parse(dataStr)
56 | let data = new Map()
57 | for (let dataKey in db.data) {
58 | data.set(dataKey, db.data[dataKey])
59 | }
60 | db.data = data
61 | } else {
62 | db.data = new Map()
63 | db.name = this.dbName
64 | db.length = 0
65 | db.index = 0;
66 | db.updateDate = new Date();
67 | this.init = true
68 | let dbStr = JSON.stringify(db)
69 | fs.writeFileSync(this.dbPath, dbStr);
70 | }
71 | this.db = db;
72 | }
73 |
74 | saveToFile() {
75 | this.db.updateDate = new Date()
76 | this.db.length = this.db.data.size
77 | let dataMap = this.db.data;
78 | let data = {}
79 | dataMap.forEach((value, key) => {
80 | data[key] = value;
81 | })
82 | this.db.data = data
83 | fs.writeFileSync(this.dbPath, JSON.stringify(this.db))
84 | this.db.data = dataMap
85 | }
86 |
87 |
88 | insert(data) {
89 | this.db.index++
90 | data._id = uuidv4();
91 | data._index = this.db.index
92 | if (this.db.data.size > 0 || Object.keys(this.db.data).length !== 0) {
93 | this.db.data.set(data._id, data);
94 | } else {
95 | this.db.data = new Map()
96 | this.db.data.set(data._id, data);
97 | }
98 | this.saveToFile()
99 | return data._id
100 | }
101 |
102 | get(id) {
103 | return this.db.data.get(id)
104 | }
105 |
106 | update(data) {
107 | let oldValue = this.db.data.get(data._id)
108 | for (let dataKey in data) {
109 | oldValue[dataKey] = data[dataKey]
110 | }
111 | this.saveToFile()
112 | }
113 |
114 | delete(id) {
115 | this.db.data.delete(id)
116 | this.saveToFile()
117 | }
118 |
119 | selectAll() {
120 | if (this.db.data.size > 0){
121 | return Array.from(this.db.data.values())
122 | }else {
123 | return []
124 | }
125 | }
126 |
127 | };
128 |
--------------------------------------------------------------------------------
/backend/src/util/cache.js:
--------------------------------------------------------------------------------
1 | const __cache = new Map();
2 |
3 | const cache = {
4 | set(key, value) {
5 | __cache.set(key, value)
6 | },
7 | delete(key) {
8 | if (this.hasKey(key)){
9 | __cache.delete(key)
10 | }
11 | },
12 | setExpire(key, value, time) {
13 | let that = this
14 | this.set(key, value)
15 | setTimeout(() => {
16 | that.delete(key)
17 | }, time)
18 | },
19 | hasKey(key) {
20 | return __cache.has(key)
21 | },
22 | get(key) {
23 | return __cache.get(key)
24 | }
25 | }
26 |
27 | module.exports = cache
28 |
--------------------------------------------------------------------------------
/backend/src/util/encryptUtil.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const CryptoJS = require("crypto-js")
3 | const NinjaConfig = require('./ninjaConfig');
4 |
5 | //秘钥
6 | const iv = CryptoJS.enc.Utf8.parse('thisprojectisshit');
7 | const option = {
8 | iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7
9 | }
10 |
11 | function saltProcess(salt) {
12 | return salt || 'ninja';
13 | }
14 |
15 | /**
16 | * 加密
17 | * {param} plaintText 加密明文
18 | * return str 加密结果
19 | */
20 | module.exports.encrypt = (plaintText) => {
21 | return CryptoJS.AES.encrypt(plaintText, saltProcess(NinjaConfig.getConfig().usernameSalt), option).toString();
22 |
23 | }
24 |
25 | /**
26 | * 解密
27 | * {param} plaintText 解密密文
28 | * return str 解密结果
29 | */
30 | module.exports.decrypt = (encryptedBase64Str) => {
31 | let content = String(encryptedBase64Str);//把object转化为string
32 | let bytes = CryptoJS.AES.decrypt(content.toString(), saltProcess(NinjaConfig.getConfig().usernameSalt), option);
33 |
34 | return bytes.toString(CryptoJS.enc.Utf8);
35 | }
36 |
37 |
38 |
--------------------------------------------------------------------------------
/backend/src/util/jsonResult.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable camelcase */
2 | 'use strict';
3 |
4 | /**
5 | * 操作成功
6 | */
7 | const SUCCESS = 200;
8 | /**
9 | * 系统内部错误
10 | */
11 | const ERROR = 500;
12 |
13 |
14 | module.exports = class JsonResult {
15 |
16 | data;
17 | code;
18 | msg;
19 |
20 | constructor({data, code, msg}) {
21 | this.data = data
22 | this.code = code
23 | this.msg = msg
24 | }
25 |
26 | /**
27 | * 响应错误 res data 可以随意组合传入 自动判断那个是对象那个是消息
28 | */
29 | static error(res, data) {
30 | if (res) {
31 | if (data) {
32 | if (typeof res === 'object') {
33 | return new JsonResult({data: res, code: ERROR, msg: data})
34 | } else {
35 | return new JsonResult({data: data, code: ERROR, msg: res})
36 | }
37 | } else {
38 | if (typeof res === 'object') {
39 | return new JsonResult({data: res, code: ERROR, msg: '操作失败'})
40 | } else {
41 | return new JsonResult({code: ERROR, msg: res})
42 | }
43 | }
44 | }else {
45 | if (data){
46 | return new JsonResult({data: data, code: ERROR, msg: '操作失败'})
47 | }else {
48 | return new JsonResult({code: ERROR, msg: '操作失败'})
49 | }
50 | }
51 | }
52 |
53 | /**
54 | * 响应成功
55 | */
56 | static success(res, data) {
57 | if (res) {
58 | if (data) {
59 | if (typeof res === 'object') {
60 | return new JsonResult({data: res, code: SUCCESS, msg: data})
61 | } else {
62 | return new JsonResult({data: data, code: SUCCESS, msg: res})
63 | }
64 | } else {
65 | if (typeof res === 'object') {
66 | return new JsonResult({data: res, code: SUCCESS, msg: '操作成功'})
67 | } else {
68 | return new JsonResult({code: SUCCESS, msg: res})
69 | }
70 | }
71 | }else {
72 | if (data){
73 | return new JsonResult({data: data, code: SUCCESS, msg: '操作成功'})
74 | }else {
75 | return new JsonResult({code: SUCCESS, msg: '操作成功'})
76 | }
77 | }
78 | }
79 |
80 | };
81 |
--------------------------------------------------------------------------------
/backend/src/util/ninjaConfig.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable camelcase */
2 | 'use strict';
3 | let fs = require("fs")
4 | const FILE_PATH = './src/db/'
5 | const FILE_NAME = 'config.json'
6 |
7 | const DEF_CONFIG = {
8 | allowAdd: Boolean(process.env.ALLOW_ADD) || true,
9 | allowNum: Number(process.env.ALLOW_NUM) || 20,
10 | clientId: process.env.CLIENT_ID,
11 | clientSecret: process.env.CLIENT_SECRET,
12 | allowAdmin: Boolean(process.env.ALLOW_ADMIN) || true,
13 | usernameSalt: process.env.USERNAME_SALT || 'ninja123',
14 | adminUsername: process.env.ADMIN_USERNAME || 'admin',
15 | adminPassword: process.env.ADMIN_PASSWORD || '123456',
16 | allowSetStatus: true,
17 | };
18 |
19 | module.exports = class NinjaConfig {
20 | static configData;
21 |
22 | static getConfig() {
23 | if (!this.configData) {
24 | if (!fs.existsSync(FILE_PATH)) {
25 | fs.mkdirSync(FILE_PATH)
26 | }
27 | if (!fs.existsSync(FILE_PATH + FILE_NAME)) {
28 | fs.writeFileSync(FILE_PATH + FILE_NAME, '')
29 | }
30 | let buffer = fs.readFileSync(FILE_PATH + FILE_NAME)
31 | let configStr = buffer.toString()
32 | if (configStr) {
33 | this.configData = JSON.parse(configStr)
34 | } else {
35 | fs.writeFile(FILE_PATH + FILE_NAME, JSON.stringify(DEF_CONFIG), (err) => {
36 | if (err) {
37 | throw err;
38 | }
39 | })
40 | this.configData = DEF_CONFIG
41 | }
42 | }
43 | return this.configData
44 | }
45 |
46 | static saveConfig(config) {
47 | this.configData = config;
48 | fs.writeFile(FILE_PATH + FILE_NAME, JSON.stringify(config), (err) => {
49 | if (err) {
50 | throw err;
51 | }
52 | })
53 | }
54 |
55 | };
56 |
--------------------------------------------------------------------------------
/backend/static/activity.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "name": "玩一玩(可找到大多数活动)",
4 | "address": "京东 APP 首页-频道-边玩边赚",
5 | "href": "https://funearth.m.jd.com/babelDiy/Zeus/3BB1rymVZUo4XmicATEUSDUgHZND/index.html"
6 | },
7 | {
8 | "name": "宠汪汪",
9 | "address": "京东APP-首页/玩一玩/我的-宠汪汪"
10 | },
11 | {
12 | "name": "东东萌宠",
13 | "address": "京东APP-首页/玩一玩/我的-东东萌宠"
14 | },
15 | {
16 | "name": "东东农场",
17 | "address": "京东APP-首页/玩一玩/我的-东东农场"
18 | },
19 | {
20 | "name": "东东工厂",
21 | "address": "京东APP-首页/玩一玩/我的-东东工厂"
22 | },
23 | {
24 | "name": "东东超市",
25 | "address": "京东APP-首页/玩一玩/我的-东东超市"
26 | },
27 | {
28 | "name": "领现金",
29 | "address": "京东APP-首页/玩一玩/我的-领现金"
30 | },
31 | {
32 | "name": "东东健康社区",
33 | "address": "京东APP-首页/玩一玩/我的-东东健康社区"
34 | },
35 | {
36 | "name": "京喜农场",
37 | "address": "京喜APP-我的-京喜农场"
38 | },
39 | {
40 | "name": "京喜牧场",
41 | "address": "京喜APP-我的-京喜牧场"
42 | },
43 | {
44 | "name": "京喜工厂",
45 | "address": "京喜APP-我的-京喜工厂"
46 | },
47 | {
48 | "name": "京喜财富岛",
49 | "address": "京喜APP-我的-京喜财富岛"
50 | },
51 | {
52 | "name": "京东极速版红包",
53 | "address": "京东极速版APP-我的-红包"
54 | }
55 | ]
56 |
--------------------------------------------------------------------------------
/backend/static/activity.json.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/backend/static/activity.json.gz
--------------------------------------------------------------------------------
/backend/static/assets/element-icons.9c88a535.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/backend/static/assets/element-icons.9c88a535.woff
--------------------------------------------------------------------------------
/backend/static/assets/element-icons.de5eb258.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/backend/static/assets/element-icons.de5eb258.ttf
--------------------------------------------------------------------------------
/backend/static/assets/logo.03d6d6da.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/backend/static/assets/logo.03d6d6da.png
--------------------------------------------------------------------------------
/backend/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/backend/static/favicon.ico
--------------------------------------------------------------------------------
/backend/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Ninja
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/frontend/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.md]
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/frontend/.env.development:
--------------------------------------------------------------------------------
1 | VITE_API_BASE_URL=http://localhost:5701/api
2 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
6 |
--------------------------------------------------------------------------------
/frontend/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Ninja
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/frontend/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "paths": {
5 | "@/*": ["src/*"]
6 | }
7 | },
8 | "exclude": ["node_modules", "dist"]
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "22.06.26",
3 | "scripts": {
4 | "dev": "vite",
5 | "build": "vite build",
6 | "serve": "vite preview"
7 | },
8 | "dependencies": {
9 | "@element-plus/icons-vue": "^2.0.6",
10 | "element-plus": "^2.2.6",
11 | "ky": "^0.28.5",
12 | "pinia": "^2.0.32",
13 | "unplugin-element-plus": "^0.4.0",
14 | "vue": "^3.1.5",
15 | "vue-router": "^4.0.10"
16 | },
17 | "devDependencies": {
18 | "@vitejs/plugin-vue": "^1.2.5",
19 | "@vue/compiler-sfc": "^3.1.5",
20 | "autoprefixer": "^10.3.1",
21 | "postcss": "^8.3.6",
22 | "tailwindcss": "^2.2.7",
23 | "vite": "^2.4.3"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/frontend/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@vitejs/plugin-vue': ^1.2.5
5 | '@vue/compiler-sfc': ^3.1.5
6 | autoprefixer: ^10.3.1
7 | element-plus: ^1.0.2-beta.62
8 | ky: ^0.28.5
9 | postcss: ^8.3.6
10 | tailwindcss: ^2.2.7
11 | vite: ^2.4.3
12 | vite-plugin-async-catch: ^0.1.7
13 | vite-plugin-style-import: ^1.0.1
14 | vue: ^3.1.5
15 | vue-router: ^4.0.10
16 |
17 | dependencies:
18 | element-plus: 1.0.2-beta.62_vue@3.1.5
19 | ky: 0.28.5
20 | vue: 3.1.5
21 | vue-router: 4.0.10_vue@3.1.5
22 |
23 | devDependencies:
24 | '@vitejs/plugin-vue': 1.2.5_@vue+compiler-sfc@3.1.5
25 | '@vue/compiler-sfc': 3.1.5_vue@3.1.5
26 | autoprefixer: 10.3.1_postcss@8.3.6
27 | postcss: 8.3.6
28 | tailwindcss: 2.2.7_pnu2ipwencp2oscn5y27pgtyay
29 | vite: 2.4.3
30 | vite-plugin-async-catch: 0.1.7
31 | vite-plugin-style-import: 1.0.1_vite@2.4.3
32 |
33 | packages:
34 |
35 | /@babel/code-frame/7.14.5:
36 | resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==}
37 | engines: {node: '>=6.9.0'}
38 | dependencies:
39 | '@babel/highlight': 7.14.5
40 | dev: true
41 |
42 | /@babel/compat-data/7.14.7:
43 | resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==}
44 | engines: {node: '>=6.9.0'}
45 | dev: true
46 |
47 | /@babel/core/7.14.8:
48 | resolution: {integrity: sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==}
49 | engines: {node: '>=6.9.0'}
50 | dependencies:
51 | '@babel/code-frame': 7.14.5
52 | '@babel/generator': 7.14.8
53 | '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.8
54 | '@babel/helper-module-transforms': 7.14.8
55 | '@babel/helpers': 7.14.8
56 | '@babel/parser': 7.14.8
57 | '@babel/template': 7.14.5
58 | '@babel/traverse': 7.14.8
59 | '@babel/types': 7.14.8
60 | convert-source-map: 1.8.0
61 | debug: 4.3.2
62 | gensync: 1.0.0-beta.2
63 | json5: 2.2.0
64 | semver: 6.3.0
65 | source-map: 0.5.7
66 | transitivePeerDependencies:
67 | - supports-color
68 | dev: true
69 |
70 | /@babel/generator/7.14.8:
71 | resolution: {integrity: sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==}
72 | engines: {node: '>=6.9.0'}
73 | dependencies:
74 | '@babel/types': 7.14.8
75 | jsesc: 2.5.2
76 | source-map: 0.5.7
77 | dev: true
78 |
79 | /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8:
80 | resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==}
81 | engines: {node: '>=6.9.0'}
82 | peerDependencies:
83 | '@babel/core': ^7.0.0
84 | dependencies:
85 | '@babel/compat-data': 7.14.7
86 | '@babel/core': 7.14.8
87 | '@babel/helper-validator-option': 7.14.5
88 | browserslist: 4.16.6
89 | semver: 6.3.0
90 | dev: true
91 |
92 | /@babel/helper-function-name/7.14.5:
93 | resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==}
94 | engines: {node: '>=6.9.0'}
95 | dependencies:
96 | '@babel/helper-get-function-arity': 7.14.5
97 | '@babel/template': 7.14.5
98 | '@babel/types': 7.14.8
99 | dev: true
100 |
101 | /@babel/helper-get-function-arity/7.14.5:
102 | resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==}
103 | engines: {node: '>=6.9.0'}
104 | dependencies:
105 | '@babel/types': 7.14.8
106 | dev: true
107 |
108 | /@babel/helper-hoist-variables/7.14.5:
109 | resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==}
110 | engines: {node: '>=6.9.0'}
111 | dependencies:
112 | '@babel/types': 7.14.8
113 | dev: true
114 |
115 | /@babel/helper-member-expression-to-functions/7.14.7:
116 | resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==}
117 | engines: {node: '>=6.9.0'}
118 | dependencies:
119 | '@babel/types': 7.14.8
120 | dev: true
121 |
122 | /@babel/helper-module-imports/7.14.5:
123 | resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==}
124 | engines: {node: '>=6.9.0'}
125 | dependencies:
126 | '@babel/types': 7.14.8
127 | dev: true
128 |
129 | /@babel/helper-module-transforms/7.14.8:
130 | resolution: {integrity: sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==}
131 | engines: {node: '>=6.9.0'}
132 | dependencies:
133 | '@babel/helper-module-imports': 7.14.5
134 | '@babel/helper-replace-supers': 7.14.5
135 | '@babel/helper-simple-access': 7.14.8
136 | '@babel/helper-split-export-declaration': 7.14.5
137 | '@babel/helper-validator-identifier': 7.14.8
138 | '@babel/template': 7.14.5
139 | '@babel/traverse': 7.14.8
140 | '@babel/types': 7.14.8
141 | transitivePeerDependencies:
142 | - supports-color
143 | dev: true
144 |
145 | /@babel/helper-optimise-call-expression/7.14.5:
146 | resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==}
147 | engines: {node: '>=6.9.0'}
148 | dependencies:
149 | '@babel/types': 7.14.8
150 | dev: true
151 |
152 | /@babel/helper-replace-supers/7.14.5:
153 | resolution: {integrity: sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==}
154 | engines: {node: '>=6.9.0'}
155 | dependencies:
156 | '@babel/helper-member-expression-to-functions': 7.14.7
157 | '@babel/helper-optimise-call-expression': 7.14.5
158 | '@babel/traverse': 7.14.8
159 | '@babel/types': 7.14.8
160 | transitivePeerDependencies:
161 | - supports-color
162 | dev: true
163 |
164 | /@babel/helper-simple-access/7.14.8:
165 | resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==}
166 | engines: {node: '>=6.9.0'}
167 | dependencies:
168 | '@babel/types': 7.14.8
169 | dev: true
170 |
171 | /@babel/helper-split-export-declaration/7.14.5:
172 | resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==}
173 | engines: {node: '>=6.9.0'}
174 | dependencies:
175 | '@babel/types': 7.14.8
176 | dev: true
177 |
178 | /@babel/helper-validator-identifier/7.14.8:
179 | resolution: {integrity: sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==}
180 | engines: {node: '>=6.9.0'}
181 |
182 | /@babel/helper-validator-option/7.14.5:
183 | resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==}
184 | engines: {node: '>=6.9.0'}
185 | dev: true
186 |
187 | /@babel/helpers/7.14.8:
188 | resolution: {integrity: sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==}
189 | engines: {node: '>=6.9.0'}
190 | dependencies:
191 | '@babel/template': 7.14.5
192 | '@babel/traverse': 7.14.8
193 | '@babel/types': 7.14.8
194 | transitivePeerDependencies:
195 | - supports-color
196 | dev: true
197 |
198 | /@babel/highlight/7.14.5:
199 | resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==}
200 | engines: {node: '>=6.9.0'}
201 | dependencies:
202 | '@babel/helper-validator-identifier': 7.14.8
203 | chalk: 2.4.2
204 | js-tokens: 4.0.0
205 | dev: true
206 |
207 | /@babel/parser/7.14.8:
208 | resolution: {integrity: sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==}
209 | engines: {node: '>=6.0.0'}
210 | hasBin: true
211 |
212 | /@babel/template/7.14.5:
213 | resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==}
214 | engines: {node: '>=6.9.0'}
215 | dependencies:
216 | '@babel/code-frame': 7.14.5
217 | '@babel/parser': 7.14.8
218 | '@babel/types': 7.14.8
219 | dev: true
220 |
221 | /@babel/traverse/7.14.8:
222 | resolution: {integrity: sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==}
223 | engines: {node: '>=6.9.0'}
224 | dependencies:
225 | '@babel/code-frame': 7.14.5
226 | '@babel/generator': 7.14.8
227 | '@babel/helper-function-name': 7.14.5
228 | '@babel/helper-hoist-variables': 7.14.5
229 | '@babel/helper-split-export-declaration': 7.14.5
230 | '@babel/parser': 7.14.8
231 | '@babel/types': 7.14.8
232 | debug: 4.3.2
233 | globals: 11.12.0
234 | transitivePeerDependencies:
235 | - supports-color
236 | dev: true
237 |
238 | /@babel/types/7.14.8:
239 | resolution: {integrity: sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==}
240 | engines: {node: '>=6.9.0'}
241 | dependencies:
242 | '@babel/helper-validator-identifier': 7.14.8
243 | to-fast-properties: 2.0.0
244 |
245 | /@nodelib/fs.scandir/2.1.5:
246 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
247 | engines: {node: '>= 8'}
248 | dependencies:
249 | '@nodelib/fs.stat': 2.0.5
250 | run-parallel: 1.2.0
251 | dev: true
252 |
253 | /@nodelib/fs.stat/2.0.5:
254 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
255 | engines: {node: '>= 8'}
256 | dev: true
257 |
258 | /@nodelib/fs.walk/1.2.8:
259 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
260 | engines: {node: '>= 8'}
261 | dependencies:
262 | '@nodelib/fs.scandir': 2.1.5
263 | fastq: 1.11.1
264 | dev: true
265 |
266 | /@popperjs/core/2.9.2:
267 | resolution: {integrity: sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==}
268 | dev: false
269 |
270 | /@rollup/pluginutils/4.1.1:
271 | resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==}
272 | engines: {node: '>= 8.0.0'}
273 | dependencies:
274 | estree-walker: 2.0.2
275 | picomatch: 2.3.0
276 | dev: true
277 |
278 | /@types/babel__core/7.1.15:
279 | resolution: {integrity: sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==}
280 | dependencies:
281 | '@babel/parser': 7.14.8
282 | '@babel/types': 7.14.8
283 | '@types/babel__generator': 7.6.3
284 | '@types/babel__template': 7.4.1
285 | '@types/babel__traverse': 7.14.2
286 | dev: true
287 |
288 | /@types/babel__generator/7.6.3:
289 | resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==}
290 | dependencies:
291 | '@babel/types': 7.14.8
292 | dev: true
293 |
294 | /@types/babel__template/7.4.1:
295 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
296 | dependencies:
297 | '@babel/parser': 7.14.8
298 | '@babel/types': 7.14.8
299 | dev: true
300 |
301 | /@types/babel__traverse/7.14.2:
302 | resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==}
303 | dependencies:
304 | '@babel/types': 7.14.8
305 | dev: true
306 |
307 | /@types/estree/0.0.48:
308 | resolution: {integrity: sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==}
309 | dev: true
310 |
311 | /@types/parse-json/4.0.0:
312 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
313 | dev: true
314 |
315 | /@vitejs/plugin-vue/1.2.5_@vue+compiler-sfc@3.1.5:
316 | resolution: {integrity: sha512-GIR31mdXTEfvElmBUaRhDc5v7lfdkEdawWQqJRiaRL/5qKsH+xusukglkvJz5y7+c6dEpxgmvcATv2BbB7+fzQ==}
317 | engines: {node: '>=12.0.0'}
318 | peerDependencies:
319 | '@vue/compiler-sfc': ^3.0.8
320 | dependencies:
321 | '@vue/compiler-sfc': 3.1.5_vue@3.1.5
322 | dev: true
323 |
324 | /@vue/compiler-core/3.1.5:
325 | resolution: {integrity: sha512-TXBhFinoBaXKDykJzY26UEuQU1K07FOp/0Ie+OXySqqk0bS0ZO7Xvl7UmiTUPYcLrWbxWBR7Bs/y55AI0MNc2Q==}
326 | dependencies:
327 | '@babel/parser': 7.14.8
328 | '@babel/types': 7.14.8
329 | '@vue/shared': 3.1.5
330 | estree-walker: 2.0.2
331 | source-map: 0.6.1
332 |
333 | /@vue/compiler-dom/3.1.5:
334 | resolution: {integrity: sha512-ZsL3jqJ52OjGU/YiT/9XiuZAmWClKInZM2aFJh9gnsAPqOrj2JIELMbkIFpVKR/CrVO/f2VxfPiiQdQTr65jcQ==}
335 | dependencies:
336 | '@vue/compiler-core': 3.1.5
337 | '@vue/shared': 3.1.5
338 |
339 | /@vue/compiler-sfc/3.1.5_vue@3.1.5:
340 | resolution: {integrity: sha512-mtMY6xMvZeSRx9MTa1+NgJWndrkzVTdJ1pQAmAKQuxyb5LsHVvrgP7kcQFvxPHVpLVTORbTJWHaiqoKrJvi1iA==}
341 | peerDependencies:
342 | vue: 3.1.5
343 | dependencies:
344 | '@babel/parser': 7.14.8
345 | '@babel/types': 7.14.8
346 | '@types/estree': 0.0.48
347 | '@vue/compiler-core': 3.1.5
348 | '@vue/compiler-dom': 3.1.5
349 | '@vue/compiler-ssr': 3.1.5
350 | '@vue/shared': 3.1.5
351 | consolidate: 0.16.0
352 | estree-walker: 2.0.2
353 | hash-sum: 2.0.0
354 | lru-cache: 5.1.1
355 | magic-string: 0.25.7
356 | merge-source-map: 1.1.0
357 | postcss: 8.3.6
358 | postcss-modules: 4.2.2_postcss@8.3.6
359 | postcss-selector-parser: 6.0.6
360 | source-map: 0.6.1
361 | vue: 3.1.5
362 | dev: true
363 |
364 | /@vue/compiler-ssr/3.1.5:
365 | resolution: {integrity: sha512-CU5N7Di/a4lyJ18LGJxJYZS2a8PlLdWpWHX9p/XcsjT2TngMpj3QvHVRkuik2u8QrIDZ8OpYmTyj1WDNsOV+Dg==}
366 | dependencies:
367 | '@vue/compiler-dom': 3.1.5
368 | '@vue/shared': 3.1.5
369 | dev: true
370 |
371 | /@vue/devtools-api/6.0.0-beta.15:
372 | resolution: {integrity: sha512-quBx4Jjpexo6KDiNUGFr/zF/2A4srKM9S9v2uHgMXSU//hjgq1eGzqkIFql8T9gfX5ZaVOUzYBP3jIdIR3PKIA==}
373 | dev: false
374 |
375 | /@vue/reactivity/3.1.5:
376 | resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==}
377 | dependencies:
378 | '@vue/shared': 3.1.5
379 | dev: false
380 |
381 | /@vue/runtime-core/3.1.5:
382 | resolution: {integrity: sha512-YQbG5cBktN1RowQDKA22itmvQ+b40f0WgQ6CXK4VYoYICAiAfu6Cc14777ve8zp1rJRGtk5oIeS149TOculrTg==}
383 | dependencies:
384 | '@vue/reactivity': 3.1.5
385 | '@vue/shared': 3.1.5
386 | dev: false
387 |
388 | /@vue/runtime-dom/3.1.5:
389 | resolution: {integrity: sha512-tNcf3JhVR0RfW0kw1p8xZgv30nvX8Y9rsz7eiQ0dHe273sfoCngAG0y4GvMaY4Xd8FsjUwFedd4suQ8Lu8meXg==}
390 | dependencies:
391 | '@vue/runtime-core': 3.1.5
392 | '@vue/shared': 3.1.5
393 | csstype: 2.6.17
394 | dev: false
395 |
396 | /@vue/shared/3.1.5:
397 | resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==}
398 |
399 | /acorn-node/1.8.2:
400 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
401 | dependencies:
402 | acorn: 7.4.1
403 | acorn-walk: 7.2.0
404 | xtend: 4.0.2
405 | dev: true
406 |
407 | /acorn-walk/7.2.0:
408 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
409 | engines: {node: '>=0.4.0'}
410 | dev: true
411 |
412 | /acorn/7.4.1:
413 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
414 | engines: {node: '>=0.4.0'}
415 | hasBin: true
416 | dev: true
417 |
418 | /ansi-styles/3.2.1:
419 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
420 | engines: {node: '>=4'}
421 | dependencies:
422 | color-convert: 1.9.3
423 | dev: true
424 |
425 | /ansi-styles/4.3.0:
426 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
427 | engines: {node: '>=8'}
428 | dependencies:
429 | color-convert: 2.0.1
430 | dev: true
431 |
432 | /anymatch/3.1.2:
433 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
434 | engines: {node: '>= 8'}
435 | dependencies:
436 | normalize-path: 3.0.0
437 | picomatch: 2.3.0
438 | dev: true
439 |
440 | /arg/5.0.0:
441 | resolution: {integrity: sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==}
442 | dev: true
443 |
444 | /async-validator/3.5.2:
445 | resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==}
446 | dev: false
447 |
448 | /autoprefixer/10.3.1_postcss@8.3.6:
449 | resolution: {integrity: sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A==}
450 | engines: {node: ^10 || ^12 || >=14}
451 | hasBin: true
452 | peerDependencies:
453 | postcss: ^8.1.0
454 | dependencies:
455 | browserslist: 4.16.6
456 | caniuse-lite: 1.0.30001247
457 | colorette: 1.2.2
458 | fraction.js: 4.1.1
459 | normalize-range: 0.1.2
460 | postcss: 8.3.6
461 | postcss-value-parser: 4.1.0
462 | dev: true
463 |
464 | /balanced-match/1.0.2:
465 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
466 | dev: true
467 |
468 | /big.js/5.2.2:
469 | resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
470 | dev: true
471 |
472 | /binary-extensions/2.2.0:
473 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
474 | engines: {node: '>=8'}
475 | dev: true
476 |
477 | /bluebird/3.7.2:
478 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
479 | dev: true
480 |
481 | /brace-expansion/1.1.11:
482 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
483 | dependencies:
484 | balanced-match: 1.0.2
485 | concat-map: 0.0.1
486 | dev: true
487 |
488 | /braces/3.0.2:
489 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
490 | engines: {node: '>=8'}
491 | dependencies:
492 | fill-range: 7.0.1
493 | dev: true
494 |
495 | /browserslist/4.16.6:
496 | resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==}
497 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
498 | hasBin: true
499 | dependencies:
500 | caniuse-lite: 1.0.30001247
501 | colorette: 1.2.2
502 | electron-to-chromium: 1.3.786
503 | escalade: 3.1.1
504 | node-releases: 1.1.73
505 | dev: true
506 |
507 | /bytes/3.1.0:
508 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
509 | engines: {node: '>= 0.8'}
510 | dev: true
511 |
512 | /callsites/3.1.0:
513 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
514 | engines: {node: '>=6'}
515 | dev: true
516 |
517 | /camel-case/4.1.2:
518 | resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
519 | dependencies:
520 | pascal-case: 3.1.2
521 | tslib: 2.3.0
522 | dev: true
523 |
524 | /camelcase-css/2.0.1:
525 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
526 | engines: {node: '>= 6'}
527 | dev: true
528 |
529 | /caniuse-lite/1.0.30001247:
530 | resolution: {integrity: sha512-4rS7co+7+AoOSPRPOPUt5/GdaqZc0EsUpWk66ofE3HJTAajUK2Ss2VwoNzVN69ghg8lYYlh0an0Iy4LIHHo9UQ==}
531 | dev: true
532 |
533 | /capital-case/1.0.4:
534 | resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
535 | dependencies:
536 | no-case: 3.0.4
537 | tslib: 2.3.0
538 | upper-case-first: 2.0.2
539 | dev: true
540 |
541 | /chalk/2.4.2:
542 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
543 | engines: {node: '>=4'}
544 | dependencies:
545 | ansi-styles: 3.2.1
546 | escape-string-regexp: 1.0.5
547 | supports-color: 5.5.0
548 | dev: true
549 |
550 | /chalk/4.1.1:
551 | resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
552 | engines: {node: '>=10'}
553 | dependencies:
554 | ansi-styles: 4.3.0
555 | supports-color: 7.2.0
556 | dev: true
557 |
558 | /change-case/4.1.2:
559 | resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
560 | dependencies:
561 | camel-case: 4.1.2
562 | capital-case: 1.0.4
563 | constant-case: 3.0.4
564 | dot-case: 3.0.4
565 | header-case: 2.0.4
566 | no-case: 3.0.4
567 | param-case: 3.0.4
568 | pascal-case: 3.1.2
569 | path-case: 3.0.4
570 | sentence-case: 3.0.4
571 | snake-case: 3.0.4
572 | tslib: 2.3.0
573 | dev: true
574 |
575 | /chokidar/3.5.2:
576 | resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==}
577 | engines: {node: '>= 8.10.0'}
578 | dependencies:
579 | anymatch: 3.1.2
580 | braces: 3.0.2
581 | glob-parent: 5.1.2
582 | is-binary-path: 2.1.0
583 | is-glob: 4.0.1
584 | normalize-path: 3.0.0
585 | readdirp: 3.6.0
586 | optionalDependencies:
587 | fsevents: registry.npmmirror.com/fsevents/2.3.2
588 | dev: true
589 |
590 | /color-convert/1.9.3:
591 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
592 | dependencies:
593 | color-name: 1.1.3
594 | dev: true
595 |
596 | /color-convert/2.0.1:
597 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
598 | engines: {node: '>=7.0.0'}
599 | dependencies:
600 | color-name: 1.1.4
601 | dev: true
602 |
603 | /color-name/1.1.3:
604 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
605 | dev: true
606 |
607 | /color-name/1.1.4:
608 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
609 | dev: true
610 |
611 | /color-string/1.6.0:
612 | resolution: {integrity: sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==}
613 | dependencies:
614 | color-name: 1.1.4
615 | simple-swizzle: 0.2.2
616 | dev: true
617 |
618 | /color/3.2.1:
619 | resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
620 | dependencies:
621 | color-convert: 1.9.3
622 | color-string: 1.6.0
623 | dev: true
624 |
625 | /colorette/1.2.2:
626 | resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==}
627 | dev: true
628 |
629 | /commander/6.2.1:
630 | resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
631 | engines: {node: '>= 6'}
632 | dev: true
633 |
634 | /concat-map/0.0.1:
635 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
636 | dev: true
637 |
638 | /consolidate/0.16.0:
639 | resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==}
640 | engines: {node: '>= 0.10.0'}
641 | dependencies:
642 | bluebird: 3.7.2
643 | dev: true
644 |
645 | /constant-case/3.0.4:
646 | resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
647 | dependencies:
648 | no-case: 3.0.4
649 | tslib: 2.3.0
650 | upper-case: 2.0.2
651 | dev: true
652 |
653 | /convert-source-map/1.8.0:
654 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
655 | dependencies:
656 | safe-buffer: 5.1.2
657 | dev: true
658 |
659 | /cosmiconfig/7.0.0:
660 | resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==}
661 | engines: {node: '>=10'}
662 | dependencies:
663 | '@types/parse-json': 4.0.0
664 | import-fresh: 3.3.0
665 | parse-json: 5.2.0
666 | path-type: 4.0.0
667 | yaml: 1.10.2
668 | dev: true
669 |
670 | /css-unit-converter/1.1.2:
671 | resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==}
672 | dev: true
673 |
674 | /cssesc/3.0.0:
675 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
676 | engines: {node: '>=4'}
677 | hasBin: true
678 | dev: true
679 |
680 | /csstype/2.6.17:
681 | resolution: {integrity: sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==}
682 | dev: false
683 |
684 | /dayjs/1.10.6:
685 | resolution: {integrity: sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw==}
686 | dev: false
687 |
688 | /debug/4.3.2:
689 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
690 | engines: {node: '>=6.0'}
691 | peerDependencies:
692 | supports-color: '*'
693 | peerDependenciesMeta:
694 | supports-color:
695 | optional: true
696 | dependencies:
697 | ms: 2.1.2
698 | dev: true
699 |
700 | /defined/1.0.0:
701 | resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=}
702 | dev: true
703 |
704 | /detective/5.2.0:
705 | resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==}
706 | engines: {node: '>=0.8.0'}
707 | hasBin: true
708 | dependencies:
709 | acorn-node: 1.8.2
710 | defined: 1.0.0
711 | minimist: 1.2.5
712 | dev: true
713 |
714 | /didyoumean/1.2.2:
715 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
716 | dev: true
717 |
718 | /dlv/1.1.3:
719 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
720 | dev: true
721 |
722 | /dot-case/3.0.4:
723 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
724 | dependencies:
725 | no-case: 3.0.4
726 | tslib: 2.3.0
727 | dev: true
728 |
729 | /electron-to-chromium/1.3.786:
730 | resolution: {integrity: sha512-AmvbLBj3hepRk8v/DHrFF8gINxOFfDbrn6Ts3PcK46/FBdQb5OMmpamSpZQXSkfi77FfBzYtQtAk+00LCLYMVw==}
731 | dev: true
732 |
733 | /element-plus/1.0.2-beta.62_vue@3.1.5:
734 | resolution: {integrity: sha512-v4rMbL6p4z8PgsoYt8KtYf8Buw1exMeyVNpioouxH28dt/Cb9xVYbIUcJYWuKG+6IDkS+55RIsaNtUTLK7PZHg==}
735 | peerDependencies:
736 | vue: 3.1.x
737 | dependencies:
738 | '@popperjs/core': 2.9.2
739 | async-validator: 3.5.2
740 | dayjs: 1.10.6
741 | lodash: 4.17.21
742 | mitt: 2.1.0
743 | normalize-wheel: 1.0.1
744 | resize-observer-polyfill: 1.5.1
745 | vue: 3.1.5
746 | dev: false
747 |
748 | /emojis-list/3.0.0:
749 | resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
750 | engines: {node: '>= 4'}
751 | dev: true
752 |
753 | /error-ex/1.3.2:
754 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
755 | dependencies:
756 | is-arrayish: 0.2.1
757 | dev: true
758 |
759 | /es-module-lexer/0.6.0:
760 | resolution: {integrity: sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==}
761 | dev: true
762 |
763 | /esbuild/0.12.16:
764 | resolution: {integrity: sha512-XqI9cXP2bmQ6MREIqrYBb13KfYFSERsV1+e5jSVWps8dNlLZK+hln7d0mznzDIpfISsg/AgQW0DW3kSInXWhrg==}
765 | hasBin: true
766 | requiresBuild: true
767 | dev: true
768 |
769 | /escalade/3.1.1:
770 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
771 | engines: {node: '>=6'}
772 | dev: true
773 |
774 | /escape-string-regexp/1.0.5:
775 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
776 | engines: {node: '>=0.8.0'}
777 | dev: true
778 |
779 | /estree-walker/2.0.2:
780 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
781 |
782 | /fast-glob/3.2.7:
783 | resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==}
784 | engines: {node: '>=8'}
785 | dependencies:
786 | '@nodelib/fs.stat': 2.0.5
787 | '@nodelib/fs.walk': 1.2.8
788 | glob-parent: 5.1.2
789 | merge2: 1.4.1
790 | micromatch: 4.0.4
791 | dev: true
792 |
793 | /fastq/1.11.1:
794 | resolution: {integrity: sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==}
795 | dependencies:
796 | reusify: 1.0.4
797 | dev: true
798 |
799 | /fill-range/7.0.1:
800 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
801 | engines: {node: '>=8'}
802 | dependencies:
803 | to-regex-range: 5.0.1
804 | dev: true
805 |
806 | /fraction.js/4.1.1:
807 | resolution: {integrity: sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==}
808 | dev: true
809 |
810 | /fs-extra/10.0.0:
811 | resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==}
812 | engines: {node: '>=12'}
813 | dependencies:
814 | graceful-fs: 4.2.6
815 | jsonfile: 6.1.0
816 | universalify: 2.0.0
817 | dev: true
818 |
819 | /fs.realpath/1.0.0:
820 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
821 | dev: true
822 |
823 | /function-bind/1.1.1:
824 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
825 | dev: true
826 |
827 | /generic-names/2.0.1:
828 | resolution: {integrity: sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==}
829 | dependencies:
830 | loader-utils: 1.4.0
831 | dev: true
832 |
833 | /gensync/1.0.0-beta.2:
834 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
835 | engines: {node: '>=6.9.0'}
836 | dev: true
837 |
838 | /glob-parent/5.1.2:
839 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
840 | engines: {node: '>= 6'}
841 | dependencies:
842 | is-glob: 4.0.1
843 | dev: true
844 |
845 | /glob-parent/6.0.1:
846 | resolution: {integrity: sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==}
847 | engines: {node: '>=10.13.0'}
848 | dependencies:
849 | is-glob: 4.0.1
850 | dev: true
851 |
852 | /glob/7.1.7:
853 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
854 | dependencies:
855 | fs.realpath: 1.0.0
856 | inflight: 1.0.6
857 | inherits: 2.0.4
858 | minimatch: 3.0.4
859 | once: 1.4.0
860 | path-is-absolute: 1.0.1
861 | dev: true
862 |
863 | /globals/11.12.0:
864 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
865 | engines: {node: '>=4'}
866 | dev: true
867 |
868 | /graceful-fs/4.2.6:
869 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==}
870 | dev: true
871 |
872 | /has-flag/3.0.0:
873 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
874 | engines: {node: '>=4'}
875 | dev: true
876 |
877 | /has-flag/4.0.0:
878 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
879 | engines: {node: '>=8'}
880 | dev: true
881 |
882 | /has/1.0.3:
883 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
884 | engines: {node: '>= 0.4.0'}
885 | dependencies:
886 | function-bind: 1.1.1
887 | dev: true
888 |
889 | /hash-sum/2.0.0:
890 | resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
891 | dev: true
892 |
893 | /header-case/2.0.4:
894 | resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
895 | dependencies:
896 | capital-case: 1.0.4
897 | tslib: 2.3.0
898 | dev: true
899 |
900 | /html-tags/3.1.0:
901 | resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==}
902 | engines: {node: '>=8'}
903 | dev: true
904 |
905 | /icss-replace-symbols/1.1.0:
906 | resolution: {integrity: sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=}
907 | dev: true
908 |
909 | /icss-utils/5.1.0_postcss@8.3.6:
910 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
911 | engines: {node: ^10 || ^12 || >= 14}
912 | peerDependencies:
913 | postcss: ^8.1.0
914 | dependencies:
915 | postcss: 8.3.6
916 | dev: true
917 |
918 | /import-cwd/3.0.0:
919 | resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==}
920 | engines: {node: '>=8'}
921 | dependencies:
922 | import-from: 3.0.0
923 | dev: true
924 |
925 | /import-fresh/3.3.0:
926 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
927 | engines: {node: '>=6'}
928 | dependencies:
929 | parent-module: 1.0.1
930 | resolve-from: 4.0.0
931 | dev: true
932 |
933 | /import-from/3.0.0:
934 | resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==}
935 | engines: {node: '>=8'}
936 | dependencies:
937 | resolve-from: 5.0.0
938 | dev: true
939 |
940 | /inflight/1.0.6:
941 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
942 | dependencies:
943 | once: 1.4.0
944 | wrappy: 1.0.2
945 | dev: true
946 |
947 | /inherits/2.0.4:
948 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
949 | dev: true
950 |
951 | /is-arrayish/0.2.1:
952 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
953 | dev: true
954 |
955 | /is-arrayish/0.3.2:
956 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
957 | dev: true
958 |
959 | /is-binary-path/2.1.0:
960 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
961 | engines: {node: '>=8'}
962 | dependencies:
963 | binary-extensions: 2.2.0
964 | dev: true
965 |
966 | /is-core-module/2.5.0:
967 | resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==}
968 | dependencies:
969 | has: 1.0.3
970 | dev: true
971 |
972 | /is-extglob/2.1.1:
973 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
974 | engines: {node: '>=0.10.0'}
975 | dev: true
976 |
977 | /is-glob/4.0.1:
978 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
979 | engines: {node: '>=0.10.0'}
980 | dependencies:
981 | is-extglob: 2.1.1
982 | dev: true
983 |
984 | /is-number/7.0.0:
985 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
986 | engines: {node: '>=0.12.0'}
987 | dev: true
988 |
989 | /js-tokens/4.0.0:
990 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
991 | dev: true
992 |
993 | /jsesc/2.5.2:
994 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
995 | engines: {node: '>=4'}
996 | hasBin: true
997 | dev: true
998 |
999 | /json-parse-even-better-errors/2.3.1:
1000 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1001 | dev: true
1002 |
1003 | /json5/1.0.1:
1004 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
1005 | hasBin: true
1006 | dependencies:
1007 | minimist: 1.2.5
1008 | dev: true
1009 |
1010 | /json5/2.2.0:
1011 | resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==}
1012 | engines: {node: '>=6'}
1013 | hasBin: true
1014 | dependencies:
1015 | minimist: 1.2.5
1016 | dev: true
1017 |
1018 | /jsonfile/6.1.0:
1019 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1020 | dependencies:
1021 | universalify: 2.0.0
1022 | optionalDependencies:
1023 | graceful-fs: registry.npmmirror.com/graceful-fs/4.2.6
1024 | dev: true
1025 |
1026 | /ky/0.28.5:
1027 | resolution: {integrity: sha512-O5gg9kF4MeyfSw+YkgPAafOPwEUU6xcdGEJKUJmKpIPbLzk3oxUtY4OdBNekG7mawofzkyZ/ZHuR9ev5uZZdAA==}
1028 | engines: {node: '>=12'}
1029 | dev: false
1030 |
1031 | /lilconfig/2.0.3:
1032 | resolution: {integrity: sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==}
1033 | engines: {node: '>=10'}
1034 | dev: true
1035 |
1036 | /lines-and-columns/1.1.6:
1037 | resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=}
1038 | dev: true
1039 |
1040 | /loader-utils/1.4.0:
1041 | resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==}
1042 | engines: {node: '>=4.0.0'}
1043 | dependencies:
1044 | big.js: 5.2.2
1045 | emojis-list: 3.0.0
1046 | json5: 1.0.1
1047 | dev: true
1048 |
1049 | /lodash.camelcase/4.3.0:
1050 | resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=}
1051 | dev: true
1052 |
1053 | /lodash.toarray/4.4.0:
1054 | resolution: {integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE=}
1055 | dev: true
1056 |
1057 | /lodash.topath/4.5.2:
1058 | resolution: {integrity: sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=}
1059 | dev: true
1060 |
1061 | /lodash/4.17.21:
1062 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1063 |
1064 | /lower-case/2.0.2:
1065 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
1066 | dependencies:
1067 | tslib: 2.3.0
1068 | dev: true
1069 |
1070 | /lru-cache/5.1.1:
1071 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1072 | dependencies:
1073 | yallist: 3.1.1
1074 | dev: true
1075 |
1076 | /magic-string/0.25.7:
1077 | resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==}
1078 | dependencies:
1079 | sourcemap-codec: 1.4.8
1080 | dev: true
1081 |
1082 | /merge-source-map/1.1.0:
1083 | resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==}
1084 | dependencies:
1085 | source-map: 0.6.1
1086 | dev: true
1087 |
1088 | /merge2/1.4.1:
1089 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1090 | engines: {node: '>= 8'}
1091 | dev: true
1092 |
1093 | /micromatch/4.0.4:
1094 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==}
1095 | engines: {node: '>=8.6'}
1096 | dependencies:
1097 | braces: 3.0.2
1098 | picomatch: 2.3.0
1099 | dev: true
1100 |
1101 | /minimatch/3.0.4:
1102 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
1103 | dependencies:
1104 | brace-expansion: 1.1.11
1105 | dev: true
1106 |
1107 | /minimist/1.2.5:
1108 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
1109 | dev: true
1110 |
1111 | /mitt/2.1.0:
1112 | resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==}
1113 | dev: false
1114 |
1115 | /modern-normalize/1.1.0:
1116 | resolution: {integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==}
1117 | engines: {node: '>=6'}
1118 | dev: true
1119 |
1120 | /ms/2.1.2:
1121 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1122 | dev: true
1123 |
1124 | /nanoid/3.1.23:
1125 | resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==}
1126 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1127 | hasBin: true
1128 | dev: true
1129 |
1130 | /no-case/3.0.4:
1131 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
1132 | dependencies:
1133 | lower-case: 2.0.2
1134 | tslib: 2.3.0
1135 | dev: true
1136 |
1137 | /node-emoji/1.10.0:
1138 | resolution: {integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==}
1139 | dependencies:
1140 | lodash.toarray: 4.4.0
1141 | dev: true
1142 |
1143 | /node-releases/1.1.73:
1144 | resolution: {integrity: sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==}
1145 | dev: true
1146 |
1147 | /normalize-path/3.0.0:
1148 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1149 | engines: {node: '>=0.10.0'}
1150 | dev: true
1151 |
1152 | /normalize-range/0.1.2:
1153 | resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=}
1154 | engines: {node: '>=0.10.0'}
1155 | dev: true
1156 |
1157 | /normalize-wheel/1.0.1:
1158 | resolution: {integrity: sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=}
1159 | dev: false
1160 |
1161 | /object-hash/2.2.0:
1162 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
1163 | engines: {node: '>= 6'}
1164 | dev: true
1165 |
1166 | /once/1.4.0:
1167 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
1168 | dependencies:
1169 | wrappy: 1.0.2
1170 | dev: true
1171 |
1172 | /param-case/3.0.4:
1173 | resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
1174 | dependencies:
1175 | dot-case: 3.0.4
1176 | tslib: 2.3.0
1177 | dev: true
1178 |
1179 | /parent-module/1.0.1:
1180 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1181 | engines: {node: '>=6'}
1182 | dependencies:
1183 | callsites: 3.1.0
1184 | dev: true
1185 |
1186 | /parse-json/5.2.0:
1187 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
1188 | engines: {node: '>=8'}
1189 | dependencies:
1190 | '@babel/code-frame': 7.14.5
1191 | error-ex: 1.3.2
1192 | json-parse-even-better-errors: 2.3.1
1193 | lines-and-columns: 1.1.6
1194 | dev: true
1195 |
1196 | /pascal-case/3.1.2:
1197 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
1198 | dependencies:
1199 | no-case: 3.0.4
1200 | tslib: 2.3.0
1201 | dev: true
1202 |
1203 | /path-case/3.0.4:
1204 | resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
1205 | dependencies:
1206 | dot-case: 3.0.4
1207 | tslib: 2.3.0
1208 | dev: true
1209 |
1210 | /path-is-absolute/1.0.1:
1211 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
1212 | engines: {node: '>=0.10.0'}
1213 | dev: true
1214 |
1215 | /path-parse/1.0.7:
1216 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1217 | dev: true
1218 |
1219 | /path-type/4.0.0:
1220 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1221 | engines: {node: '>=8'}
1222 | dev: true
1223 |
1224 | /picomatch/2.3.0:
1225 | resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==}
1226 | engines: {node: '>=8.6'}
1227 | dev: true
1228 |
1229 | /postcss-js/3.0.3:
1230 | resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==}
1231 | engines: {node: '>=10.0'}
1232 | dependencies:
1233 | camelcase-css: 2.0.1
1234 | postcss: 8.3.6
1235 | dev: true
1236 |
1237 | /postcss-load-config/3.1.0:
1238 | resolution: {integrity: sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==}
1239 | engines: {node: '>= 10'}
1240 | peerDependencies:
1241 | ts-node: '>=9.0.0'
1242 | peerDependenciesMeta:
1243 | ts-node:
1244 | optional: true
1245 | dependencies:
1246 | import-cwd: 3.0.0
1247 | lilconfig: 2.0.3
1248 | yaml: 1.10.2
1249 | dev: true
1250 |
1251 | /postcss-modules-extract-imports/3.0.0_postcss@8.3.6:
1252 | resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
1253 | engines: {node: ^10 || ^12 || >= 14}
1254 | peerDependencies:
1255 | postcss: ^8.1.0
1256 | dependencies:
1257 | postcss: 8.3.6
1258 | dev: true
1259 |
1260 | /postcss-modules-local-by-default/4.0.0_postcss@8.3.6:
1261 | resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==}
1262 | engines: {node: ^10 || ^12 || >= 14}
1263 | peerDependencies:
1264 | postcss: ^8.1.0
1265 | dependencies:
1266 | icss-utils: 5.1.0_postcss@8.3.6
1267 | postcss: 8.3.6
1268 | postcss-selector-parser: 6.0.6
1269 | postcss-value-parser: 4.1.0
1270 | dev: true
1271 |
1272 | /postcss-modules-scope/3.0.0_postcss@8.3.6:
1273 | resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
1274 | engines: {node: ^10 || ^12 || >= 14}
1275 | peerDependencies:
1276 | postcss: ^8.1.0
1277 | dependencies:
1278 | postcss: 8.3.6
1279 | postcss-selector-parser: 6.0.6
1280 | dev: true
1281 |
1282 | /postcss-modules-values/4.0.0_postcss@8.3.6:
1283 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
1284 | engines: {node: ^10 || ^12 || >= 14}
1285 | peerDependencies:
1286 | postcss: ^8.1.0
1287 | dependencies:
1288 | icss-utils: 5.1.0_postcss@8.3.6
1289 | postcss: 8.3.6
1290 | dev: true
1291 |
1292 | /postcss-modules/4.2.2_postcss@8.3.6:
1293 | resolution: {integrity: sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==}
1294 | peerDependencies:
1295 | postcss: ^8.0.0
1296 | dependencies:
1297 | generic-names: 2.0.1
1298 | icss-replace-symbols: 1.1.0
1299 | lodash.camelcase: 4.3.0
1300 | postcss: 8.3.6
1301 | postcss-modules-extract-imports: 3.0.0_postcss@8.3.6
1302 | postcss-modules-local-by-default: 4.0.0_postcss@8.3.6
1303 | postcss-modules-scope: 3.0.0_postcss@8.3.6
1304 | postcss-modules-values: 4.0.0_postcss@8.3.6
1305 | string-hash: 1.1.3
1306 | dev: true
1307 |
1308 | /postcss-nested/5.0.5_postcss@8.3.6:
1309 | resolution: {integrity: sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==}
1310 | engines: {node: '>=10.0'}
1311 | peerDependencies:
1312 | postcss: ^8.1.13
1313 | dependencies:
1314 | postcss: 8.3.6
1315 | postcss-selector-parser: 6.0.6
1316 | dev: true
1317 |
1318 | /postcss-selector-parser/6.0.6:
1319 | resolution: {integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==}
1320 | engines: {node: '>=4'}
1321 | dependencies:
1322 | cssesc: 3.0.0
1323 | util-deprecate: 1.0.2
1324 | dev: true
1325 |
1326 | /postcss-value-parser/3.3.1:
1327 | resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==}
1328 | dev: true
1329 |
1330 | /postcss-value-parser/4.1.0:
1331 | resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==}
1332 | dev: true
1333 |
1334 | /postcss/8.3.6:
1335 | resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==}
1336 | engines: {node: ^10 || ^12 || >=14}
1337 | dependencies:
1338 | colorette: 1.2.2
1339 | nanoid: 3.1.23
1340 | source-map-js: 0.6.2
1341 | dev: true
1342 |
1343 | /pretty-hrtime/1.0.3:
1344 | resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=}
1345 | engines: {node: '>= 0.8'}
1346 | dev: true
1347 |
1348 | /purgecss/4.0.3:
1349 | resolution: {integrity: sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==}
1350 | hasBin: true
1351 | dependencies:
1352 | commander: 6.2.1
1353 | glob: 7.1.7
1354 | postcss: 8.3.6
1355 | postcss-selector-parser: 6.0.6
1356 | dev: true
1357 |
1358 | /queue-microtask/1.2.3:
1359 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1360 | dev: true
1361 |
1362 | /quick-lru/5.1.1:
1363 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
1364 | engines: {node: '>=10'}
1365 | dev: true
1366 |
1367 | /readdirp/3.6.0:
1368 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1369 | engines: {node: '>=8.10.0'}
1370 | dependencies:
1371 | picomatch: 2.3.0
1372 | dev: true
1373 |
1374 | /reduce-css-calc/2.1.8:
1375 | resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==}
1376 | dependencies:
1377 | css-unit-converter: 1.1.2
1378 | postcss-value-parser: 3.3.1
1379 | dev: true
1380 |
1381 | /resize-observer-polyfill/1.5.1:
1382 | resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
1383 | dev: false
1384 |
1385 | /resolve-from/4.0.0:
1386 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1387 | engines: {node: '>=4'}
1388 | dev: true
1389 |
1390 | /resolve-from/5.0.0:
1391 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1392 | engines: {node: '>=8'}
1393 | dev: true
1394 |
1395 | /resolve/1.20.0:
1396 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
1397 | dependencies:
1398 | is-core-module: 2.5.0
1399 | path-parse: 1.0.7
1400 | dev: true
1401 |
1402 | /reusify/1.0.4:
1403 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1404 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1405 | dev: true
1406 |
1407 | /rimraf/3.0.2:
1408 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1409 | hasBin: true
1410 | dependencies:
1411 | glob: 7.1.7
1412 | dev: true
1413 |
1414 | /rollup/2.54.0:
1415 | resolution: {integrity: sha512-RHzvstAVwm9A751NxWIbGPFXs3zL4qe/eYg+N7WwGtIXVLy1cK64MiU37+hXeFm1jqipK6DGgMi6Z2hhPuCC3A==}
1416 | engines: {node: '>=10.0.0'}
1417 | hasBin: true
1418 | optionalDependencies:
1419 | fsevents: registry.npmmirror.com/fsevents/2.3.2
1420 | dev: true
1421 |
1422 | /run-parallel/1.2.0:
1423 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1424 | dependencies:
1425 | queue-microtask: 1.2.3
1426 | dev: true
1427 |
1428 | /safe-buffer/5.1.2:
1429 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1430 | dev: true
1431 |
1432 | /semver/6.3.0:
1433 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1434 | hasBin: true
1435 | dev: true
1436 |
1437 | /sentence-case/3.0.4:
1438 | resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
1439 | dependencies:
1440 | no-case: 3.0.4
1441 | tslib: 2.3.0
1442 | upper-case-first: 2.0.2
1443 | dev: true
1444 |
1445 | /simple-swizzle/0.2.2:
1446 | resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=}
1447 | dependencies:
1448 | is-arrayish: 0.3.2
1449 | dev: true
1450 |
1451 | /snake-case/3.0.4:
1452 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
1453 | dependencies:
1454 | dot-case: 3.0.4
1455 | tslib: 2.3.0
1456 | dev: true
1457 |
1458 | /source-map-js/0.6.2:
1459 | resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==}
1460 | engines: {node: '>=0.10.0'}
1461 | dev: true
1462 |
1463 | /source-map/0.5.7:
1464 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
1465 | engines: {node: '>=0.10.0'}
1466 | dev: true
1467 |
1468 | /source-map/0.6.1:
1469 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1470 | engines: {node: '>=0.10.0'}
1471 |
1472 | /sourcemap-codec/1.4.8:
1473 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1474 | dev: true
1475 |
1476 | /string-hash/1.1.3:
1477 | resolution: {integrity: sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=}
1478 | dev: true
1479 |
1480 | /supports-color/5.5.0:
1481 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1482 | engines: {node: '>=4'}
1483 | dependencies:
1484 | has-flag: 3.0.0
1485 | dev: true
1486 |
1487 | /supports-color/7.2.0:
1488 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1489 | engines: {node: '>=8'}
1490 | dependencies:
1491 | has-flag: 4.0.0
1492 | dev: true
1493 |
1494 | /tailwindcss/2.2.7_pnu2ipwencp2oscn5y27pgtyay:
1495 | resolution: {integrity: sha512-jv35rugP5j8PpzbXnsria7ZAry7Evh0KtQ4MZqNd+PhF+oIKPwJTVwe/rmfRx9cZw3W7iPZyzBmeoAoNwfJ1yg==}
1496 | engines: {node: '>=12.13.0'}
1497 | hasBin: true
1498 | peerDependencies:
1499 | autoprefixer: ^10.0.2
1500 | postcss: ^8.0.9
1501 | dependencies:
1502 | arg: 5.0.0
1503 | autoprefixer: 10.3.1_postcss@8.3.6
1504 | bytes: 3.1.0
1505 | chalk: 4.1.1
1506 | chokidar: 3.5.2
1507 | color: 3.2.1
1508 | cosmiconfig: 7.0.0
1509 | detective: 5.2.0
1510 | didyoumean: 1.2.2
1511 | dlv: 1.1.3
1512 | fast-glob: 3.2.7
1513 | fs-extra: 10.0.0
1514 | glob-parent: 6.0.1
1515 | html-tags: 3.1.0
1516 | is-glob: 4.0.1
1517 | lodash: 4.17.21
1518 | lodash.topath: 4.5.2
1519 | modern-normalize: 1.1.0
1520 | node-emoji: 1.10.0
1521 | normalize-path: 3.0.0
1522 | object-hash: 2.2.0
1523 | postcss: 8.3.6
1524 | postcss-js: 3.0.3
1525 | postcss-load-config: 3.1.0
1526 | postcss-nested: 5.0.5_postcss@8.3.6
1527 | postcss-selector-parser: 6.0.6
1528 | postcss-value-parser: 4.1.0
1529 | pretty-hrtime: 1.0.3
1530 | purgecss: 4.0.3
1531 | quick-lru: 5.1.1
1532 | reduce-css-calc: 2.1.8
1533 | resolve: 1.20.0
1534 | tmp: 0.2.1
1535 | transitivePeerDependencies:
1536 | - ts-node
1537 | dev: true
1538 |
1539 | /tmp/0.2.1:
1540 | resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
1541 | engines: {node: '>=8.17.0'}
1542 | dependencies:
1543 | rimraf: 3.0.2
1544 | dev: true
1545 |
1546 | /to-fast-properties/2.0.0:
1547 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
1548 | engines: {node: '>=4'}
1549 |
1550 | /to-regex-range/5.0.1:
1551 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1552 | engines: {node: '>=8.0'}
1553 | dependencies:
1554 | is-number: 7.0.0
1555 | dev: true
1556 |
1557 | /tslib/2.3.0:
1558 | resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
1559 | dev: true
1560 |
1561 | /universalify/2.0.0:
1562 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
1563 | engines: {node: '>= 10.0.0'}
1564 | dev: true
1565 |
1566 | /upper-case-first/2.0.2:
1567 | resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
1568 | dependencies:
1569 | tslib: 2.3.0
1570 | dev: true
1571 |
1572 | /upper-case/2.0.2:
1573 | resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
1574 | dependencies:
1575 | tslib: 2.3.0
1576 | dev: true
1577 |
1578 | /util-deprecate/1.0.2:
1579 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
1580 | dev: true
1581 |
1582 | /vite-plugin-async-catch/0.1.7:
1583 | resolution: {integrity: sha512-EsVnrKHkPewMJFC/oz+49X41Pc5VNVHhlkmrx2ONCxci5iqwh8yyrsYKkF3D2pXdgpjnhqtUQhqqBQ4ZUcGrLg==}
1584 | dependencies:
1585 | '@babel/core': 7.14.8
1586 | '@babel/parser': 7.14.8
1587 | '@babel/traverse': 7.14.8
1588 | '@babel/types': 7.14.8
1589 | '@types/babel__core': 7.1.15
1590 | '@types/babel__traverse': 7.14.2
1591 | transitivePeerDependencies:
1592 | - supports-color
1593 | dev: true
1594 |
1595 | /vite-plugin-style-import/1.0.1_vite@2.4.3:
1596 | resolution: {integrity: sha512-qinzdBxqkmX4fEyLZJVIBQTrgKivbROgcKJfBRz66knbghYAoe9cQeRptWKh35hE7obiidItWSCrHWkeu+JMVw==}
1597 | peerDependencies:
1598 | vite: '>=2.0.0'
1599 | dependencies:
1600 | '@rollup/pluginutils': 4.1.1
1601 | change-case: 4.1.2
1602 | debug: 4.3.2
1603 | es-module-lexer: 0.6.0
1604 | magic-string: 0.25.7
1605 | vite: 2.4.3
1606 | transitivePeerDependencies:
1607 | - supports-color
1608 | dev: true
1609 |
1610 | /vite/2.4.3:
1611 | resolution: {integrity: sha512-iT6NPeiUUZ2FkzC3eazytOEMRaM4J+xgRQcNcpRcbmfYjakCFP4WKPJpeEz1U5JEKHAtwv3ZBQketQUFhFU3ng==}
1612 | engines: {node: '>=12.0.0'}
1613 | hasBin: true
1614 | dependencies:
1615 | esbuild: 0.12.16
1616 | postcss: 8.3.6
1617 | resolve: 1.20.0
1618 | rollup: 2.54.0
1619 | optionalDependencies:
1620 | fsevents: registry.npmmirror.com/fsevents/2.3.2
1621 | dev: true
1622 |
1623 | /vue-router/4.0.10_vue@3.1.5:
1624 | resolution: {integrity: sha512-YbPf6QnZpyyWfnk7CUt2Bme+vo7TLfg1nGZNkvYqKYh4vLaFw6Gn8bPGdmt5m4qrGnKoXLqc4htAsd3dIukICA==}
1625 | peerDependencies:
1626 | vue: ^3.0.0
1627 | dependencies:
1628 | '@vue/devtools-api': 6.0.0-beta.15
1629 | vue: 3.1.5
1630 | dev: false
1631 |
1632 | /vue/3.1.5:
1633 | resolution: {integrity: sha512-Ho7HNb1nfDoO+HVb6qYZgeaobt1XbY6KXFe4HGs1b9X6RhkWG/113n4/SrtM1LUclM6OrP/Se5aPHHvAPG1iVQ==}
1634 | dependencies:
1635 | '@vue/compiler-dom': 3.1.5
1636 | '@vue/runtime-dom': 3.1.5
1637 | '@vue/shared': 3.1.5
1638 | dev: false
1639 |
1640 | /wrappy/1.0.2:
1641 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
1642 | dev: true
1643 |
1644 | /xtend/4.0.2:
1645 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
1646 | engines: {node: '>=0.4'}
1647 | dev: true
1648 |
1649 | /yallist/3.1.1:
1650 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1651 | dev: true
1652 |
1653 | /yaml/1.10.2:
1654 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
1655 | engines: {node: '>= 6'}
1656 | dev: true
1657 |
1658 | registry.npmmirror.com/fsevents/2.3.2:
1659 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
1660 | name: fsevents
1661 | version: 2.3.2
1662 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1663 | os: [darwin]
1664 | requiresBuild: true
1665 | dev: true
1666 | optional: true
1667 |
1668 | registry.npmmirror.com/graceful-fs/4.2.6:
1669 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.6.tgz}
1670 | name: graceful-fs
1671 | version: 4.2.6
1672 | requiresBuild: true
1673 | dev: true
1674 | optional: true
1675 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/frontend/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
16 |
17 |
63 |
--------------------------------------------------------------------------------
/frontend/src/api/index.js:
--------------------------------------------------------------------------------
1 | import ky from 'ky'
2 |
3 | const VITE_API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api'
4 |
5 | const api = ky.create({prefixUrl: VITE_API_BASE_URL, retry: {limit: 0}})
6 |
7 | export function getInfoAPI() {
8 | return api.get('info').json()
9 | }
10 |
11 | export function login(body) {
12 | return api.post('login', {json: body}).json()
13 | }
14 |
15 | export function registerUser(body) {
16 | return api.post('register', {json: body}).json()
17 | }
18 |
19 | export function verifyToken(token) {
20 | return api.post('verifyToken', {json: {token}}).json()
21 | }
22 |
23 | export function getAllConfig(token){
24 | const searchParams = new URLSearchParams()
25 | searchParams.set('token', token)
26 | return api.get('getAllConfig', {searchParams: searchParams}).json()
27 | }
28 |
29 | export function saveConfig(body) {
30 | return api.post('saveConfig', {json: body}).json()
31 | }
32 |
33 |
34 | export function getUserInfoAPI() {
35 | const searchParams = new URLSearchParams()
36 | searchParams.set('eid', localStorage.getItem('eid'))
37 | searchParams.set('encryptUsername', localStorage.getItem('encryptUsername'))
38 | return api.get('userinfo', {searchParams}).json()
39 | }
40 |
41 | export function delAccountAPI(body) {
42 | return api.post('delete', {json: body}).json()
43 | }
44 |
45 | export function updateAPI(body) {
46 | return api.post('update', {json: body}).json()
47 | }
48 |
49 | export function disableAPI(body) {
50 | return api.post('disable', {json: body}).json()
51 | }
52 |
53 | export function enableAPI(body) {
54 | return api.post('enable', {json: body}).json()
55 | }
56 |
57 | export function getContent() {
58 | return api.get('getContent').json()
59 | }
60 |
61 | export function setContent(body) {
62 | return api.post('setContent', {json: body}).json()
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/frontend/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/frontend/src/assets/logo.png
--------------------------------------------------------------------------------
/frontend/src/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
17 |
25 |
26 |
34 |
--------------------------------------------------------------------------------
/frontend/src/components/Logo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
16 |
--------------------------------------------------------------------------------
/frontend/src/components/updateLog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
61 |
62 |
63 |
64 |
121 |
122 |
135 |
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
--------------------------------------------------------------------------------
/frontend/src/main.js:
--------------------------------------------------------------------------------
1 | import {
2 | ElButton,
3 | ElInput,
4 | ElMessage,
5 | ElForm,
6 | ElFormItem,
7 | ElMessageBox,
8 | ElTabs,
9 | ElTabPane,
10 | ElDialog,
11 | ElLink,
12 | ElLoading,
13 | ElSwitch,
14 | ElIcon
15 | } from 'element-plus'
16 | import 'element-plus/es/components/message/style/css'
17 | import 'element-plus/es/components/message-box/style/css'
18 | import 'element-plus/dist/index.css'
19 | import {createApp} from 'vue'
20 | import { createPinia } from 'pinia'
21 | import App from './App.vue'
22 | import './index.css'
23 | import router from './router'
24 | import * as ElementPlusIconsVue from '@element-plus/icons-vue'
25 |
26 | const components = [ElButton, ElInput, ElMessageBox, ElSwitch, ElMessage, ElForm, ElFormItem, ElTabs, ElTabPane, ElDialog, ElLink, ElIcon]
27 | const plugins = [ElMessage, ElMessageBox, ElLoading]
28 |
29 | const pinia = createPinia();
30 | const app = createApp(App)
31 |
32 | for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
33 | app.component(key, component)
34 | }
35 |
36 | components.forEach((component) => {
37 | app.component(component.name, component)
38 | })
39 |
40 | plugins.forEach((plugin) => {
41 | app.use(plugin)
42 | })
43 |
44 | app.use(pinia)
45 | app.use(router)
46 | app.mount('#app')
47 |
--------------------------------------------------------------------------------
/frontend/src/manageStore.js:
--------------------------------------------------------------------------------
1 | import {defineStore} from "pinia";
2 | import {ref} from "vue";
3 | import {ElMessage} from "element-plus";
4 |
5 | export const useManageStore = defineStore('manage', {
6 | // 为了完整类型推理,推荐使用箭头函数
7 | state: () => {
8 | return {
9 | token: ''
10 | }
11 | },
12 | actions: {
13 | alertMsg(type, msg) {
14 | if (type === 'success') {
15 | ElMessage.success(msg)
16 | } else {
17 | ElMessage.error(msg)
18 | }
19 | }
20 | }
21 | })
22 |
--------------------------------------------------------------------------------
/frontend/src/router.js:
--------------------------------------------------------------------------------
1 | import Index from '@/views/index.vue'
2 | import manage from '@/views/manage.vue'
3 | import Login from '@/views/login.vue'
4 | import { createRouter, createWebHashHistory } from 'vue-router'
5 |
6 | const routes = [
7 | { path: '/',name:'index', component: Index },
8 | { path: '/manage',name:'manage', component: manage },
9 | { path: '/login',name:'login', component: Login },
10 | ]
11 |
12 | const router = createRouter({
13 | history: createWebHashHistory(),
14 | routes,
15 | })
16 |
17 | export default router
18 |
--------------------------------------------------------------------------------
/frontend/src/views/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
用户名:{{ nickName }}
11 |
更新时间:{{ timestamp }}
12 |
状态:过期已禁用
正常
14 |
15 |
25 |
26 |
27 |
28 |
31 |
32 |
33 |
34 |
36 |
37 |
40 |
41 |
42 |
43 |
46 |
47 |
48 |
49 |
51 |
52 |
55 |
56 |
57 |
58 |
59 |
266 |
267 |
283 |
--------------------------------------------------------------------------------
/frontend/src/views/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
15 |
22 |
23 |
24 |
25 |
27 |
28 |
29 |
31 |
32 |
33 |
34 |
35 |
36 | 登录
38 |
39 | 注册
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
56 |
57 |
58 |
59 |
61 |
62 |
63 |
65 |
66 |
67 | 确定
68 | 返回
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
242 |
243 |
263 |
--------------------------------------------------------------------------------
/frontend/src/views/manage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
40 |
43 |
44 |
45 |
46 |
47 |
48 |
50 |
51 |
52 | 保存
53 |
54 |
55 |
56 |
58 |
59 |
60 |
{{ '自定义' + item.name }}
61 |
66 |
67 | 修改
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
295 |
296 |
312 |
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
3 | important: '#app',
4 | darkMode: false, // or 'media' or 'class'
5 | theme: {
6 | extend: {},
7 | },
8 | variants: {
9 | extend: {},
10 | },
11 | plugins: [],
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/vite.config.js:
--------------------------------------------------------------------------------
1 | import vue from '@vitejs/plugin-vue'
2 | import path from 'path'
3 | import { defineConfig } from 'vite'
4 | import ElementPlus from 'unplugin-element-plus/vite'
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | plugins: [
9 | vue(),
10 | ElementPlus()
11 | ],
12 | resolve: {
13 | alias: {
14 | '@': path.resolve(__dirname, 'src'),
15 | },
16 | },
17 | build: {
18 | outDir: '../backend/static',
19 | }
20 | })
21 |
--------------------------------------------------------------------------------
/img/img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/img/img.png
--------------------------------------------------------------------------------
/img/img_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/img/img_1.png
--------------------------------------------------------------------------------
/img/img_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/img/img_2.png
--------------------------------------------------------------------------------
/img/img_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/img/img_3.png
--------------------------------------------------------------------------------
/img/img_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SvenShi/sven_ninja/7da01632e579a31f79e4c7289e541e2fcab45943/img/img_5.png
--------------------------------------------------------------------------------