diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..9145d2d --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,7 @@ +{ + "tabWidth": 4, + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "endOfLine": "lf" +} diff --git a/frontend/README.md b/frontend/README.md deleted file mode 100644 index 576b980..0000000 --- a/frontend/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# frontend - -## Project setup -``` -npm install -``` - -### Compiles and hot-reloads for development -``` -npm run serve -``` - -### Compiles and minifies for production -``` -npm run build -``` - -### Lints and fixes files -``` -npm run lint -``` - -### Customize configuration -See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/frontend/babel.config.js b/frontend/babel.config.js index 162a3ea..1f4c9ae 100644 --- a/frontend/babel.config.js +++ b/frontend/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: ["@vue/cli-plugin-babel/preset"], + presets: ['@vue/cli-plugin-babel/preset'] }; diff --git a/frontend/eslintrc.js b/frontend/eslintrc.js new file mode 100644 index 0000000..fc186bc --- /dev/null +++ b/frontend/eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module' + }, + plugins: ['@typescript-eslint/eslint-plugin', 'no-relative-import-paths'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended' + ], + root: true, + env: { + node: true, + jest: true + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'no-relative-import-paths/no-relative-import-paths': [ + 'error', + { allowSameFolder: true, rootDir: 'src' } + ] + } +}; diff --git a/frontend/package.json b/frontend/package.json index 72570a1..1dee7ce 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,64 +1,64 @@ { - "name": "frontend", - "version": "0.1.0", - "private": true, - "scripts": { - "serve": "vue-cli-service build --watch", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint" - }, - "dependencies": { - "axios": "^0.27.2", - "class-transformer": "^0.5.1", - "class-validator": "^0.13.2", - "core-js": "^3.8.3", - "filesize": "^9.0.11", - "jwt-decode": "^3.1.2", - "naive-ui": "^2.32.1", - "stream-browserify": "^3.0.0", - "util": "^0.12.4", - "vue": "^3.2.13", - "vue-router": "^4.0.3" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "@vue/cli-plugin-babel": "~5.0.0", - "@vue/cli-plugin-eslint": "~5.0.0", - "@vue/cli-plugin-router": "~5.0.0", - "@vue/cli-plugin-typescript": "~5.0.0", - "@vue/cli-service": "~5.0.0", - "@vue/eslint-config-typescript": "^9.1.0", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-vue": "^8.0.3", - "prettier": "^2.4.1", - "sass": "^1.32.7", - "sass-loader": "^12.0.0", - "typescript": "~4.5.5", - "vfonts": "^0.0.3" - }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "plugin:vue/vue3-essential", - "eslint:recommended", - "@vue/typescript/recommended", - "plugin:prettier/recommended" - ], - "parserOptions": { - "ecmaVersion": 2020 - }, - "rules": {} - }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not dead", - "not ie 11" - ] + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service build --watch --dest ../run/static", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "axios": "^0.27.2", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", + "core-js": "^3.8.3", + "filesize": "^9.0.11", + "jwt-decode": "^3.1.2", + "naive-ui": "^2.32.1", + "stream-browserify": "^3.0.0", + "util": "^0.12.4", + "vue": "^3.2.13", + "vue-router": "^4.0.3" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.4.0", + "@typescript-eslint/parser": "^5.4.0", + "@vue/cli-plugin-babel": "~5.0.0", + "@vue/cli-plugin-eslint": "~5.0.0", + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-typescript": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "@vue/eslint-config-typescript": "^9.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-vue": "^8.0.3", + "prettier": "^2.4.1", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "typescript": "~4.5.5", + "vfonts": "^0.0.3" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/typescript/recommended", + "plugin:prettier/recommended" + ], + "parserOptions": { + "ecmaVersion": 2020 + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead", + "not ie 11" + ] } diff --git a/frontend/public/index.html b/frontend/public/index.html index 05b8556..ed5728d 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,18 +1,22 @@ - - - - - - - <%= htmlWebpackPlugin.options.title %> - - - -
- - + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + diff --git a/frontend/src/App.vue b/frontend/src/App.vue index ade3bb9..089e1c2 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,62 +1,62 @@ diff --git a/frontend/src/AppAsyncWrapper.vue b/frontend/src/AppAsyncWrapper.vue index 9442630..c223354 100644 --- a/frontend/src/AppAsyncWrapper.vue +++ b/frontend/src/AppAsyncWrapper.vue @@ -1,12 +1,12 @@ diff --git a/frontend/src/api/admin.ts b/frontend/src/api/admin.ts index fb7aad7..76f2299 100644 --- a/frontend/src/api/admin.ts +++ b/frontend/src/api/admin.ts @@ -1,54 +1,54 @@ -import { Requests, Responses, UserRole, get_token, post_token } from "./base"; +import { Requests, Responses, UserRole, get_token, post_token } from './base'; export const get_users = (token: string): Promise => - get_token("/api/admin/users", token); + get_token('/api/admin/users', token); export const set_role = ( - user: number, - role: UserRole, - token: string + user: number, + role: UserRole, + token: string ): Promise => - post_token( - "/api/admin/set_role", - { - user, - role, - }, - token - ); + post_token( + '/api/admin/set_role', + { + user, + role + }, + token + ); export const logout = ( - user: number, - token: string + user: number, + token: string ): Promise => - post_token( - "/api/admin/logout", - { - user, - }, - token - ); + post_token( + '/api/admin/logout', + { + user + }, + token + ); export const delete_user = ( - user: number, - token: string + user: number, + token: string ): Promise => - post_token( - "/api/admin/delete", - { - user, - }, - token - ); + post_token( + '/api/admin/delete', + { + user + }, + token + ); export const disable_tfa = ( - user: number, - token: string + user: number, + token: string ): Promise => - post_token( - "/api/admin/disable_2fa", - { - user, - }, - token - ); + post_token( + '/api/admin/disable_2fa', + { + user + }, + token + ); diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index c1f3b1b..c4d9afd 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -1,93 +1,93 @@ -import { Responses, Requests, post, post_token } from "./base"; +import { Responses, Requests, post, post_token } from './base'; export const auth_login = ( - username: string, - password: string, - otp?: string + username: string, + password: string, + otp?: string ): Promise< - | Responses.Auth.LoginResponse - | Responses.Auth.TfaRequiredResponse - | Responses.ErrorResponse + | Responses.Auth.LoginResponse + | Responses.Auth.TfaRequiredResponse + | Responses.ErrorResponse > => - post("/api/auth/login", { - username: username, - password: password, - otp: otp, - }); + post('/api/auth/login', { + username: username, + password: password, + otp: otp + }); export const auth_signup = ( - username: string, - password: string + username: string, + password: string ): Promise => - post("/api/auth/signup", { - username: username, - password: password, - }); + post('/api/auth/signup', { + username: username, + password: password + }); export const refresh_token = ( - token: string + token: string ): Promise => - post_token("/api/auth/refresh", {}, token); + post_token('/api/auth/refresh', {}, token); export const change_password = ( - oldPw: string, - newPw: string, - token: string + oldPw: string, + newPw: string, + token: string ): Promise => - post_token( - "/api/auth/change_password", - { - oldPassword: oldPw, - newPassword: newPw, - }, - token - ); + post_token( + '/api/auth/change_password', + { + oldPassword: oldPw, + newPassword: newPw + }, + token + ); export const logout_all = ( - token: string + token: string ): Promise => - post_token("/api/auth/logout_all", {}, token); + post_token('/api/auth/logout_all', {}, token); export function tfa_setup( - mail: false, - token: string + mail: false, + token: string ): Promise; export function tfa_setup( - mail: true, - token: string + mail: true, + token: string ): Promise; export function tfa_setup( - mail: boolean, - token: string + mail: boolean, + token: string ): Promise< - | Responses.Auth.RequestEmailTfaResponse - | Responses.Auth.RequestTotpTfaResponse - | Responses.ErrorResponse + | Responses.Auth.RequestEmailTfaResponse + | Responses.Auth.RequestTotpTfaResponse + | Responses.ErrorResponse > { - return post_token( - "/api/auth/2fa/setup", - { - mail, - }, - token - ); + return post_token( + '/api/auth/2fa/setup', + { + mail + }, + token + ); } export const tfa_complete = ( - mail: boolean, - code: string, - token: string + mail: boolean, + code: string, + token: string ): Promise => - post_token( - "/api/auth/2fa/complete", - { - mail, - code, - }, - token - ); + post_token( + '/api/auth/2fa/complete', + { + mail, + code + }, + token + ); export const tfa_disable = ( - token: string + token: string ): Promise => - post_token("/api/auth/2fa/disable", {}, token); + post_token('/api/auth/2fa/disable', {}, token); diff --git a/frontend/src/api/base.ts b/frontend/src/api/base.ts index 54d91d9..826f983 100644 --- a/frontend/src/api/base.ts +++ b/frontend/src/api/base.ts @@ -1,62 +1,62 @@ -import axios from "axios"; -import { Requests, Responses, UserRole } from "../dto"; +import axios from 'axios'; +import { Requests, Responses, UserRole } from '../dto'; export { Requests, Responses, UserRole }; export const post = (url: string, data: T) => - axios - .post(url, data, { - headers: { "Content-type": "application/json" }, - }) - .then((res) => res.data) - .catch((err) => err.response.data); + axios + .post(url, data, { + headers: { 'Content-type': 'application/json' } + }) + .then((res) => res.data) + .catch((err) => err.response.data); export const post_token = ( - url: string, - data: T, - token: string + url: string, + data: T, + token: string ) => - axios - .post(url, data, { - headers: { - Authorization: "Bearer " + token, - "Content-type": "application/json", - }, - }) - .then((res) => res.data) - .catch((err) => err.response.data); + axios + .post(url, data, { + headers: { + Authorization: 'Bearer ' + token, + 'Content-type': 'application/json' + } + }) + .then((res) => res.data) + .catch((err) => err.response.data); export const post_token_form = ( - url: string, - data: FormData, - token: string, - onProgress: (progressEvent: ProgressEvent) => void + url: string, + data: FormData, + token: string, + onProgress: (progressEvent: ProgressEvent) => void ) => - axios - .post(url, data, { - headers: { - Authorization: "Bearer " + token, - "Content-type": "multipart/form-data", - }, - onUploadProgress: onProgress, - }) - .then((res) => res.data) - .catch((err) => err.response.data); + axios + .post(url, data, { + headers: { + Authorization: 'Bearer ' + token, + 'Content-type': 'multipart/form-data' + }, + onUploadProgress: onProgress + }) + .then((res) => res.data) + .catch((err) => err.response.data); // eslint-disable-next-line @typescript-eslint/no-unused-vars export const get = (url: string) => - axios - .get(url) - .then((res) => res.data) - .catch((err) => err.response.data); + axios + .get(url) + .then((res) => res.data) + .catch((err) => err.response.data); export const get_token = (url: string, token: string) => - axios - .get(url, { - headers: { Authorization: "Bearer " + token }, - }) - .then((res) => res.data) - .catch((err) => err.response.data); + axios + .get(url, { + headers: { Authorization: 'Bearer ' + token } + }) + .then((res) => res.data) + .catch((err) => err.response.data); export const isErrorResponse = ( - res: Responses.BaseResponse + res: Responses.BaseResponse ): res is Responses.ErrorResponse => res.statusCode != 200; diff --git a/frontend/src/api/fs.ts b/frontend/src/api/fs.ts index 9c16066..dfc9ef5 100644 --- a/frontend/src/api/fs.ts +++ b/frontend/src/api/fs.ts @@ -1,84 +1,89 @@ import { - Responses, - Requests, - get_token, - post_token, - post_token_form, - isErrorResponse, -} from "./base"; + Responses, + Requests, + get_token, + post_token, + post_token_form, + isErrorResponse +} from './base'; export const get_root = ( - token: string + token: string ): Promise => - get_token("/api/fs/root", token); + get_token('/api/fs/root', token); export const get_node = ( - token: string, - node: number + token: string, + node: number ): Promise => - get_token(`/api/fs/node/${node}`, token); + get_token(`/api/fs/node/${node}`, token); export const get_path = ( - token: string, - node: number + token: string, + node: number ): Promise => - get_token(`/api/fs/path/${node}`, token); + get_token(`/api/fs/path/${node}`, token); export const create_folder = ( - token: string, - parent: number, - name: string + token: string, + parent: number, + name: string ): Promise => - post_token( - "/api/fs/createFolder", - { - parent: parent, - name: name, - }, - token - ); + post_token( + '/api/fs/createFolder', + { + parent: parent, + name: name + }, + token + ); export const create_file = ( - token: string, - parent: number, - name: string + token: string, + parent: number, + name: string ): Promise => - post_token( - "/api/fs/createFile", - { - parent: parent, - name: name, - }, - token - ); + post_token( + '/api/fs/createFile', + { + parent: parent, + name: name + }, + token + ); export const delete_node = ( - token: string, - node: number + token: string, + node: number ): Promise => - post_token(`/api/fs/delete/${node}`, {}, token); + post_token(`/api/fs/delete/${node}`, {}, token); export const upload_file = async ( - token: string, - parent: number, - file: File, - onProgress: (progressEvent: ProgressEvent) => void + token: string, + parent: number, + file: File, + onProgress: (progressEvent: ProgressEvent) => void ): Promise => { - const node = await create_file(token, parent, file.name); - if (isErrorResponse(node)) return node; + const node = await create_file(token, parent, file.name); + if (isErrorResponse(node)) return node; - const form = new FormData(); - form.set("file", file); - return post_token_form(`/api/fs/upload/${node.id}`, form, token, onProgress); + const form = new FormData(); + form.set('file', file); + return post_token_form( + `/api/fs/upload/${node.id}`, + form, + token, + onProgress + ); }; export function download_file(token: string, id: number) { - const form = document.createElement("form"); - form.method = "post"; - form.target = "_blank"; - form.action = "/api/fs/download"; - form.innerHTML = ``; - document.body.appendChild(form); - form.submit(); - document.body.removeChild(form); + const form = document.createElement('form'); + form.method = 'post'; + form.target = '_blank'; + form.action = '/api/fs/download'; + form.innerHTML = ``; + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); } diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index b54dd28..576da46 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -1,6 +1,6 @@ -export { Requests, Responses, UserRole, isErrorResponse } from "./base"; -export * as Auth from "./auth"; -export * as FS from "./fs"; -export * as User from "./user"; -export * as Admin from "./admin"; -export * from "./util"; +export { Requests, Responses, UserRole, isErrorResponse } from './base'; +export * as Auth from './auth'; +export * as FS from './fs'; +export * as User from './user'; +export * as Admin from './admin'; +export * from './util'; diff --git a/frontend/src/api/user.ts b/frontend/src/api/user.ts index 670e55f..13e2d89 100644 --- a/frontend/src/api/user.ts +++ b/frontend/src/api/user.ts @@ -1,11 +1,11 @@ -import { Responses, get_token, post_token } from "@/api/base"; +import { Responses, get_token, post_token } from '@/api/base'; export const get_user_info = ( - token: string + token: string ): Promise => - get_token("/api/user/info", token); + get_token('/api/user/info', token); export const delete_user = ( - token: string + token: string ): Promise => - post_token("/api/user/delete", {}, token); + post_token('/api/user/delete', {}, token); diff --git a/frontend/src/api/util.ts b/frontend/src/api/util.ts index 72bfd63..905d4aa 100644 --- a/frontend/src/api/util.ts +++ b/frontend/src/api/util.ts @@ -1,25 +1,25 @@ -import jwtDecode, { JwtPayload } from "jwt-decode"; -import { Ref, UnwrapRef } from "vue"; -import { isErrorResponse } from "./base"; -import { refresh_token } from "./auth"; +import jwtDecode, { JwtPayload } from 'jwt-decode'; +import { Ref, UnwrapRef } from 'vue'; +import { isErrorResponse } from './base'; +import { refresh_token } from './auth'; export async function check_token( - token: TokenInjectType + token: TokenInjectType ): Promise { - if (!token.jwt.value) return token.logout(); - const payload = jwtDecode(token.jwt.value); - if (!payload) return token.logout(); - // Expires in more than 60 Minute - if (payload.exp && payload.exp > Math.floor(Date.now() / 1000 + 60 * 60)) - return token.jwt.value; - const new_token = await refresh_token(token.jwt.value); - if (isErrorResponse(new_token)) return token.logout(); - token.setToken(new_token.jwt); - return new_token.jwt; + if (!token.jwt.value) return token.logout(); + const payload = jwtDecode(token.jwt.value); + if (!payload) return token.logout(); + // Expires in more than 60 Minute + if (payload.exp && payload.exp > Math.floor(Date.now() / 1000 + 60 * 60)) + return token.jwt.value; + const new_token = await refresh_token(token.jwt.value); + if (isErrorResponse(new_token)) return token.logout(); + token.setToken(new_token.jwt); + return new_token.jwt; } export type TokenInjectType = { - jwt: Ref>; - setToken: (token: string) => void; - logout: () => void; + jwt: Ref>; + setToken: (token: string) => void; + logout: () => void; }; diff --git a/frontend/src/components/FSView/DirEntry.vue b/frontend/src/components/FSView/DirEntry.vue index 10c4290..548e3f8 100644 --- a/frontend/src/components/FSView/DirEntry.vue +++ b/frontend/src/components/FSView/DirEntry.vue @@ -1,40 +1,40 @@ diff --git a/frontend/src/components/FSView/DirViewer.vue b/frontend/src/components/FSView/DirViewer.vue index fc1fcf0..d77fc14 100644 --- a/frontend/src/components/FSView/DirViewer.vue +++ b/frontend/src/components/FSView/DirViewer.vue @@ -1,101 +1,108 @@ diff --git a/frontend/src/components/FSView/FileViewer.vue b/frontend/src/components/FSView/FileViewer.vue index 9cec46c..9bda494 100644 --- a/frontend/src/components/FSView/FileViewer.vue +++ b/frontend/src/components/FSView/FileViewer.vue @@ -1,38 +1,38 @@ diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue index 2fb8b10..775d75f 100644 --- a/frontend/src/components/HelloWorld.vue +++ b/frontend/src/components/HelloWorld.vue @@ -1,140 +1,156 @@ diff --git a/frontend/src/components/UploadDialog/UploadEntry.vue b/frontend/src/components/UploadDialog/UploadEntry.vue index 1479bdf..392e0e9 100644 --- a/frontend/src/components/UploadDialog/UploadEntry.vue +++ b/frontend/src/components/UploadDialog/UploadEntry.vue @@ -1,51 +1,51 @@ diff --git a/frontend/src/components/UploadDialog/UploadFileDialog.vue b/frontend/src/components/UploadDialog/UploadFileDialog.vue index 4dcc9ac..d830a5d 100644 --- a/frontend/src/components/UploadDialog/UploadFileDialog.vue +++ b/frontend/src/components/UploadDialog/UploadFileDialog.vue @@ -1,10 +1,10 @@ diff --git a/frontend/src/dto/index.ts b/frontend/src/dto/index.ts index 9fa4ceb..704c086 100644 --- a/frontend/src/dto/index.ts +++ b/frontend/src/dto/index.ts @@ -1,8 +1,8 @@ -export * as Requests from "./requests"; -export * as Responses from "./responses"; +export * as Requests from './requests'; +export * as Responses from './responses'; export { - UserRole, - validateSync, - validateAsync, - validateAsyncInline, -} from "./utils"; + UserRole, + validateSync, + validateAsync, + validateAsyncInline +} from './utils'; diff --git a/frontend/src/dto/requests/admin.ts b/frontend/src/dto/requests/admin.ts index 3b33f4b..91f281a 100644 --- a/frontend/src/dto/requests/admin.ts +++ b/frontend/src/dto/requests/admin.ts @@ -1,15 +1,15 @@ -import { BaseRequest } from "./base"; -import { IsEnum, IsNumber } from "class-validator"; -import { UserRole } from "../utils"; +import { BaseRequest } from './base'; +import { IsEnum, IsNumber } from 'class-validator'; +import { UserRole } from '@/dto'; export class AdminRequest extends BaseRequest { - @IsNumber() - user: number; + @IsNumber() + user: number; } export class SetUserRole extends AdminRequest { - @IsEnum(UserRole) - role: UserRole; + @IsEnum(UserRole) + role: UserRole; } export class LogoutAll extends AdminRequest {} diff --git a/frontend/src/dto/requests/auth.ts b/frontend/src/dto/requests/auth.ts index ae30c14..50ed258 100644 --- a/frontend/src/dto/requests/auth.ts +++ b/frontend/src/dto/requests/auth.ts @@ -1,50 +1,50 @@ -import { BaseRequest } from "./base"; +import { BaseRequest } from './base'; import { - IsBoolean, - IsEmail, - IsNotEmpty, - IsOptional, - IsString, -} from "class-validator"; + IsBoolean, + IsEmail, + IsNotEmpty, + IsOptional, + IsString +} from 'class-validator'; export class SignUpRequest extends BaseRequest { - @IsEmail() - username: string; + @IsEmail() + username: string; - @IsNotEmpty() - @IsString() - password: string; + @IsNotEmpty() + @IsString() + password: string; } export class LoginRequest extends SignUpRequest { - @IsOptional() - @IsNotEmpty() - @IsString() - otp?: string; + @IsOptional() + @IsNotEmpty() + @IsString() + otp?: string; } export class TfaSetup extends BaseRequest { - @IsNotEmpty() - @IsBoolean() - mail: boolean; + @IsNotEmpty() + @IsBoolean() + mail: boolean; } export class TfaComplete extends BaseRequest { - @IsNotEmpty() - @IsBoolean() - mail: boolean; + @IsNotEmpty() + @IsBoolean() + mail: boolean; - @IsNotEmpty() - @IsString() - code: string; + @IsNotEmpty() + @IsString() + code: string; } export class ChangePasswordRequest extends BaseRequest { - @IsNotEmpty() - @IsString() - oldPassword: string; + @IsNotEmpty() + @IsString() + oldPassword: string; - @IsNotEmpty() - @IsString() - newPassword: string; + @IsNotEmpty() + @IsString() + newPassword: string; } diff --git a/frontend/src/dto/requests/fs.ts b/frontend/src/dto/requests/fs.ts index a26cdd5..0108865 100644 --- a/frontend/src/dto/requests/fs.ts +++ b/frontend/src/dto/requests/fs.ts @@ -1,14 +1,14 @@ -import { BaseRequest } from "./base"; -import { IsInt, IsNotEmpty, IsString, Min } from "class-validator"; +import { BaseRequest } from './base'; +import { IsInt, IsNotEmpty, IsString, Min } from 'class-validator'; export class CreateFolderRequest extends BaseRequest { - @IsInt() - @Min(1) - parent: number; + @IsInt() + @Min(1) + parent: number; - @IsNotEmpty() - @IsString() - name: string; + @IsNotEmpty() + @IsString() + name: string; } export class CreateFileRequest extends CreateFolderRequest {} diff --git a/frontend/src/dto/requests/index.ts b/frontend/src/dto/requests/index.ts index 3f4cf66..684e96f 100644 --- a/frontend/src/dto/requests/index.ts +++ b/frontend/src/dto/requests/index.ts @@ -1,4 +1,4 @@ -export * from "./base"; -export * as Auth from "./auth"; -export * as FS from "./fs"; -export * as Admin from "./admin"; +export * from './base'; +export * as Auth from './auth'; +export * as FS from './fs'; +export * as Admin from './admin'; diff --git a/frontend/src/dto/responses/admin.ts b/frontend/src/dto/responses/admin.ts index b09564e..f62183b 100644 --- a/frontend/src/dto/responses/admin.ts +++ b/frontend/src/dto/responses/admin.ts @@ -1,58 +1,58 @@ -import { SuccessResponse } from "./base"; +import { SuccessResponse } from './base'; import { - IsArray, - IsBoolean, - IsEnum, - IsNotEmpty, - IsNumber, - IsString, - ValidateNested, -} from "class-validator"; -import { UserRole, ValidateConstructor } from "../utils"; + IsArray, + IsBoolean, + IsEnum, + IsNotEmpty, + IsNumber, + IsString, + ValidateNested +} from 'class-validator'; +import { UserRole, ValidateConstructor } from '../utils'; @ValidateConstructor export class GetUsersEntry { - constructor( - id: number, - gitlab: boolean, - name: string, - role: UserRole, - tfaEnabled: boolean - ) { - this.id = id; - this.gitlab = gitlab; - this.name = name; - this.role = role; - this.tfaEnabled = tfaEnabled; - } + constructor( + id: number, + gitlab: boolean, + name: string, + role: UserRole, + tfaEnabled: boolean + ) { + this.id = id; + this.gitlab = gitlab; + this.name = name; + this.role = role; + this.tfaEnabled = tfaEnabled; + } - @IsNumber() - id: number; + @IsNumber() + id: number; - @IsBoolean() - gitlab: boolean; + @IsBoolean() + gitlab: boolean; - @IsString() - @IsNotEmpty() - name: string; + @IsString() + @IsNotEmpty() + name: string; - @IsEnum(UserRole) - role: UserRole; + @IsEnum(UserRole) + role: UserRole; - @IsBoolean() - tfaEnabled: boolean; + @IsBoolean() + tfaEnabled: boolean; } @ValidateConstructor export class GetUsers extends SuccessResponse { - constructor(users: GetUsersEntry[]) { - super(); - this.users = users; - } + constructor(users: GetUsersEntry[]) { + super(); + this.users = users; + } - @IsArray() - @ValidateNested({ each: true }) - users: GetUsersEntry[]; + @IsArray() + @ValidateNested({ each: true }) + users: GetUsersEntry[]; } export class LogoutAllUser extends SuccessResponse {} diff --git a/frontend/src/dto/responses/auth.ts b/frontend/src/dto/responses/auth.ts index e4c1359..76de70b 100644 --- a/frontend/src/dto/responses/auth.ts +++ b/frontend/src/dto/responses/auth.ts @@ -1,33 +1,33 @@ -import { SuccessResponse } from "./base"; -import { IsBase32, IsJWT, IsNotEmpty } from "class-validator"; -import { ValidateConstructor } from "../utils"; +import { SuccessResponse } from './base'; +import { IsBase32, IsJWT, IsNotEmpty } from 'class-validator'; +import { ValidateConstructor } from '../utils'; @ValidateConstructor export class LoginResponse extends SuccessResponse { - constructor(jwt: string) { - super(); - this.jwt = jwt; - } + constructor(jwt: string) { + super(); + this.jwt = jwt; + } - @IsNotEmpty() - @IsJWT() - jwt: string; + @IsNotEmpty() + @IsJWT() + jwt: string; } @ValidateConstructor export class RequestTotpTfaResponse extends SuccessResponse { - constructor(qrCode: string, secret: string) { - super(); - this.qrCode = qrCode; - this.secret = secret; - } + constructor(qrCode: string, secret: string) { + super(); + this.qrCode = qrCode; + this.secret = secret; + } - @IsNotEmpty() - qrCode: string; + @IsNotEmpty() + qrCode: string; - @IsNotEmpty() - @IsBase32() - secret: string; + @IsNotEmpty() + @IsBase32() + secret: string; } export class TfaRequiredResponse extends SuccessResponse {} diff --git a/frontend/src/dto/responses/base.ts b/frontend/src/dto/responses/base.ts index d17e033..7667e40 100644 --- a/frontend/src/dto/responses/base.ts +++ b/frontend/src/dto/responses/base.ts @@ -1,25 +1,25 @@ -import { IsNumber, Max, Min } from "class-validator"; +import { IsNumber, Max, Min } from 'class-validator'; export class BaseResponse { - constructor(statusCode: number) { - this.statusCode = statusCode; - } + constructor(statusCode: number) { + this.statusCode = statusCode; + } - @IsNumber() - @Min(100) - @Max(599) - statusCode: number; + @IsNumber() + @Min(100) + @Max(599) + statusCode: number; } export class SuccessResponse extends BaseResponse { - constructor() { - super(200); - } + constructor() { + super(200); + } - declare statusCode: 200; + declare statusCode: 200; } export class ErrorResponse extends BaseResponse { - declare statusCode: 400 | 401 | 403; - message?: string; + declare statusCode: 400 | 401 | 403; + message?: string; } diff --git a/frontend/src/dto/responses/fs.ts b/frontend/src/dto/responses/fs.ts index d87c9e8..2ecb48c 100644 --- a/frontend/src/dto/responses/fs.ts +++ b/frontend/src/dto/responses/fs.ts @@ -1,87 +1,87 @@ -import { SuccessResponse } from "./base"; +import { SuccessResponse } from './base'; import { - IsBoolean, - IsInt, - IsNotEmpty, - IsOptional, - IsString, - Min, -} from "class-validator"; -import { ValidateConstructor } from "../utils"; + IsBoolean, + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Min +} from 'class-validator'; +import { ValidateConstructor } from '../utils'; @ValidateConstructor export class GetRootResponse extends SuccessResponse { - constructor(rootId: number) { - super(); - this.rootId = rootId; - } - @IsInt() - @Min(1) - rootId: number; + constructor(rootId: number) { + super(); + this.rootId = rootId; + } + @IsInt() + @Min(1) + rootId: number; } export class GetNodeResponse extends SuccessResponse { - constructor( - id: number, - name: string, - isFile: boolean, - parent: number | null - ) { - super(); - this.id = id; - this.name = name; - this.isFile = isFile; - this.parent = parent; - } + constructor( + id: number, + name: string, + isFile: boolean, + parent: number | null + ) { + super(); + this.id = id; + this.name = name; + this.isFile = isFile; + this.parent = parent; + } - @IsInt() - @Min(1) - id: number; + @IsInt() + @Min(1) + id: number; - @IsString() - name: string; + @IsString() + name: string; - @IsBoolean() - isFile: boolean; + @IsBoolean() + isFile: boolean; - @IsOptional() - @IsInt() - @Min(1) - parent: number | null; + @IsOptional() + @IsInt() + @Min(1) + parent: number | null; - @IsOptional() - @IsInt({ each: true }) - @Min(1, { each: true }) - children?: number[]; + @IsOptional() + @IsInt({ each: true }) + @Min(1, { each: true }) + children?: number[]; - @IsOptional() - @IsInt() - @Min(0) - size?: number; + @IsOptional() + @IsInt() + @Min(0) + size?: number; } @ValidateConstructor export class GetPathResponse extends SuccessResponse { - constructor(path: string) { - super(); - this.path = path; - } + constructor(path: string) { + super(); + this.path = path; + } - @IsNotEmpty() - @IsString() - path: string; + @IsNotEmpty() + @IsString() + path: string; } @ValidateConstructor export class CreateFolderResponse extends SuccessResponse { - constructor(id: number) { - super(); - this.id = id; - } + constructor(id: number) { + super(); + this.id = id; + } - @IsInt() - @Min(1) - id: number; + @IsInt() + @Min(1) + id: number; } export class UploadFileResponse extends SuccessResponse {} diff --git a/frontend/src/dto/responses/index.ts b/frontend/src/dto/responses/index.ts index d985eea..0c84bc4 100644 --- a/frontend/src/dto/responses/index.ts +++ b/frontend/src/dto/responses/index.ts @@ -1,5 +1,5 @@ -export * from "./base"; -export * as Auth from "./auth"; -export * as FS from "./fs"; -export * as User from "./user"; -export * as Admin from "./admin"; +export * from './base'; +export * as Auth from './auth'; +export * as FS from './fs'; +export * as User from './user'; +export * as Admin from './admin'; diff --git a/frontend/src/dto/responses/user.ts b/frontend/src/dto/responses/user.ts index 6d44861..706526b 100644 --- a/frontend/src/dto/responses/user.ts +++ b/frontend/src/dto/responses/user.ts @@ -1,25 +1,25 @@ -import { SuccessResponse } from "./base"; -import { ValidateConstructor } from "../utils"; -import { IsBoolean, IsNotEmpty, IsString } from "class-validator"; +import { SuccessResponse } from './base'; +import { ValidateConstructor } from '../utils'; +import { IsBoolean, IsNotEmpty, IsString } from 'class-validator'; @ValidateConstructor export class UserInfoResponse extends SuccessResponse { - constructor(name: string, gitlab: boolean, tfaEnabled: boolean) { - super(); - this.name = name; - this.gitlab = gitlab; - this.tfaEnabled = tfaEnabled; - } + constructor(name: string, gitlab: boolean, tfaEnabled: boolean) { + super(); + this.name = name; + this.gitlab = gitlab; + this.tfaEnabled = tfaEnabled; + } - @IsNotEmpty() - @IsString() - name: string; + @IsNotEmpty() + @IsString() + name: string; - @IsBoolean() - gitlab: boolean; + @IsBoolean() + gitlab: boolean; - @IsBoolean() - tfaEnabled: boolean; + @IsBoolean() + tfaEnabled: boolean; } export class DeleteUserResponse extends SuccessResponse {} diff --git a/frontend/src/dto/utils.ts b/frontend/src/dto/utils.ts index 229da51..cda3a2e 100644 --- a/frontend/src/dto/utils.ts +++ b/frontend/src/dto/utils.ts @@ -1,41 +1,43 @@ -import { validate, validateSync as _validateSync } from "class-validator"; +import { validate, validateSync as _validateSync } from 'class-validator'; export enum UserRole { - ADMIN = 2, - USER = 1, - DISABLED = 0, + ADMIN = 2, + USER = 1, + DISABLED = 0 } export function validateSync(data: T): void { - const errors = _validateSync(data); - if (errors.length > 0) { - console.error("Validation failed, errors: ", errors); - throw new Error("Validation failed"); - } + const errors = _validateSync(data); + if (errors.length > 0) { + console.error('Validation failed, errors: ', errors); + throw new Error('Validation failed'); + } } export async function validateAsync(data: T): Promise { - const errors = await validate(data); - if (errors.length > 0) { - console.error("Validation failed, errors: ", errors); - throw new Error("Validation failed"); - } + const errors = await validate(data); + if (errors.length > 0) { + console.error('Validation failed, errors: ', errors); + throw new Error('Validation failed'); + } } export async function validateAsyncInline( - data: T + data: T ): Promise { - await validateAsync(data); - return data; + await validateAsync(data); + return data; } -export function ValidateConstructor( - constr: T -) { - return class extends constr { - constructor(...args: any[]) { - super(...args); - validateSync(this); - } - }; +export function ValidateConstructor< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T extends { new (...args: any[]): any } +>(constr: T) { + return class extends constr { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + constructor(...args: any[]) { + super(...args); + validateSync(this); + } + }; } diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 8e69ff4..61a7273 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,8 +1,8 @@ -import { createApp } from "vue"; -import router from "./router"; -import AppAsyncWrapper from "./AppAsyncWrapper.vue"; +import { createApp } from 'vue'; +import router from './router'; +import AppAsyncWrapper from './AppAsyncWrapper.vue'; const app = createApp(AppAsyncWrapper); app.use(router); app.config.unwrapInjectedRef = true; -app.mount("#app"); +app.mount('#app'); diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 8547abd..b045c4c 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -1,63 +1,63 @@ -import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router"; -import LoginView from "@/views/LoginView.vue"; -import SignupView from "@/views/SignupView.vue"; -import HomeView from "@/views/HomeView.vue"; -import AboutView from "@/views/AboutView.vue"; -import FSView from "@/views/FSView.vue"; -import SetTokenView from "@/views/SetTokenView.vue"; -import ProfileView from "@/views/ProfileView.vue"; -import TFAView from "@/views/TFAView.vue"; -import AdminView from "@/views/AdminView.vue"; +import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; +import LoginView from '@/views/LoginView.vue'; +import SignupView from '@/views/SignupView.vue'; +import HomeView from '@/views/HomeView.vue'; +import AboutView from '@/views/AboutView.vue'; +import FSView from '@/views/FSView.vue'; +import SetTokenView from '@/views/SetTokenView.vue'; +import ProfileView from '@/views/ProfileView.vue'; +import TFAView from '@/views/TFAView.vue'; +import AdminView from '@/views/AdminView.vue'; const routes: Array = [ - { - path: "/", - name: "home", - component: HomeView, - }, - { - path: "/profile", - name: "profile", - component: ProfileView, - }, - { - path: "/profile/2fa-enable", - name: "2fa", - component: TFAView, - }, - { - path: "/admin", - component: AdminView, - }, - { - path: "/about", - component: AboutView, - }, - { - path: "/login", - name: "login", - component: LoginView, - }, - { - path: "/signup", - name: "signup", - component: SignupView, - }, - { - path: "/fs/:node_id", - name: "fs", - component: FSView, - }, + { + path: '/', + name: 'home', + component: HomeView + }, + { + path: '/profile', + name: 'profile', + component: ProfileView + }, + { + path: '/profile/2fa-enable', + name: '2fa', + component: TFAView + }, + { + path: '/admin', + component: AdminView + }, + { + path: '/about', + component: AboutView + }, + { + path: '/login', + name: 'login', + component: LoginView + }, + { + path: '/signup', + name: 'signup', + component: SignupView + }, + { + path: '/fs/:node_id', + name: 'fs', + component: FSView + }, - { - path: "/set_token", - component: SetTokenView, - }, + { + path: '/set_token', + component: SetTokenView + } ]; const router = createRouter({ - history: createWebHistory(process.env.BASE_URL), - routes, + history: createWebHistory(process.env.BASE_URL), + routes }); export default router; diff --git a/frontend/src/shims-vue.d.ts b/frontend/src/shims-vue.d.ts index 3804a43..1877785 100644 --- a/frontend/src/shims-vue.d.ts +++ b/frontend/src/shims-vue.d.ts @@ -1,6 +1,6 @@ /* eslint-disable */ declare module '*.vue' { - import type { DefineComponent } from 'vue' - const component: DefineComponent<{}, {}, any> - export default component + import type { DefineComponent } from 'vue'; + const component: DefineComponent<{}, {}, any>; + export default component; } diff --git a/frontend/src/views/AboutView.vue b/frontend/src/views/AboutView.vue index 3fa2807..7054f59 100644 --- a/frontend/src/views/AboutView.vue +++ b/frontend/src/views/AboutView.vue @@ -1,5 +1,5 @@ diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue index cf5eeff..fc715ee 100644 --- a/frontend/src/views/AdminView.vue +++ b/frontend/src/views/AdminView.vue @@ -1,109 +1,109 @@ diff --git a/frontend/src/views/FSView.vue b/frontend/src/views/FSView.vue index 3325a6e..82f3bf5 100644 --- a/frontend/src/views/FSView.vue +++ b/frontend/src/views/FSView.vue @@ -1,70 +1,70 @@ diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index 2d36d45..0140b62 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -1,28 +1,28 @@ diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue index 54f4f09..be6a3d0 100644 --- a/frontend/src/views/LoginView.vue +++ b/frontend/src/views/LoginView.vue @@ -1,61 +1,61 @@ diff --git a/frontend/src/views/ProfileView.vue b/frontend/src/views/ProfileView.vue index 5346fc0..f4cb406 100644 --- a/frontend/src/views/ProfileView.vue +++ b/frontend/src/views/ProfileView.vue @@ -1,112 +1,124 @@ diff --git a/frontend/src/views/SetTokenView.vue b/frontend/src/views/SetTokenView.vue index 4198c98..d15660e 100644 --- a/frontend/src/views/SetTokenView.vue +++ b/frontend/src/views/SetTokenView.vue @@ -1,19 +1,19 @@ diff --git a/frontend/src/views/SignupView.vue b/frontend/src/views/SignupView.vue index 541ace7..34491f9 100644 --- a/frontend/src/views/SignupView.vue +++ b/frontend/src/views/SignupView.vue @@ -1,35 +1,35 @@ diff --git a/frontend/src/views/TFAView.vue b/frontend/src/views/TFAView.vue index cc9d7d5..cf7582b 100644 --- a/frontend/src/views/TFAView.vue +++ b/frontend/src/views/TFAView.vue @@ -1,89 +1,89 @@ diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index e47981e..261ceb9 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,43 +1,32 @@ { - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "strict": true, - "jsx": "preserve", - "moduleResolution": "node", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "useDefineForClassFields": true, - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "baseUrl": ".", - "types": [ - "webpack-env" - ], - "paths": { - "@/*": [ - "src/*" - ] - }, - "lib": [ - "esnext", - "dom", - "dom.iterable", - "scripthost" - ] - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx", - "src/**/*.vue", - "tests/**/*.ts", - "tests/**/*.tsx" - ], - "exclude": [ - "node_modules" - ] + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "moduleResolution": "node", + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "useDefineForClassFields": true, + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "baseUrl": ".", + "types": ["webpack-env"], + "paths": { + "@/*": ["src/*"] + }, + "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": ["node_modules"] } diff --git a/frontend/vue.config.js b/frontend/vue.config.js index bd9c9cd..aa99dc3 100644 --- a/frontend/vue.config.js +++ b/frontend/vue.config.js @@ -1,12 +1,12 @@ -const { defineConfig } = require("@vue/cli-service"); +const { defineConfig } = require('@vue/cli-service'); module.exports = defineConfig({ - transpileDependencies: true, - configureWebpack: { - resolve: { - fallback: { - crypto: false, - stream: require.resolve("stream-browserify"), - }, - }, - }, + transpileDependencies: true, + configureWebpack: { + resolve: { + fallback: { + crypto: false, + stream: require.resolve('stream-browserify') + } + } + } }); diff --git a/frontend/yarn.lock b/frontend/yarn.lock index c34f1cb..8d312f3 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1254,9 +1254,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "18.7.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.11.tgz#486e72cfccde88da24e1f23ff1b7d8bfb64e6250" - integrity sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw== + version "18.7.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.14.tgz#0fe081752a3333392d00586d815485a17c2cf3c9" + integrity sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA== "@types/node@~17.0.5": version "17.0.45" @@ -1323,13 +1323,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.4.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz#d690f60e335596f38b01792e8f4b361d9bd0cb35" - integrity sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ== + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.1.tgz#471f64dc53600025e470dad2ca4a9f2864139019" + integrity sha512-iC40UK8q1tMepSDwiLbTbMXKDxzNy+4TfPWgIL661Ym0sD42vRcQU93IsZIrmi+x292DBr60UI/gSwfdVYexCA== dependencies: - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/type-utils" "5.34.0" - "@typescript-eslint/utils" "5.34.0" + "@typescript-eslint/scope-manager" "5.36.1" + "@typescript-eslint/type-utils" "5.36.1" + "@typescript-eslint/utils" "5.36.1" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -1338,74 +1338,75 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.4.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.34.0.tgz#ca710858ea85dbfd30c9b416a335dc49e82dbc07" - integrity sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ== + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.1.tgz#931c22c7bacefd17e29734628cdec8b2acdcf1ce" + integrity sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A== dependencies: - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/typescript-estree" "5.34.0" + "@typescript-eslint/scope-manager" "5.36.1" + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/typescript-estree" "5.36.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz#14efd13dc57602937e25f188fd911f118781e527" - integrity sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow== +"@typescript-eslint/scope-manager@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz#23c49b7ddbcffbe09082e6694c2524950766513f" + integrity sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w== dependencies: - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/visitor-keys" "5.34.0" + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/visitor-keys" "5.36.1" -"@typescript-eslint/type-utils@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz#7a324ab9ddd102cd5e1beefc94eea6f3eb32d32d" - integrity sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg== +"@typescript-eslint/type-utils@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.1.tgz#016fc2bff6679f54c0b2df848a493f0ca3d4f625" + integrity sha512-xfZhfmoQT6m3lmlqDvDzv9TiCYdw22cdj06xY0obSznBsT///GK5IEZQdGliXpAOaRL34o8phEvXzEo/VJx13Q== dependencies: - "@typescript-eslint/utils" "5.34.0" + "@typescript-eslint/typescript-estree" "5.36.1" + "@typescript-eslint/utils" "5.36.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.34.0.tgz#217bf08049e9e7b86694d982e88a2c1566330c78" - integrity sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA== +"@typescript-eslint/types@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.1.tgz#1cf0e28aed1cb3ee676917966eb23c2f8334ce2c" + integrity sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg== -"@typescript-eslint/typescript-estree@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz#ba7b83f4bf8ccbabf074bbf1baca7a58de3ccb9a" - integrity sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A== +"@typescript-eslint/typescript-estree@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz#b857f38d6200f7f3f4c65cd0a5afd5ae723f2adb" + integrity sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g== dependencies: - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/visitor-keys" "5.34.0" + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/visitor-keys" "5.36.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.34.0.tgz#0cae98f48d8f9e292e5caa9343611b6faf49e743" - integrity sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ== +"@typescript-eslint/utils@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.1.tgz#136d5208cc7a3314b11c646957f8f0b5c01e07ad" + integrity sha512-lNj4FtTiXm5c+u0pUehozaUWhh7UYKnwryku0nxJlYUEWetyG92uw2pr+2Iy4M/u0ONMKzfrx7AsGBTCzORmIg== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/typescript-estree" "5.34.0" + "@typescript-eslint/scope-manager" "5.36.1" + "@typescript-eslint/types" "5.36.1" + "@typescript-eslint/typescript-estree" "5.36.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz#d0fb3e31033e82ddd5de048371ad39eb342b2d40" - integrity sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw== +"@typescript-eslint/visitor-keys@5.36.1": + version "5.36.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz#7731175312d65738e501780f923896d200ad1615" + integrity sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ== dependencies: - "@typescript-eslint/types" "5.34.0" + "@typescript-eslint/types" "5.36.1" eslint-visitor-keys "^3.3.0" -"@vue/babel-helper-vue-jsx-merge-props@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" - integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA== +"@vue/babel-helper-vue-jsx-merge-props@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz#8d53a1e21347db8edbe54d339902583176de09f2" + integrity sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA== "@vue/babel-helper-vue-transform-on@^1.0.2": version "1.0.2" @@ -1427,14 +1428,14 @@ html-tags "^3.1.0" svg-tags "^1.0.0" -"@vue/babel-plugin-transform-vue-jsx@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7" - integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA== +"@vue/babel-plugin-transform-vue-jsx@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz#4d4b3d46a39ea62b7467dd6e26ce47f7ceafb2fe" + integrity sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" + "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" html-tags "^2.0.0" lodash.kebabcase "^4.1.1" svg-tags "^1.0.0" @@ -1462,66 +1463,66 @@ semver "^7.3.4" "@vue/babel-preset-jsx@^1.1.2": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.3.1.tgz#10789417a17680d9855bd96fd9894d9b51fd979b" - integrity sha512-ml+nqcSKp8uAqFZLNc7OWLMzR7xDBsUfkomF98DtiIBlLqlq4jCQoLINARhgqRIyKdB+mk/94NWpIb4pL6D3xw== + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz#f4914ba314235ab097bc4372ed67473c0780bfcc" + integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" - "@vue/babel-sugar-composition-api-inject-h" "^1.3.0" - "@vue/babel-sugar-composition-api-render-instance" "^1.3.0" - "@vue/babel-sugar-functional-vue" "^1.2.2" - "@vue/babel-sugar-inject-h" "^1.2.2" - "@vue/babel-sugar-v-model" "^1.3.0" - "@vue/babel-sugar-v-on" "^1.3.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" + "@vue/babel-sugar-composition-api-inject-h" "^1.4.0" + "@vue/babel-sugar-composition-api-render-instance" "^1.4.0" + "@vue/babel-sugar-functional-vue" "^1.4.0" + "@vue/babel-sugar-inject-h" "^1.4.0" + "@vue/babel-sugar-v-model" "^1.4.0" + "@vue/babel-sugar-v-on" "^1.4.0" -"@vue/babel-sugar-composition-api-inject-h@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.3.0.tgz#1402f34cea217c7117fb66fdcbd94e1c370cd9c0" - integrity sha512-pIDOutEpqbURdVw7xhgxmuDW8Tl+lTgzJZC5jdlUu0lY2+izT9kz3Umd/Tbu0U5cpCJ2Yhu87BZFBzWpS0Xemg== +"@vue/babel-sugar-composition-api-inject-h@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz#187e1389f8871d89ece743bb50aed713be9d6c85" + integrity sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-composition-api-render-instance@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.3.0.tgz#3039d3d9eca09e56d41a56a03d73a146211c18a5" - integrity sha512-NYNnU2r7wkJLMV5p9Zj4pswmCs037O/N2+/Fs6SyX7aRFzXJRP1/2CZh5cIwQxWQajHXuCUd5mTb7DxoBVWyTg== +"@vue/babel-sugar-composition-api-render-instance@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz#2c1607ae6dffdab47e785bc01fa45ba756e992c1" + integrity sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-functional-vue@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658" - integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w== +"@vue/babel-sugar-functional-vue@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz#60da31068567082287c7337c66ef4df04e0a1029" + integrity sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-inject-h@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa" - integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw== +"@vue/babel-sugar-inject-h@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz#bf39aa6631fb1d0399b1c49b4c59e1c8899b4363" + integrity sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" -"@vue/babel-sugar-v-model@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.3.0.tgz#e4da7ae27a74c473b1abba060260ecaa8cb6e46b" - integrity sha512-zcsabmdX48JmxTObn3xmrvvdbEy8oo63DphVyA3WRYGp4SEvJRpu/IvZCVPl/dXLuob2xO/QRuncqPgHvZPzpA== +"@vue/babel-sugar-v-model@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz#a51d986609f430c4f70ada3a93cc560a2970f720" + integrity sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" camelcase "^5.0.0" html-tags "^2.0.0" svg-tags "^1.0.0" -"@vue/babel-sugar-v-on@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.3.0.tgz#d35756f8720e527a3b1867e21c3c248cde47ca87" - integrity sha512-8VZgrS0G5bh7+Prj7oJkzg9GvhSPnuW5YT6MNaVAEy4uwxRLJ8GqHenaStfllChTao4XZ3EZkNtHB4Xbr/ePdA== +"@vue/babel-sugar-v-on@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz#43b7106a9672d8cbeefc0eb8afe1d376edc6166e" + integrity sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" + "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" camelcase "^5.0.0" "@vue/cli-overlay@^5.0.8": @@ -1658,47 +1659,47 @@ semver "^7.3.4" strip-ansi "^6.0.0" -"@vue/compiler-core@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a" - integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== +"@vue/compiler-core@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.38.tgz#0a2a7bffd2280ac19a96baf5301838a2cf1964d7" + integrity sha512-/FsvnSu7Z+lkd/8KXMa4yYNUiqQrI22135gfsQYVGuh5tqEgOB0XqrUdb/KnCLa5+TmQLPwvyUnKMyCpu+SX3Q== dependencies: "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.37" + "@vue/shared" "3.2.38" estree-walker "^2.0.2" source-map "^0.6.1" -"@vue/compiler-dom@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5" - integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ== +"@vue/compiler-dom@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.38.tgz#53d04ed0c0c62d1ef259bf82f9b28100a880b6fd" + integrity sha512-zqX4FgUbw56kzHlgYuEEJR8mefFiiyR3u96498+zWPsLeh1WKvgIReoNE+U7gG8bCUdvsrJ0JRmev0Ky6n2O0g== dependencies: - "@vue/compiler-core" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-core" "3.2.38" + "@vue/shared" "3.2.38" -"@vue/compiler-sfc@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4" - integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg== +"@vue/compiler-sfc@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.38.tgz#9e763019471a535eb1fceeaac9d4d18a83f0940f" + integrity sha512-KZjrW32KloMYtTcHAFuw3CqsyWc5X6seb8KbkANSWt3Cz9p2qA8c1GJpSkksFP9ABb6an0FLCFl46ZFXx3kKpg== dependencies: "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.37" - "@vue/compiler-dom" "3.2.37" - "@vue/compiler-ssr" "3.2.37" - "@vue/reactivity-transform" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-core" "3.2.38" + "@vue/compiler-dom" "3.2.38" + "@vue/compiler-ssr" "3.2.38" + "@vue/reactivity-transform" "3.2.38" + "@vue/shared" "3.2.38" estree-walker "^2.0.2" magic-string "^0.25.7" postcss "^8.1.10" source-map "^0.6.1" -"@vue/compiler-ssr@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff" - integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw== +"@vue/compiler-ssr@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.38.tgz#933b23bf99e667e5078eefc6ba94cb95fd765dfe" + integrity sha512-bm9jOeyv1H3UskNm4S6IfueKjUNFmi2kRweFIGnqaGkkRePjwEcfCVqyS3roe7HvF4ugsEkhf4+kIvDhip6XzQ== dependencies: - "@vue/compiler-dom" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-dom" "3.2.38" + "@vue/shared" "3.2.38" "@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0": version "3.3.0" @@ -1728,53 +1729,53 @@ dependencies: vue-eslint-parser "^8.0.0" -"@vue/reactivity-transform@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca" - integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg== +"@vue/reactivity-transform@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.38.tgz#a856c217b2ead99eefb6fddb1d61119b2cb67984" + integrity sha512-3SD3Jmi1yXrDwiNJqQ6fs1x61WsDLqVk4NyKVz78mkaIRh6d3IqtRnptgRfXn+Fzf+m6B1KxBYWq1APj6h4qeA== dependencies: "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-core" "3.2.38" + "@vue/shared" "3.2.38" estree-walker "^2.0.2" magic-string "^0.25.7" -"@vue/reactivity@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848" - integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== +"@vue/reactivity@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.38.tgz#d576fdcea98eefb96a1f1ad456e289263e87292e" + integrity sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw== dependencies: - "@vue/shared" "3.2.37" + "@vue/shared" "3.2.38" -"@vue/runtime-core@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3" - integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== +"@vue/runtime-core@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.38.tgz#d19cf591c210713f80e6a94ffbfef307c27aea06" + integrity sha512-kk0qiSiXUU/IKxZw31824rxmFzrLr3TL6ZcbrxWTKivadoKupdlzbQM4SlGo4MU6Zzrqv4fzyUasTU1jDoEnzg== dependencies: - "@vue/reactivity" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/reactivity" "3.2.38" + "@vue/shared" "3.2.38" -"@vue/runtime-dom@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd" - integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw== +"@vue/runtime-dom@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.38.tgz#fec711f65c2485991289fd4798780aa506469b48" + integrity sha512-4PKAb/ck2TjxdMSzMsnHViOrrwpudk4/A56uZjhzvusoEU9xqa5dygksbzYepdZeB5NqtRw5fRhWIiQlRVK45A== dependencies: - "@vue/runtime-core" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/runtime-core" "3.2.38" + "@vue/shared" "3.2.38" csstype "^2.6.8" -"@vue/server-renderer@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc" - integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA== +"@vue/server-renderer@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.38.tgz#01a4c0f218e90b8ad1815074208a1974ded109aa" + integrity sha512-pg+JanpbOZ5kEfOZzO2bt02YHd+ELhYP8zPeLU1H0e7lg079NtuuSB8fjLdn58c4Ou8UQ6C1/P+528nXnLPAhA== dependencies: - "@vue/compiler-ssr" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-ssr" "3.2.38" + "@vue/shared" "3.2.38" -"@vue/shared@3.2.37": - version "3.2.37" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702" - integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== +"@vue/shared@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.38.tgz#e823f0cb2e85b6bf43430c0d6811b1441c300f3c" + integrity sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg== "@vue/vue-loader-v15@npm:vue-loader@^15.9.7": version "15.10.0" @@ -2334,9 +2335,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: - version "1.0.30001382" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001382.tgz#4d37f0d0b6fffb826c8e5e1c0f4bf8ce592db949" - integrity sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg== + version "1.0.30001385" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001385.tgz#51d5feeb60b831a5b4c7177f419732060418535c" + integrity sha512-MpiCqJGhBkHgpyimE9GWmZTnyHyEEM35u115bD3QBrXpjvL/JgcP8cUhKJshfmg4OtEHFenifcK5sZayEw5tvQ== case-sensitive-paths-webpack-plugin@^2.3.0: version "2.4.0" @@ -2616,17 +2617,17 @@ copy-webpack-plugin@^9.0.1: serialize-javascript "^6.0.0" core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.8.3: - version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" - integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== + version "3.25.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.0.tgz#489affbfbf9cb3fa56192fe2dd9ebaee985a66c5" + integrity sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow== dependencies: browserslist "^4.21.3" semver "7.0.0" core-js@^3.8.3: - version "3.24.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" - integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== + version "3.25.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.0.tgz#be71d9e0dd648ffd70c44a7ec2319d039357eceb" + integrity sha512-CVU1xvJEfJGhyCpBrzzzU1kjCfgsGUxhEvwUV2e/cOedYWHdmluamx+knDnmhqALddMG16fZvIqvs9aijsHHaA== core-util-is@~1.0.0: version "1.0.3" @@ -3014,9 +3015,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.202: - version "1.4.226" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.226.tgz#837ea1d19b8305a913cd5f31d135681c4b6d63b1" - integrity sha512-CvevLaSiUp0u12K0e+QhMX1hn724nSUNO9ToBek+FMHk/5RofrQs5MChjrD0re0IwqxDFxFMSZD+uic05i2Z5w== + version "1.4.235" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.235.tgz#48ac33c4e869a1795013788099470061463d1890" + integrity sha512-eNU2SmVZYTzYVA5aAWmhAJbdVil5/8H5nMq6kGD0Yxd4k2uKIuT8YmS46I0QXY7iOoPPcb6jjem9/2xyuH5+XQ== emoji-regex@^8.0.0: version "8.0.0" @@ -3273,9 +3274,9 @@ espree@^7.3.0, espree@^7.3.1: eslint-visitor-keys "^1.3.0" espree@^9.0.0: - version "9.3.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" @@ -4700,9 +4701,9 @@ mz@^2.4.0: thenify-all "^1.0.0" naive-ui@^2.32.1: - version "2.32.2" - resolved "https://registry.yarnpkg.com/naive-ui/-/naive-ui-2.32.2.tgz#40f593df0b86b36f6af5635d9299417d45d6d96a" - integrity sha512-vTNuZ8LBlfo/cdiv4S8o6Cg5g7p9V9cR5rK+Fag2cplOnng5twTILD3sBaCqw3k/BV1331Xdk26ml8Me8QJ7iA== + version "2.33.1" + resolved "https://registry.yarnpkg.com/naive-ui/-/naive-ui-2.33.1.tgz#ef1046b727145e868c4be32686fd6073219f07ac" + integrity sha512-S8iS5TsnJ5PAbUCCC+IGjW7H6fYJF5s0HTzuUjqRLS8C1tFxmWhKkBZU1db/vg/4O5GKEyjaoq4ZSzRHOwRTcQ== dependencies: "@css-render/plugin-bem" "^0.15.10" "@css-render/vue3-ssr" "^0.15.10" @@ -5667,9 +5668,9 @@ sass-loader@^12.0.0: neo-async "^2.6.2" sass@^1.32.7: - version "1.54.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.5.tgz#93708f5560784f6ff2eab8542ade021a4a947b3a" - integrity sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw== + version "1.54.6" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.6.tgz#5a12c268db26555c335028e355d6b7b1a5b9b4c8" + integrity sha512-DUqJjR2WxXBcZjRSZX5gCVyU+9fuC2qDfFzoKX9rV4rCOcec5mPtEafTcfsyL3YJuLONjWylBne+uXVh5rrmFw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -6161,9 +6162,9 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: - version "5.3.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz#f7d82286031f915a4f8fb81af4bd35d2e3c011bc" - integrity sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA== + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== dependencies: "@jridgewell/trace-mapping" "^0.3.14" jest-worker "^27.4.5" @@ -6172,9 +6173,9 @@ terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3: terser "^5.14.1" terser@^5.10.0, terser@^5.14.1: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + version "5.15.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" + integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -6470,9 +6471,9 @@ vue-loader@^17.0.0: loader-utils "^2.0.0" vue-router@^4.0.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.1.4.tgz#290540caaf2c54e37a14dec047bd074002eca175" - integrity sha512-UgYen33gOtwT3cOG1+yRen+Brk9py8CSlC9LEa3UjvKZ4EAoSo8NjZPDeDnmNerfazorHIJG1NC7qdi1SuQJnQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.1.5.tgz#256f597e3f5a281a23352a6193aa6e342c8d9f9a" + integrity sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ== dependencies: "@vue/devtools-api" "^6.1.4" @@ -6490,15 +6491,15 @@ vue-template-es2015-compiler@^1.9.0: integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== vue@^3.2.13: - version "3.2.37" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e" - integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== + version "3.2.38" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.38.tgz#cda3a414631745b194971219318a792dbbccdec0" + integrity sha512-hHrScEFSmDAWL0cwO4B6WO7D3sALZPbfuThDsGBebthrNlDxdJZpGR3WB87VbjpPh96mep1+KzukYEhpHDFa8Q== dependencies: - "@vue/compiler-dom" "3.2.37" - "@vue/compiler-sfc" "3.2.37" - "@vue/runtime-dom" "3.2.37" - "@vue/server-renderer" "3.2.37" - "@vue/shared" "3.2.37" + "@vue/compiler-dom" "3.2.38" + "@vue/compiler-sfc" "3.2.38" + "@vue/runtime-dom" "3.2.38" + "@vue/server-renderer" "3.2.38" + "@vue/shared" "3.2.38" vueuc@^0.4.47: version "0.4.48" @@ -6575,9 +6576,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.7.3: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz#de270d0009eba050546912be90116e7fd740a9ca" - integrity sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ== + version "4.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.10.1.tgz#124ac9ac261e75303d74d95ab6712b4aec3e12ed" + integrity sha512-FIzMq3jbBarz3ld9l7rbM7m6Rj1lOsgq/DyLGMX/fPEB1UBUPtf5iL/4eNfhx8YYJTRlzfv107UfWSWcBK5Odw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5"