diff --git a/package.json b/package.json index 8dd740a..19f67c2 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "echarts": "4.8.0", "echarts-for-react": "2.0.16", "photoswipe": "^4.1.3", - "prettier": "^2.6.2", "qs": "^6.10.3", "react": "17.0.2", "react-dom": "17.0.2", @@ -44,5 +43,21 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "prettier": "^2.8.8", + "husky": "^8.0.3", + "lint-staged": "^13.2.2" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,jsx,ts,tsx}": [ + "prettier --write", + "git add" + ] } } diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..0309179 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,4 @@ +module.exports = { + tabWidth: 2, + singleQuote: true, +} \ No newline at end of file diff --git a/src/common/menu/MenuManager.tsx b/src/common/menu/MenuManager.tsx index 67f04df..ef1bb64 100644 --- a/src/common/menu/MenuManager.tsx +++ b/src/common/menu/MenuManager.tsx @@ -1,102 +1,136 @@ /** * 管理当前所有的菜单 */ -import React from "react"; +import React from 'react'; import MenuItem from './MenuItem'; import Moon from '../model/global/Moon'; import User from '../model/user/User'; -import {UserRole} from '../model/user/UserRole'; +import { UserRole } from '../model/user/UserRole'; import Sun from '../../common/model/global/Sun'; import { - AppstoreOutlined, - DashboardOutlined, - DeleteOutlined, - PoweroffOutlined, - SettingOutlined, - ShareAltOutlined, - TeamOutlined + AppstoreOutlined, + CloudSyncOutlined, + DashboardOutlined, + DeleteOutlined, + PoweroffOutlined, + SettingOutlined, + ShareAltOutlined, + TeamOutlined, } from '@ant-design/icons'; -import {LoginOutlined} from "@ant-design/icons/lib"; -import Preference from "../model/preference/Preference"; -import Lang from "../model/global/Lang"; - +import { LoginOutlined } from '@ant-design/icons/lib'; +import Preference from '../model/preference/Preference'; +import Lang from '../model/global/Lang'; export default class MenuManager { + //单例模式 + private static singleton: MenuManager; - //单例模式 - private static singleton: MenuManager; + constructor() {} - constructor() { - + static getSingleton(): MenuManager { + if (!MenuManager.singleton) { + //初始化一个mainLand. + MenuManager.singleton = new MenuManager(); } - - static getSingleton(): MenuManager { - if (!MenuManager.singleton) { - //初始化一个mainLand. - MenuManager.singleton = new MenuManager(); - - } - return MenuManager.singleton; - } - - /** - * 获取到当前高亮的菜单 - */ - getSelectedKeys(): string[] { - - let keys: string[] = this.getMenuItems() - .filter((menuItem: MenuItem, index: number) => { - return menuItem.active; - }).map((menuItem: MenuItem, index: number) => { - return menuItem.url; - }); - - return keys; - } - - /** - * 高亮某个菜单 - */ - selectMenu(url: string) { - - this.getMenuItems().forEach((menuItem: MenuItem, index: number) => { - menuItem.active = menuItem.url === url; - }); - - } - - getMenuItems(): MenuItem[] { - let user: User = Moon.getSingleton().user; - let preference: Preference = Moon.getSingleton().preference; - - let menuItems: MenuItem[] = []; - - if (!preference.installed) { - menuItems = [ - new MenuItem(Lang.t("layout.install"), '/install/index', ), - ]; - } else if (user.role === UserRole.GUEST) { - menuItems = [ - new MenuItem(Lang.t("user.login"), '/user/login', ), - ]; - } else { - menuItems.push(new MenuItem(Lang.t("layout.allFiles"), '/matter/list', )) - menuItems.push(new MenuItem(Lang.t("layout.myShare"), '/share/list', )) - menuItems.push(new MenuItem(Lang.t("layout.bin"), '/bin/list', )) - - if (user.role === UserRole.ADMINISTRATOR) { - menuItems.push(new MenuItem(Lang.t("layout.setting"), '/preference/index', )) - menuItems.push(new MenuItem(Lang.t("layout.dashboard"), '/dashboard/index', )) - menuItems.push(new MenuItem(Lang.t("layout.users"), `${Sun.getSingleton().isMobile ? '/mobile' : ''}/user/list`, - )) - } - menuItems.push(new MenuItem(Lang.t("layout.logout"), '/user/logout', )) - - - } - - return menuItems; + return MenuManager.singleton; + } + /** + * 获取到当前高亮的菜单 + */ + getSelectedKeys(): string[] { + let keys: string[] = this.getMenuItems() + .filter((menuItem: MenuItem, index: number) => { + return menuItem.active; + }) + .map((menuItem: MenuItem, index: number) => { + return menuItem.url; + }); + + return keys; + } + + /** + * 高亮某个菜单 + */ + selectMenu(url: string) { + this.getMenuItems().forEach((menuItem: MenuItem, index: number) => { + menuItem.active = menuItem.url === url; + }); + } + + getMenuItems(): MenuItem[] { + let user: User = Moon.getSingleton().user; + let preference: Preference = Moon.getSingleton().preference; + + let menuItems: MenuItem[] = []; + + if (!preference.installed) { + menuItems = [ + new MenuItem( + Lang.t('layout.install'), + '/install/index', + + ), + ]; + } else if (user.role === UserRole.GUEST) { + menuItems = [ + new MenuItem(Lang.t('user.login'), '/user/login', ), + ]; + } else { + menuItems.push( + new MenuItem( + Lang.t('layout.allFiles'), + '/matter/list', + + ) + ); + menuItems.push( + new MenuItem(Lang.t('layout.space'), '/space', ) + ); + menuItems.push( + new MenuItem( + Lang.t('layout.myShare'), + '/share/list', + + ) + ); + menuItems.push( + new MenuItem(Lang.t('layout.bin'), '/bin/list', ) + ); + + if (user.role === UserRole.ADMINISTRATOR) { + menuItems.push( + new MenuItem( + Lang.t('layout.setting'), + '/preference/index', + + ) + ); + menuItems.push( + new MenuItem( + Lang.t('layout.dashboard'), + '/dashboard/index', + + ) + ); + menuItems.push( + new MenuItem( + Lang.t('layout.users'), + `${Sun.getSingleton().isMobile ? '/mobile' : ''}/user/list`, + + ) + ); + } + menuItems.push( + new MenuItem( + Lang.t('layout.logout'), + '/user/logout', + + ) + ); } + return menuItems; + } } diff --git a/src/common/model/global/i18n/LangEn.ts b/src/common/model/global/i18n/LangEn.ts index f214d18..f38e070 100644 --- a/src/common/model/global/i18n/LangEn.ts +++ b/src/common/model/global/i18n/LangEn.ts @@ -307,6 +307,7 @@ let LangEn = { goToLogin: "Go To Login", roleGuest: "Guest", roleUser: "User", + roleUserRoleSpace: "User Space Role", roleAdministrator: "Administrator", statusActive: "Ok", statusDisabled: "Disabled", diff --git a/src/common/model/global/i18n/LangZh.ts b/src/common/model/global/i18n/LangZh.ts index b27ed97..f1f98c9 100644 --- a/src/common/model/global/i18n/LangZh.ts +++ b/src/common/model/global/i18n/LangZh.ts @@ -1,377 +1,387 @@ let LangZh = { - eyeblueTank: "蓝眼云盘", - dashboard: { - totalInvokeNum: '总PV', - weekRate: '周环比', - dayRate: '日环比', - yesterdayInvoke: '昨日PV', - totalUV: '总UV', - yesterdayUV: '昨日UV', - totalMatterNum: '总文件数', - yesterdayMatterNum: '昨日文件数', - totalFileSize: '文件总大小', - yesterdayMatterSize: '昨日文件大小', - recentDayInvokeUV: '最近{}日PV/UV', - downloadMatterTop10: '文件下载量TOP10', - activeIpTop10: '活跃IP TOP10', - loading: '加载中…', - date: '日期', - num: '数量', - warnHint: '温馨提示:本页面数据每日凌晨0点清洗一次。', - reRun: '立即重跑', - }, - install: { - configMysql: "配置数据库", - dbType: "数据库类型", - port: "端口", - schema: "库名", - username: "用户名", - password: "密码", - charset: "编码", - mysqlConnectionPass: "MySQL连接测试通过", - testMysqlConnection: "测试MySQL连接", - notice: "注意", - sqliteNotice1: "sqlite是一个轻量的文件数据库,无需安装即可使用", - mysqlNotice1: "如果数据库和蓝眼云盘安装在同一台服务器,Host可以直接填写 127.0.0.1。", - mysqlNotice2: "数据库账户的权限要求要能够创建表,否则第二步\"创建表\"操作会出错", - validateMysqlFirst: "请首先验证数据库连接", - preStep: "上一步", - nextStep: "下一步", - createTable: "创建表", - installed: "已安装", - installedButMissing: "已安装,字段缺失", - toBeInstalled: "待安装", - allFields: "所有字段", - missingFields: "缺失字段", - tableNotice: "点击\"一键建表\"后会按照以下逻辑执行操作:", - tableNotice1: "如果某表不存在,则直接创建表。", - tableNotice2: "如果某表存在并且字段齐全,那么不会对该表做任何操作。", - tableNotice3: "如果某表存在但是部分字段缺失,那么会在该表中增加缺失字段。", - tableNotice4: "如果表中有多余的字段(多余字段即不是蓝眼云盘需要的字段),不会做删除处理,而会维持原样。", - oneKeyCreate: "一键建表", - createFinish: "建表完成", - createTableSuccess: "建表成功", - crateTableFirst: "请首先点击'一键建表'", - setAdministrator: "设置管理员", - detectAdministrator: "检测到系统中已经存在有以下管理员:", - useOrCreateAdministrator: "你可以使用其中一位管理员的用户名和密码进行验证,或者创建一位新的管理员账户", - validateAdministrator: "验证管理员账户", - createAdministrator: "创建管理员账户", - administratorUsername: "管理员用户名", - administratorPassword: "管理员密码", - administratorRePassword: "再次输入密码", - usernameRule: "由于用户名将作为文件上传的目录,因此只允许字母数字以及\"_\"。", - congratulationInstall: "恭喜,安装成功!", - configAdminFirst: "请首先配置管理员信息!", - createAdminSuccess: "创建管理员成功!", - validateAdminSuccess: "验证管理员成功!", - pressToHome: "点击下方按钮来完成安装过程并进入首页。", - enterHome: "完成,并进入首页", - finish: "完成", - }, - layout: { - allFiles: "全部文件", - myShare: "我的分享", - bin: "回收站", - setting: "网站设置", - dashboard: "监控统计", - users: "用户管理", - logout: "退出登录", - about: "关于", - install: "安装网站", - dragMouseUp: "可以松手啦~" - }, - matter: { - file: "文件", - directory: "文件夹", - rename: "重命名", - download: "下载", - delete: "删除", - hardDelete: "彻底删除", - recovery: "恢复", - more: "更多", - share: "分享", - close: "关闭", - size: "大小", - preview: "预览", - move: "移动", - moveTo: "移动到", - upload: "上传", - create: "新建", - createTime: "创建时间", - updateTime: "修改时间", - deleteTime: "删除时间", - root: "根目录", - fillInPicLink: "请填写图片链接", - rePick: "重新选择", - chooseImage: "选择图片", - uploadMode: "上传模式", - fillMode: "填写模式", - sizeExceedLimit: "文件大小超过了限制{}>{}", - dropNotDirectory: "不可拖拽文件夹进行上传", - setPublic: "设置为公有文件", - setPrivate: "设置为私有文件", - copyLink: "复制下载链接", - enterName: "请输入名称", - publicFileEveryoneCanVisit: "公有文件,任何人可以访问", - fileDetail: "文件详情", - expire: "有效期", - copyLinkAndCode: "复制链接+提取码", - uploaded: "已上传", - uploadDir: '上传文件夹', - uploadInfo: '上传信息', - uploadErrorInfo: '部分文件上传失败,可导出csv文件查看', - exportCSV: '导出上传错误详情', - speed: "速度", - fileInfo: "文件基本信息", - fileName: "文件名", - path: "路径", - copyPath: "复制路径", - publicOrPrivate: "文件公开性", - privateInfo: "私有文件,只有自己或者授权的用户可以下载", - publicInfo: "公有文件,任何人可以通过链接下载", - downloadTimes: "下载次数", - operations: "操作", - oneTimeLink: "一次性链接", - oneTimeLinkInfo: "使用一次性链接下载后链接立即失效,可以分享这个链接给朋友,点击复制", - imageCache: "图片缓存", - searchFile: "搜索文件", - noContentYet: "该目录下暂无任何内容", - allFiles: "全部文件", - newDirectory: "新建文件夹", - notChoose: "没有选择文件", - exceed1000: "最多只能同时选取1000个文件", - noImageCache: "暂无图片缓存数据", - recycleBin: "回收站", - deleted: "已删除", - unCompatibleBrowser: "当前浏览器不支持,请切换浏览器尝试", - canIUse: "查看当前浏览器是否支持,点击跳转", - intoRecycleBin: "放入回收站", - finishingTip: "后台文件整理中,请稍候..." - }, - router: { - allFiles: "全部文件", - fileDetail: "文件详情", - login: "登录", - autoLogin: "自动登录", - register: "注册", - users: "用户列表", - userDetail: "用户详情", - changePassword: "修改密码", - editUser: "编辑用户", - createUser: "创建用户", - shareDetail: "分享详情", - myShare: "我的分享", - dashboard: "监控统计", - install: "安装网站", - setting: "网站设置" - }, - preference: { - basic: "基本信息", - preview: "预览引擎", - scan: "扫描磁盘", - websiteName: "网站名称", - logo: "Logo", - logoSquare: "logo请使用正方形图片,否则在显示时会裁剪成正方形", - onlyAllowIco: "只允许上传.ico图标", - copyright: "版权信息(支持html)", - extraInfo: "备案信息(支持html)", - zipMaxNumLimit: "zip下载数量限制", - zipMaxSizeLimit: "zip下载大小限制(B)", - current: "当前值", - noLimit: "无限制", - userDefaultSizeLimit: "用户默认总大小限制(B) ", - matterBinDefaultSaveDay: "回收站默认保留天数", - enterMatterBinDefaultSaveDay: "默认回收站默认保留天数必填!", - docLink: "文档链接", - tankDocLink: "https://tank-doc.eyeblue.cn/zh", - allowRegister: "允许自主注册", - systemCleanup: "重置系统", - systemCleanupDescription: "重置系统将清空除管理员账号外所有数据", - systemCleanupPrompt: "重置系统将清空除管理员账号外所有数据,事关重大,请输入登录密码", - previewConfig: "文件预览配置", - editPreference: "设置网站偏好", - editPreviewEngine: "设置预览引擎", - enterWebsiteName: "请输入网站名称!", - enterZipMaxNumLimit: "zip最大数量限制必填!", - enterZipMaxSizeLimit: "zip大小限制必填!", - enterUserDefaultSizeLimit: "默认用户空间大小必填!", - engine: "{}号预览引擎", - noEngine: "暂无在线预览引擎配置", - newEngine: "添加一个预览引擎", - engineReg: "引擎格式", - engineSuffix: "匹配后缀", - enginePreview: "预览方式", - defaultPreview: "默认引擎", - previewEngine: "{}号引擎", - defaultPreviewDesc: "默认预览引擎,不可移除", - engineRegHelper: "此处填写模板语法:{url}表示文件路径,预览时会自动替换成对应的文件url;{b64url}表示base64机密后的路径,适用于kkfileview;", - engineUsageHint: "对于一个文件的预览,使用第一个匹配到后缀名的引擎,没有配匹到则使用系统默认预览引擎", - engineRegPlaceHolder: "例如:https://xxx.xxx.xxx?url={url}", - engineSuffixPlaceHolder: '输入后缀,使用逗号分隔,不用带. 例如:doc,ppt,xls', - previewCurrent: "本站预览", - previewOpen: "新标签打开", - editScan: "设置磁盘扫描", - enableScan: "开启磁盘扫描", - disabledScan: "暂未开启磁盘扫描", - scanCron: "定时扫描", - cron: "cron表达式", - cronValidate: "cron表达式不能为空", - scanScope: "扫描范围", - scanUsers: "扫描用户", - scanPerTenSeconds: "每十秒", - scanPerThirtySeconds: "每三十秒", - scanPerMinute: "每分钟", - scanPerHour: "每小时", - scanCustom: "自定义", - chooseUsers: "模糊搜索用户", - chooseUsersValidate: "请选择至少一个用户", - scanLoading: "扫描中,请稍后...", - matterBinDefaultTip: "设置0表示关闭回收站功能" - }, - share: { - shareDetail: "分享详情", - shareTime: "分享时间", - expireTime: "失效时间", - noExpire: "永久有效", - expired: "已过期", - copyLinkAndCode: "复制链接+提取码", - shareSuccess: "分享成功", - sharer: "分享者", - link: "链接", - copyLink: "复制链接", - code: "提取码", - copyCode: "复制提取码", - copySuccess: "复制成功", - more: "更多", - cancelShare: "取消分享", - getLink: "获取链接", - allFiles: "全部文件", - noContent: "该目录下暂无任何内容", - enterCode: "请输入提取码", - getFiles: "提取文件", - codeError: "提取码错误", - cancelPrompt: "此操作将永久取消该分享, 是否继续?", - hour: "1小时", - day: "1天", - week: "1周", - month: "1个月", - year: "1年", - infinity: "永远有效", - emptyHint: "暂无任何分享", - }, - user: { - redirecting: "正在转跳...", - oldPassword: "旧密码", - newPassword: "新密码", - confirmNewPassword: "确认新密码", - cannotBeNull: "不能为空!", - passwordNotSame: "两次输入不一致!", - role: "角色", - singleFileSizeLimit: "单文件限制", - totalFileSizeLimit: "空间限制", - current: "当前值", - noLimit: "无限制", - totalFileSize: "已使用空间", - status: "状态", - lastLogin: "上次登录", - lastLoginIp: "上次登录IP", - lastLoginTime: "上次登录时间", - resetPassword: "重置密码", - transfiguration: "变身", - changePassword: "修改密码", - enterPassword: "输入密码", - enterUsername: "请输入用户名", - enterNewPassword: "请输入新密码", - profile: "个人详情", - avatar: "头像", - username: "用户名", - password: "密码", - confirmPassword: "确认密码", - disabled: "已禁用", - disableUser: "禁用该用户", - activeUser: "激活该用户", - deleteUser: "删除该用户", - deleteHint: "此操作将删除用户【{}】的所有记录,包括文件,分享,用户信息等内容,确定继续?", - disable: "禁用", - sync: "同步", - active: "激活", - welcomeLogin: "欢迎登录", - logining: "正在登录...", - login: "登录", - loginSuccess: "登录成功", - toToRegister: "立即注册", - welcomeRegister: "欢迎注册", - registering: "正在登录...", - register: "注册", - goToLogin: "前往登录", - roleGuest: "游客", - roleUser: "注册用户", - roleAdministrator: "管理员", - statusActive: "正常", - statusDisabled: "禁用", - webdavLink: "WebDAV 地址", - docLink: "文档链接", - createUser: "创建用户", - editUser: "编辑用户", - editSomebodyPassword: "修改{}的密码", - transfigurationPromptText: "变身提示", - transfigurationPrompt: "您将使用该用户的身份登录。请复制以下链接到其他浏览器访问,在当前浏览器访问会导致当前用户登录信息失效。", - allUsers: "全部用户", - partialUsers: "局部用户", - searchUser: "搜索用户" - }, - model: { - usernameRule: "用户名只能包含字母,数字和\"_\"", - passwordRule: "密码长度至少为6位", - linkCodeText: "链接:{} 提取码:{}", - copyLinkCodeSuccess: "复制链接提取码成功", + eyeblueTank: '蓝眼云盘', + dashboard: { + totalInvokeNum: '总PV', + weekRate: '周环比', + dayRate: '日环比', + yesterdayInvoke: '昨日PV', + totalUV: '总UV', + yesterdayUV: '昨日UV', + totalMatterNum: '总文件数', + yesterdayMatterNum: '昨日文件数', + totalFileSize: '文件总大小', + yesterdayMatterSize: '昨日文件大小', + recentDayInvokeUV: '最近{}日PV/UV', + downloadMatterTop10: '文件下载量TOP10', + activeIpTop10: '活跃IP TOP10', + loading: '加载中…', + date: '日期', + num: '数量', + warnHint: '温馨提示:本页面数据每日凌晨0点清洗一次。', + reRun: '立即重跑', + }, + install: { + configMysql: '配置数据库', + dbType: '数据库类型', + port: '端口', + schema: '库名', + username: '用户名', + password: '密码', + charset: '编码', + mysqlConnectionPass: 'MySQL连接测试通过', + testMysqlConnection: '测试MySQL连接', + notice: '注意', + sqliteNotice1: 'sqlite是一个轻量的文件数据库,无需安装即可使用', + mysqlNotice1: + '如果数据库和蓝眼云盘安装在同一台服务器,Host可以直接填写 127.0.0.1。', + mysqlNotice2: + '数据库账户的权限要求要能够创建表,否则第二步"创建表"操作会出错', + validateMysqlFirst: '请首先验证数据库连接', + preStep: '上一步', + nextStep: '下一步', + createTable: '创建表', + installed: '已安装', + installedButMissing: '已安装,字段缺失', + toBeInstalled: '待安装', + allFields: '所有字段', + missingFields: '缺失字段', + tableNotice: '点击"一键建表"后会按照以下逻辑执行操作:', + tableNotice1: '如果某表不存在,则直接创建表。', + tableNotice2: '如果某表存在并且字段齐全,那么不会对该表做任何操作。', + tableNotice3: '如果某表存在但是部分字段缺失,那么会在该表中增加缺失字段。', + tableNotice4: + '如果表中有多余的字段(多余字段即不是蓝眼云盘需要的字段),不会做删除处理,而会维持原样。', + oneKeyCreate: '一键建表', + createFinish: '建表完成', + createTableSuccess: '建表成功', + crateTableFirst: "请首先点击'一键建表'", + setAdministrator: '设置管理员', + detectAdministrator: '检测到系统中已经存在有以下管理员:', + useOrCreateAdministrator: + '你可以使用其中一位管理员的用户名和密码进行验证,或者创建一位新的管理员账户', + validateAdministrator: '验证管理员账户', + createAdministrator: '创建管理员账户', + administratorUsername: '管理员用户名', + administratorPassword: '管理员密码', + administratorRePassword: '再次输入密码', + usernameRule: '由于用户名将作为文件上传的目录,因此只允许字母数字以及"_"。', + congratulationInstall: '恭喜,安装成功!', + configAdminFirst: '请首先配置管理员信息!', + createAdminSuccess: '创建管理员成功!', + validateAdminSuccess: '验证管理员成功!', + pressToHome: '点击下方按钮来完成安装过程并进入首页。', + enterHome: '完成,并进入首页', + finish: '完成', + }, + layout: { + allFiles: '个人文件', + myShare: '我的分享', + bin: '回收站', + setting: '网站设置', + dashboard: '监控统计', + users: '用户管理', + logout: '退出登录', + about: '关于', + install: '安装网站', + dragMouseUp: '可以松手啦~', + }, + matter: { + file: '文件', + directory: '文件夹', + rename: '重命名', + download: '下载', + delete: '删除', + hardDelete: '彻底删除', + recovery: '恢复', + more: '更多', + share: '分享', + close: '关闭', + size: '大小', + preview: '预览', + move: '移动', + moveTo: '移动到', + upload: '上传', + create: '新建', + createTime: '创建时间', + updateTime: '修改时间', + deleteTime: '删除时间', + root: '根目录', + fillInPicLink: '请填写图片链接', + rePick: '重新选择', + chooseImage: '选择图片', + uploadMode: '上传模式', + fillMode: '填写模式', + sizeExceedLimit: '文件大小超过了限制{}>{}', + dropNotDirectory: '不可拖拽文件夹进行上传', + setPublic: '设置为公有文件', + setPrivate: '设置为私有文件', + copyLink: '复制下载链接', + enterName: '请输入名称', + publicFileEveryoneCanVisit: '公有文件,任何人可以访问', + fileDetail: '文件详情', + expire: '有效期', + copyLinkAndCode: '复制链接+提取码', + uploaded: '已上传', + uploadDir: '上传文件夹', + uploadInfo: '上传信息', + uploadErrorInfo: '部分文件上传失败,可导出csv文件查看', + exportCSV: '导出上传错误详情', + speed: '速度', + fileInfo: '文件基本信息', + fileName: '文件名', + path: '路径', + copyPath: '复制路径', + publicOrPrivate: '文件公开性', + privateInfo: '私有文件,只有自己或者授权的用户可以下载', + publicInfo: '公有文件,任何人可以通过链接下载', + downloadTimes: '下载次数', + operations: '操作', + oneTimeLink: '一次性链接', + oneTimeLinkInfo: + '使用一次性链接下载后链接立即失效,可以分享这个链接给朋友,点击复制', + imageCache: '图片缓存', + searchFile: '搜索文件', + noContentYet: '该目录下暂无任何内容', + allFiles: '全部文件', + newDirectory: '新建文件夹', + notChoose: '没有选择文件', + exceed1000: '最多只能同时选取1000个文件', + noImageCache: '暂无图片缓存数据', + recycleBin: '回收站', + deleted: '已删除', + unCompatibleBrowser: '当前浏览器不支持,请切换浏览器尝试', + canIUse: '查看当前浏览器是否支持,点击跳转', + intoRecycleBin: '放入回收站', + finishingTip: '后台文件整理中,请稍候...', + }, + router: { + allFiles: '全部文件', + fileDetail: '文件详情', + login: '登录', + autoLogin: '自动登录', + register: '注册', + users: '用户列表', + userDetail: '用户详情', + changePassword: '修改密码', + editUser: '编辑用户', + createUser: '创建用户', + shareDetail: '分享详情', + myShare: '我的分享', + dashboard: '监控统计', + install: '安装网站', + setting: '网站设置', + }, + preference: { + basic: '基本信息', + preview: '预览引擎', + scan: '扫描磁盘', + websiteName: '网站名称', + logo: 'Logo', + logoSquare: 'logo请使用正方形图片,否则在显示时会裁剪成正方形', + onlyAllowIco: '只允许上传.ico图标', + copyright: '版权信息(支持html)', + extraInfo: '备案信息(支持html)', + zipMaxNumLimit: 'zip下载数量限制', + zipMaxSizeLimit: 'zip下载大小限制(B)', + current: '当前值', + noLimit: '无限制', + userDefaultSizeLimit: '用户默认总大小限制(B) ', + matterBinDefaultSaveDay: '回收站默认保留天数', + enterMatterBinDefaultSaveDay: '默认回收站默认保留天数必填!', + docLink: '文档链接', + tankDocLink: 'https://tank-doc.eyeblue.cn/zh', + allowRegister: '允许自主注册', + systemCleanup: '重置系统', + systemCleanupDescription: '重置系统将清空除管理员账号外所有数据', + systemCleanupPrompt: + '重置系统将清空除管理员账号外所有数据,事关重大,请输入登录密码', + previewConfig: '文件预览配置', + editPreference: '设置网站偏好', + editPreviewEngine: '设置预览引擎', + enterWebsiteName: '请输入网站名称!', + enterZipMaxNumLimit: 'zip最大数量限制必填!', + enterZipMaxSizeLimit: 'zip大小限制必填!', + enterUserDefaultSizeLimit: '默认用户空间大小必填!', + engine: '{}号预览引擎', + noEngine: '暂无在线预览引擎配置', + newEngine: '添加一个预览引擎', + engineReg: '引擎格式', + engineSuffix: '匹配后缀', + enginePreview: '预览方式', + defaultPreview: '默认引擎', + previewEngine: '{}号引擎', + defaultPreviewDesc: '默认预览引擎,不可移除', + engineRegHelper: + '此处填写模板语法:{url}表示文件路径,预览时会自动替换成对应的文件url;{b64url}表示base64机密后的路径,适用于kkfileview;', + engineUsageHint: + '对于一个文件的预览,使用第一个匹配到后缀名的引擎,没有配匹到则使用系统默认预览引擎', + engineRegPlaceHolder: '例如:https://xxx.xxx.xxx?url={url}', + engineSuffixPlaceHolder: + '输入后缀,使用逗号分隔,不用带. 例如:doc,ppt,xls', + previewCurrent: '本站预览', + previewOpen: '新标签打开', + editScan: '设置磁盘扫描', + enableScan: '开启磁盘扫描', + disabledScan: '暂未开启磁盘扫描', + scanCron: '定时扫描', + cron: 'cron表达式', + cronValidate: 'cron表达式不能为空', + scanScope: '扫描范围', + scanUsers: '扫描用户', + scanPerTenSeconds: '每十秒', + scanPerThirtySeconds: '每三十秒', + scanPerMinute: '每分钟', + scanPerHour: '每小时', + scanCustom: '自定义', + chooseUsers: '模糊搜索用户', + chooseUsersValidate: '请选择至少一个用户', + scanLoading: '扫描中,请稍后...', + matterBinDefaultTip: '设置0表示关闭回收站功能', + }, + share: { + shareDetail: '分享详情', + shareTime: '分享时间', + expireTime: '失效时间', + noExpire: '永久有效', + expired: '已过期', + copyLinkAndCode: '复制链接+提取码', + shareSuccess: '分享成功', + sharer: '分享者', + link: '链接', + copyLink: '复制链接', + code: '提取码', + copyCode: '复制提取码', + copySuccess: '复制成功', + more: '更多', + cancelShare: '取消分享', + getLink: '获取链接', + allFiles: '全部文件', + noContent: '该目录下暂无任何内容', + enterCode: '请输入提取码', + getFiles: '提取文件', + codeError: '提取码错误', + cancelPrompt: '此操作将永久取消该分享, 是否继续?', + hour: '1小时', + day: '1天', + week: '1周', + month: '1个月', + year: '1年', + infinity: '永远有效', + emptyHint: '暂无任何分享', + }, + user: { + redirecting: '正在转跳...', + oldPassword: '旧密码', + newPassword: '新密码', + confirmNewPassword: '确认新密码', + cannotBeNull: '不能为空!', + passwordNotSame: '两次输入不一致!', + role: '角色', + singleFileSizeLimit: '单文件限制', + totalFileSizeLimit: '空间限制', + current: '当前值', + noLimit: '无限制', + totalFileSize: '已使用空间', + status: '状态', + lastLogin: '上次登录', + lastLoginIp: '上次登录IP', + lastLoginTime: '上次登录时间', + resetPassword: '重置密码', + transfiguration: '变身', + changePassword: '修改密码', + enterPassword: '输入密码', + enterUsername: '请输入用户名', + enterNewPassword: '请输入新密码', + profile: '个人详情', + avatar: '头像', + username: '用户名', + password: '密码', + confirmPassword: '确认密码', + disabled: '已禁用', + disableUser: '禁用该用户', + activeUser: '激活该用户', + deleteUser: '删除该用户', + deleteHint: + '此操作将删除用户【{}】的所有记录,包括文件,分享,用户信息等内容,确定继续?', + disable: '禁用', + sync: '同步', + active: '激活', + welcomeLogin: '欢迎登录', + logining: '正在登录...', + login: '登录', + loginSuccess: '登录成功', + toToRegister: '立即注册', + welcomeRegister: '欢迎注册', + registering: '正在登录...', + register: '注册', + goToLogin: '前往登录', + roleGuest: '游客', + roleUser: '注册用户', + roleUserRoleSpace: '用户空间角色', + roleAdministrator: '管理员', + statusActive: '正常', + statusDisabled: '禁用', + webdavLink: 'WebDAV 地址', + docLink: '文档链接', + createUser: '创建用户', + editUser: '编辑用户', + editSomebodyPassword: '修改{}的密码', + transfigurationPromptText: '变身提示', + transfigurationPrompt: + '您将使用该用户的身份登录。请复制以下链接到其他浏览器访问,在当前浏览器访问会导致当前用户登录信息失效。', + allUsers: '全部用户', + partialUsers: '局部用户', + searchUser: '搜索用户', + }, + model: { + usernameRule: '用户名只能包含字母,数字和"_"', + passwordRule: '密码长度至少为6位', + linkCodeText: '链接:{} 提取码:{}', + copyLinkCodeSuccess: '复制链接提取码成功', + }, + plugin: { + cannotPreview: '无法预览', + emptyHintDefault: '没有符合条件的项目', + everyPage: '每页', + items: '条', + total: '共', + clickRefresh: '点击刷新', + }, + loading: '加载中', + selectAll: '全选', + edit: '修改', + createTime: '创建时间', + download: '下载', + close: '关闭', + required: '必填', + cancel: '取消', + delete: '删除', + deleteDirectly: '直接删除', + actionCanNotRevertConfirm: '此操作不可撤回, 是否继续?', + actionDeleteConfirm: '确定删除吗?', + actionRecoveryConfirm: '确定恢复吗?', + prompt: '提示', + confirm: '确定', + copy: '复制', + copySuccess: '复制成功!', + copyError: '复制失败!', + showMore: '显示更多', + username: '用户名', + password: '密码', + submit: '提交', + save: '保存', + create: '创建', + finish: '完成', + operationSuccess: '操作成功', + operation: '操作', + notFound: '404 页面找不到', + login: '登录', + logout: '退出', + yes: '是', + no: '否', + all: '所有', + refresh: '刷新', + inputRequired: '该项必填', +}; - }, - plugin: { - cannotPreview: "无法预览", - emptyHintDefault: "没有符合条件的项目", - everyPage: "每页", - items: "条", - total: "共", - clickRefresh: "点击刷新", - }, - loading: "加载中", - selectAll: "全选", - edit: "修改", - createTime: "创建时间", - download: "下载", - close: "关闭", - required: "必填", - cancel: "取消", - delete: "删除", - deleteDirectly: "直接删除", - actionCanNotRevertConfirm: "此操作不可撤回, 是否继续?", - actionDeleteConfirm: "确定删除吗?", - actionRecoveryConfirm: "确定恢复吗?", - prompt: "提示", - confirm: "确定", - copy: "复制", - copySuccess: "复制成功!", - copyError: "复制失败!", - showMore: "显示更多", - username: "用户名", - password: "密码", - submit: "提交", - save: "保存", - create: "创建", - finish: "完成", - operationSuccess: "操作成功", - operation: "操作", - notFound: "404 页面找不到", - login: "登录", - logout: "退出", - yes: "是", - no: "否", - all: "所有", - refresh: "刷新", - inputRequired: "该项必填", - -} - -export default LangZh +export default LangZh; diff --git a/src/common/model/space/Space.ts b/src/common/model/space/Space.ts new file mode 100644 index 0000000..bdd5d92 --- /dev/null +++ b/src/common/model/space/Space.ts @@ -0,0 +1,21 @@ +import BaseEntity from "../base/BaseEntity"; +import User from "../user/User"; + +export default class Space extends BaseEntity { + + userUuid: string | null = null + user: User | null = null + + constructor(reactComponent?: React.Component) { + + super(reactComponent); + + } + + assign(obj: any) { + super.assign(obj); + this.assignEntity("user", User) + } + + +} \ No newline at end of file diff --git a/src/common/model/space/member/SpaceMember.ts b/src/common/model/space/member/SpaceMember.ts new file mode 100644 index 0000000..f42838b --- /dev/null +++ b/src/common/model/space/member/SpaceMember.ts @@ -0,0 +1,23 @@ +import BaseEntity from "../../base/BaseEntity"; +import User from "../../user/User"; +import {SpaceMemberRole} from "./SpaceMemberRole"; + +export default class Space extends BaseEntity { + spaceUuid: string | null = null + userUuid: string | null = null + role: SpaceMemberRole | null = null + user: User | null = null + + constructor(reactComponent?: React.Component) { + + super(reactComponent); + + } + + assign(obj: any) { + super.assign(obj); + this.assignEntity("user", User) + } + + +} \ No newline at end of file diff --git a/src/common/model/space/member/SpaceMemberRole.ts b/src/common/model/space/member/SpaceMemberRole.ts new file mode 100644 index 0000000..7045d04 --- /dev/null +++ b/src/common/model/space/member/SpaceMemberRole.ts @@ -0,0 +1,32 @@ +import SelectionOption from "../../base/option/SelectionOption"; +import Lang from "../../global/Lang"; + +enum SpaceMemberRole { + READ_ONLY = 'READ_ONLY', + READ_WRITE = 'READ_WRITE', + ADMIN='ADMIN' +} + +const SpaceMemberRoles:SpaceMemberRole[] = Object.keys(SpaceMemberRole).map(k => k as SpaceMemberRole); + +const SpaceMemberRoleMap: Record = { + [SpaceMemberRole.READ_ONLY]: { + name: Lang.t("spaceMember.readOnly"), + value: SpaceMemberRole.READ_ONLY + }, + [SpaceMemberRole.READ_WRITE]: { + name: Lang.t("spaceMember.readWrite"), + value: SpaceMemberRole.READ_WRITE + }, + [SpaceMemberRole.ADMIN]: { + name: Lang.t("spaceMember.admin"), + value: SpaceMemberRole.ADMIN + } +} + +const SpaceMemberRoleList: SelectionOption[] = []; +SpaceMemberRoles.forEach((type: SpaceMemberRole, index: number) => { + SpaceMemberRoleList.push(SpaceMemberRoleMap[type]); +}) + +export {SpaceMemberRole, SpaceMemberRoles, SpaceMemberRoleMap, SpaceMemberRoleList}; \ No newline at end of file diff --git a/src/common/model/user/UserRole.ts b/src/common/model/user/UserRole.ts index b670d69..bd6c4ee 100644 --- a/src/common/model/user/UserRole.ts +++ b/src/common/model/user/UserRole.ts @@ -6,6 +6,7 @@ import Lang from "../global/Lang"; enum UserRole { GUEST = 'GUEST', USER = 'USER', + SPACE = "SPACE", ADMINISTRATOR = 'ADMINISTRATOR', } @@ -22,6 +23,11 @@ let UserRoleMap: { [key in keyof typeof UserRole]: ColorSelectionOption } = { 'value': 'USER', 'color': Color.PRIMARY, }, + SPACE: { + 'name': Lang.t("user.roleUserRoleSpace"), + 'value': UserRole.SPACE, + 'color': Color.SUCCESS, + }, ADMINISTRATOR: { 'name': Lang.t("user.roleAdministrator"), 'value': 'ADMINISTRATOR', diff --git a/src/pages/Frame.tsx b/src/pages/Frame.tsx index 50f491b..de45a56 100644 --- a/src/pages/Frame.tsx +++ b/src/pages/Frame.tsx @@ -1,192 +1,198 @@ -import React from "react"; -import {Redirect, Route, RouteComponentProps, withRouter,} from "react-router-dom"; +import React from 'react'; +import { + Redirect, + Route, + RouteComponentProps, + withRouter, +} from 'react-router-dom'; -import "./Frame.less"; -import TankComponent from "../common/component/TankComponent"; -import UserLogin from "./user/Login"; -import UserRegister from "./user/Register"; +import './Frame.less'; +import TankComponent from '../common/component/TankComponent'; +import UserLogin from './user/Login'; +import UserRegister from './user/Register'; -import UserList from "./user/List"; -import MobileUserList from "./user/MobileList"; -import UserDetail from "./user/Detail"; -import UserEdit from "./user/Edit"; -import UserAuthentication from "./user/Authentication"; +import UserList from './user/List'; +import MobileUserList from './user/MobileList'; +import UserDetail from './user/Detail'; +import UserEdit from './user/Edit'; +import UserAuthentication from './user/Authentication'; -import PreferenceIndex from "./preference/Index"; -import PreferenceEdit from "./preference/Edit"; -import PreferenceEngineEdit from "./preference/PreviewEngineEdit"; -import PreferenceScanEdit from "./preference/ScanEdit"; +import PreferenceIndex from './preference/Index'; +import PreferenceEdit from './preference/Edit'; +import PreferenceEngineEdit from './preference/PreviewEngineEdit'; +import PreferenceScanEdit from './preference/ScanEdit'; -import DashboardIndex from "./dashboard/Index"; -import InstallIndex from "./install/Index"; +import DashboardIndex from './dashboard/Index'; +import InstallIndex from './install/Index'; -import MatterList from "./matter/List"; -import MatterDetail from "./matter/Detail"; +import MatterList from './matter/List'; +import MatterDetail from './matter/Detail'; -import BinList from "./bin/List"; +import BinList from './bin/List'; -import ShareList from "./share/List"; -import ShareDetail from "./share/Detail"; -import User from "../common/model/user/User"; -import Moon from "../common/model/global/Moon"; -import Sun from "../common/model/global/Sun"; -import FrameLoading from "./widget/FrameLoading"; -import Preference from "../common/model/preference/Preference"; -import {WebResultCode} from "../common/model/base/WebResultCode"; -import MessageBoxUtil from "../common/util/MessageBoxUtil"; -import BottomLayout from "./layout/BottomLayout"; -import SideLayout from "./layout/SideLayout"; -import TopLayout from "./layout/TopLayout"; -import ContentLayout from "./layout/ContentLayout"; +import ShareList from './share/List'; +import ShareDetail from './share/Detail'; +import User from '../common/model/user/User'; +import Moon from '../common/model/global/Moon'; +import Sun from '../common/model/global/Sun'; +import FrameLoading from './widget/FrameLoading'; +import Preference from '../common/model/preference/Preference'; +import { WebResultCode } from '../common/model/base/WebResultCode'; +import MessageBoxUtil from '../common/util/MessageBoxUtil'; +import BottomLayout from './layout/BottomLayout'; +import SideLayout from './layout/SideLayout'; +import TopLayout from './layout/TopLayout'; +import ContentLayout from './layout/ContentLayout'; -interface IProps extends RouteComponentProps<{}> { -} +import SpaceList from './space/List'; -interface IState { -} +interface IProps extends RouteComponentProps<{}> {} + +interface IState {} class RawFrame extends TankComponent { - user: User = Moon.getSingleton().user; + user: User = Moon.getSingleton().user; - preference: Preference = Moon.getSingleton().preference; + preference: Preference = Moon.getSingleton().preference; - //是否已经完成初始化 - initialized: boolean = false; + //是否已经完成初始化 + initialized: boolean = false; - constructor(props: IProps) { - super(props); - } + constructor(props: IProps) { + super(props); + } - componentDidMount() { - //装载全局的路由 - Sun.getSingleton().reactRouter = this.props.history; - //装在全局Frame - Sun.getSingleton().frameComponent = this; + componentDidMount() { + //装载全局的路由 + Sun.getSingleton().reactRouter = this.props.history; + //装在全局Frame + Sun.getSingleton().frameComponent = this; - this.initialize(); - } + this.initialize(); + } - //获取当前登录者的信息 - initialize() { - let that = this; - let pathname: string = that.props.location.pathname; + //获取当前登录者的信息 + initialize() { + let that = this; + let pathname: string = that.props.location.pathname; - this.preference.httpFetch( - function () { - // 白名单,不要求登录 - let whitePaths = [ - "/user/login", - "/user/register", - "/user/authentication", - ]; - // 尝试登录名单,登录失败不做处理 - let tryLoginPaths = [ - "/share/detail", - ]; + this.preference.httpFetch( + function () { + // 白名单,不要求登录 + let whitePaths = [ + '/user/login', + '/user/register', + '/user/authentication', + ]; + // 尝试登录名单,登录失败不做处理 + let tryLoginPaths = ['/share/detail']; - if (whitePaths.findIndex((path) => pathname.startsWith(path)) >= 0) { - that.initialized = true; - that.updateUI(); - } else if (tryLoginPaths.findIndex((path) => pathname.startsWith(path)) >= 0) { - that.user.httpInfo(false, function () { - that.initialized = true; - that.updateUI(); - }); - } else { - that.user.httpInfo(true, function () { - that.initialized = true; - that.updateUI(); - }); - } - }, - function (errMessage: string, response: any) { - that.initialized = true; - that.updateUI(); - if ( - response && - response.data && - response.data["code"] === WebResultCode.NOT_INSTALLED - ) { - MessageBoxUtil.warning("网站尚未安装,即将引导进入安装页面!"); - that.preference.installed = false; - Sun.navigateTo("/install/index"); - } - } - ); - } - - render() { - let content: React.ReactNode; - - if (this.initialized) { - content = ( - - - - - - - {this.preference.installed ? ( - - } - /> - - - - - - - - - - - - - - - - - - } - /> - - - - - - - - ) : ( - - - - )} - - - - - ); + if (whitePaths.findIndex((path) => pathname.startsWith(path)) >= 0) { + that.initialized = true; + that.updateUI(); + } else if ( + tryLoginPaths.findIndex((path) => pathname.startsWith(path)) >= 0 + ) { + that.user.httpInfo(false, function () { + that.initialized = true; + that.updateUI(); + }); } else { - content = ; + that.user.httpInfo(true, function () { + that.initialized = true; + that.updateUI(); + }); } + }, + function (errMessage: string, response: any) { + that.initialized = true; + that.updateUI(); + if ( + response && + response.data && + response.data['code'] === WebResultCode.NOT_INSTALLED + ) { + MessageBoxUtil.warning('网站尚未安装,即将引导进入安装页面!'); + that.preference.installed = false; + Sun.navigateTo('/install/index'); + } + } + ); + } - return {content}; + render() { + let content: React.ReactNode; + + if (this.initialized) { + content = ( + + + + + + + {this.preference.installed ? ( + + } + /> + + + + + + + + + + + + + + + + + + } + /> + + + + + + + + + ) : ( + + + + )} + + + + + ); + } else { + content = ; } + + return {content}; + } } const Frame = withRouter>(RawFrame); diff --git a/src/pages/space/List.less b/src/pages/space/List.less new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/space/List.tsx b/src/pages/space/List.tsx new file mode 100644 index 0000000..0879bff --- /dev/null +++ b/src/pages/space/List.tsx @@ -0,0 +1,11 @@ +import React from 'react'; + +const List = () => { + return ( + + Space List + + ); +}; + +export default List; diff --git a/yarn.lock b/yarn.lock index ccc5705..7e4d8d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2348,7 +2348,7 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2389,6 +2389,11 @@ ansi-styles@^5.0.0: resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + antd@4.19.2: version "4.19.2" resolved "https://registry.npmmirror.com/antd/-/antd-4.19.2.tgz#5438478aedf61bf670784611cba077387ff0f1b3" @@ -2535,6 +2540,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-validator@^4.0.2: version "4.0.7" resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe" @@ -2810,7 +2820,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2921,6 +2931,11 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== +chalk@5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3005,6 +3020,29 @@ clean-stack@^2.0.0: resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3067,6 +3105,11 @@ colorette@^2.0.10: resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3079,6 +3122,11 @@ comma-separated-values@^3.6.4: resolved "https://registry.npmmirror.com/comma-separated-values/-/comma-separated-values-3.6.4.tgz#c309ec7024f74b7ae19223372054242617e35bd2" integrity sha512-B0mjBHUfu4JqzYM5NurRTBl2QuNqQ9/O62EUfL4+bo2KN81fGsFOFOHbHn5SP65n3lmFPzGLkdg8wfuLKk9HOQ== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.20.0: version "2.20.3" resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3495,7 +3543,7 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3782,6 +3830,11 @@ duplexer@^0.1.2: resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + echarts-for-react@2.0.16: version "2.0.16" resolved "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-2.0.16.tgz#8134a53dff90882c1e6a95c45ceab21e00f6c9f5" @@ -4233,6 +4286,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^7.0.0: + version "7.1.1" + resolved "https://registry.npmmirror.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4556,7 +4624,7 @@ get-package-type@^0.1.0: resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -4859,6 +4927,16 @@ human-signals@^2.1.0: resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.npmmirror.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5047,6 +5125,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -5134,6 +5217,11 @@ is-stream@^2.0.0: resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5876,6 +5964,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lilconfig@2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + lilconfig@^2.0.3, lilconfig@^2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" @@ -5886,6 +5979,39 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lint-staged@^13.2.2: + version "13.2.2" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" + integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + dependencies: + chalk "5.2.0" + cli-truncate "^3.1.0" + commander "^10.0.0" + debug "^4.3.4" + execa "^7.0.0" + lilconfig "2.1.0" + listr2 "^5.0.7" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.3" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.2.2" + +listr2@^5.0.7: + version "5.0.8" + resolved "https://registry.npmmirror.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.8.0" + through "^2.3.8" + wrap-ansi "^7.0.0" + loader-runner@^4.2.0: version "4.2.0" resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" @@ -5974,6 +6100,16 @@ lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17 resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6084,6 +6220,14 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -6106,6 +6250,11 @@ mimic-fn@^2.1.0: resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mini-create-react-context@^0.4.0: version "0.4.1" resolved "https://registry.npmmirror.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" @@ -6259,6 +6408,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -6293,6 +6449,11 @@ object-inspect@^1.11.0, object-inspect@^1.9.0: resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.12.3: + version "1.12.3" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-is@^1.0.1: version "1.1.5" resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -6384,13 +6545,20 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.2: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.0.9, open@^8.4.0: version "8.4.0" resolved "https://registry.npmmirror.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" @@ -6566,6 +6734,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -6608,11 +6781,16 @@ picocolors@^1.0.0: resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pify@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -7179,10 +7357,10 @@ prelude-ls@~1.1.2: resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prettier@^2.6.2: - version "2.6.2" - resolved "https://registry.npmmirror.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" @@ -8055,6 +8233,14 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + retry@^0.13.1: version "0.13.1" resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -8065,6 +8251,11 @@ reusify@^1.0.4: resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8096,6 +8287,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -8319,7 +8517,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -8344,6 +8542,32 @@ slash@^4.0.0: resolved "https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + sockjs@^0.3.21: version "0.3.24" resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -8457,6 +8681,11 @@ stackframe@^1.1.1: resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +string-argv@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-convert@^0.2.0: version "0.2.1" resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" @@ -8492,6 +8721,15 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.6: version "4.0.6" resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" @@ -8579,6 +8817,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -8773,6 +9016,11 @@ throat@^6.0.1: resolved "https://registry.npmmirror.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -8887,6 +9135,11 @@ tslib@^2.0.3, tslib@^2.3.0: resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -9506,6 +9759,15 @@ workbox-window@6.5.1: "@types/trusted-types" "^2.0.2" workbox-core "6.5.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9570,6 +9832,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.2.2: + version "2.2.2" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"